PL / pgSQL ප්‍රතිදානය PostgreSQL වෙතින් CSV ගොනුවකට සුරකින්න


938

PostgreSQL දත්ත ගබඩාවක සිට CSV ගොනුවකට PL / pgSQL ප්‍රතිදානය සුරැකීමට ඇති පහසුම ක්‍රමය කුමක්ද?

මම විමසීම් ක්‍රියාත්මක කරන pgAdmin III සහ PSQL ප්ලගිනය සමඟ PostgreSQL 8.4 භාවිතා කරමි.


Answers:


1398

එහි ප්‍රති ing ලයක් ලෙස ඇති ගොනුව සේවාදායකයේ හෝ සේවාදායකයාගේ අවශ්‍යද?

සේවාදායක පැත්ත

ඔබට නැවත භාවිතා කිරීමට හෝ ස්වයංක්‍රීය කිරීමට පහසු යමක් අවශ්‍ය නම්, ඔබට COPY විධානයෙන් සාදන ලද Postgresql භාවිතා කළ හැකිය . උදා

Copy (Select * From foo) To '/tmp/test.csv' With CSV DELIMITER ',' HEADER;

මෙම ප්‍රවේශය මුළුමනින්ම දුරස්ථ සේවාදායකයේ ක්‍රියාත්මක වේ - එයට ඔබේ ප්‍රාදේශීය පරිගණකයට ලිවිය නොහැක. එය පෝස්ට්ග්‍රෙස් “සුපර් යූසර්” ලෙස (සාමාන්‍යයෙන් “රූට්” ලෙස හැඳින්වේ) ධාවනය කළ යුතුය. මන්ද එම යන්ත්‍රයේ දේශීය ගොනු පද්ධතිය සමඟ නපුරු දේ කිරීම පෝස්ට්ග්‍රෙස්ට නතර කළ නොහැකි බැවිනි.

ඇත්ත වශයෙන්ම, ඔබ භාවිතා කර ගත හැකි නිසා ඔබ, එය ලෙසද හැඳින්වේ (වෙනස් ආකාරයේ ආරක්ෂාවට තර්ජනයක් බව automating) ලෙස සම්බන්ධ විය යුතු අදහස් කරන්නේ නැහැ එම SECURITY DEFINERකිරීම විකල්පයCREATE FUNCTION වන කාර්යය කිරීමට ඔබට ලෙසද හැඳින්වේ යන හැඟීමෙන් ලකුණු .

තීරණාත්මක කොටස නම්, ඔබේ කාර්යය ආරක්ෂාව ඉක්මවා යාම පමණක් නොව අතිරේක චෙක්පත් සිදු කිරීමය - එබැවින් ඔබට අවශ්‍ය දත්ත අපනයනය කරන ශ්‍රිතයක් ලිවිය හැකිය, නැතහොත් විවිධ විකල්ප පිළිගත හැකි යමක් ලිවිය හැකිය. දැඩි සුදු ලැයිස්තුවක් හමුවන්න. ඔබ කරුණු දෙකක් පරීක්ෂා කළ යුතුය:

  1. කුමන ගොනු පරිශීලක / තැටිය මත ලිවීම හෝ කියවීමට ඉඩ දිය යුතු? උදාහරණයක් ලෙස මෙය විශේෂිත නාමාවලියක් විය හැකි අතර ගොනු නාමයට සුදුසු උපසර්ගයක් හෝ දිගුවක් තිබිය යුතුය.
  2. කුමන වගු පරිශීලක දත්ත-ගබඩාව / ලිවීම් කියවිය හැකි විය යුත්තේ කුමක්ද? මෙය සාමාන්‍යයෙන් GRANTදත්ත සමුදායේ s මගින් අර්ථ දැක්වෙනු ඇත , නමුත් ශ්‍රිතය දැන් සුපර් යූසර් ලෙස ක්‍රියාත්මක වන බැවින් සාමාන්‍යයෙන් “සීමාවෙන් ඔබ්බට” ඇති වගු සම්පූර්ණයෙන්ම ප්‍රවේශ විය හැකිය. ඔබගේ “පරිශීලකයින්” වගුවේ අවසානයේ ඔබේ ක්‍රියාව ක්‍රියාත්මක කිරීමට සහ පේළි එක් කිරීමට යමෙකුට ඉඩ දීමට ඔබට අවශ්‍ය නොවනු ඇත…

දැඩි කොන්දේසි සපුරාලන ලිපිගොනු සහ වගු අපනයනය කරන (හෝ ආනයනය කරන) කාර්යයන් පිළිබඳ උදාහරණ ද ඇතුළුව මෙම ප්‍රවේශය පුළුල් කරමින් මම බ්ලොග් සටහනක් ලියා ඇත .


සේවාදායකයාගේ පැත්ත

අනෙක් ප්‍රවේශය නම් සේවාදායකයාගේ පැත්තෙන් ගොනු හැසිරවීම , එනම් ඔබේ යෙදුමේ හෝ ස්ක්‍රිප්ටයේ ය. Postgres සේවාදායකයට ඔබ පිටපත් කරන්නේ කුමන ගොනුවකටදැයි දැන ගැනීමට අවශ්‍ය නැත, එය දත්ත පිට කරන අතර සේවාදායකයා එය කොතැනක හෝ තබයි.

මේ සඳහා පාදක වන වාක්‍ය COPY TO STDOUTඛණ්ඩය විධානය වන අතර pgAdmin වැනි චිත්‍රක මෙවලම් එය ඔබ වෙනුවෙන් ලස්සන සංවාදයකින් ඔතා ඇත.

මෙම psqlවිධාන රේඛාව සේවාදායකයා විශේෂ ඊනියා "පාර-විධාන" ඇත \copy"සැබෑ" ලෙස එකම විකල්ප දිනයයි COPY, නමුත් සේවාදායකයා තුළ ක්රියාත්මක කර ඇත:

\copy (Select * From foo) To '/tmp/test.csv' With CSV

;SQL විධාන මෙන් නොව මෙටා-විධාන නව රේඛාවකින් අවසන් වන බැවින් අවසන් කිරීමක් නොමැති බව සලකන්න .

සිට මෙම ලේඛන :

කෝපි psql උපදෙස් \ පිටපත සමඟ පටලවා නොගන්න. \ පිටපත STDIN වෙතින් COPY හෝ STDOUT වෙත පිටපත් කරන්න, ඉන්පසු psql සේවාදායකයාට ප්‍රවේශ විය හැකි ගොනුවක දත්ත ලබා ගනී / ගබඩා කරයි. මේ අනුව, \ පිටපත භාවිතා කරන විට සේවාදායකයාට වඩා ගොනු ප්‍රවේශය සහ ප්‍රවේශවීමේ අයිතිය සේවාදායකයා මත රඳා පවතී.

ඔබේ යෙදුම් ක්‍රමලේඛන භාෂාවට දත්ත තල්ලු කිරීම හෝ ලබා ගැනීම සඳහා සහයද තිබිය හැක , නමුත් ඔබට සාමාන්‍යයෙන් සම්මත SQL ප්‍රකාශයක් තුළ COPY FROM STDIN/ භාවිතා කළ නොහැක TO STDOUT, මන්ද ආදාන / ප්‍රතිදාන ප්‍රවාහය සම්බන්ධ කිරීමට ක්‍රමයක් නොමැත. PHP හි PostgreSQL හසුරුවන්නා ( නෑ PDO) ඉතා මූලික ඇතුළත් pg_copy_fromහා pg_copy_toවිශාල දත්ත කාණ්ඩ සඳහා කාර්යක්ෂම විය නොහැකි වන PHP අරාව, සිට / පිටපත් කාර්යයන්.


131
නිසැකවම ඉහත උදාහරණය සමහර විට පරිශීලකයා සුපිරි පරිශීලකයෙකු වීමට අවශ්‍ය වේ, මෙන්න සාමාන්‍ය මිනිසුන් සඳහා අනුවාදයකි;) “COPY (foo වෙතින් SELECT *) CSV HEADER සමඟ STDOUT කිරීමට” | psql -o '/tmp/test.csv' database_name
Drachenfels

10
Ra ඩ්‍රැචෙන්ෆෙල්ස්: \copyක්‍රියා කරයි - එහිදී, මාර්ග සේවාදායකයාට සාපේක්ෂ වන අතර අර්ධ සළකුණක් අවශ්‍ය නොවේ / අවසර නැත. මගේ සංස්කරණය බලන්න.
krlmlr

3
@IMSoP: වර්ග (පෝස්ට්ග්‍රෙස් 9.3 හි) ශ්‍රිතයකට ඔබ කෝපි ප්‍රකාශයක් එකතු කරන්නේ කෙසේද? විමසුම .csv ගොනුවකට සුරකිනු ඇත්ද?
jO.

12
ඒක \copyලයිනර් එකක් විය යුතු බව පෙනේ . එබැවින් ඔබට අවශ්‍ය පරිදි වර්ගීකරණය කිරීමේ අලංකාරය ඔබට නොලැබෙන අතර එය වටා පිටපතක් / ශ්‍රිතයක් තැබීම.
isaaclw

1
@AndreSilva පිළිතුර ප්රකාශ කරන පරිදි, \copyවිශේෂ පාර-වන විධානය තුළ psqlවිධාන රේඛාව සේවාදායකයා . PgAdmin වැනි වෙනත් සේවාදායකයින් තුළ එය ක්‍රියා නොකරනු ඇත; මෙම කාර්යය කිරීම සඳහා ඔවුන්ට ග්‍රැෆික් විශාරදයන් වැනි මෙවලම් ඇත.
IMSoP

532

විසඳුම් කිහිපයක් තිබේ:

1 psqlවිධානය

psql -d dbname -t -A -F"," -c "select * from users" > output.csv

මෙය ඔබට SSH හරහා භාවිතා කළ හැකි විශාල වාසියක් ඇත, වැනි ssh postgres@host command- ඔබට ලබා ගැනීමට හැකි වේ

2 postgres copyවිධානය

COPY (SELECT * from users) To '/tmp/output.csv' With CSV;

3 psql අන්තර්ක්‍රියාකාරී (හෝ නැත)

>psql dbname
psql>\f ','
psql>\a
psql>\o '/tmp/output.csv'
psql>SELECT * from users;
psql>\q

ඒවා සියල්ලම ස්ක්‍රිප්ට් වල භාවිතා කළ හැකිය, නමුත් මම කැමති # 1 ට ය.

Pgadmin 4 නමුත් එය ස්ක්‍රිප්ට් කළ නොහැක.


33
IMHO පළමු විකල්පය දෝෂ සහිත වේ, එයට අපනයන දත්තවල කොමාව නිසි ලෙස ගැලවී යාම ඇතුළත් නොවේ.
පියොහෙන්

4
එසේම, psql සෛල අගයන් උපුටා දක්වන්නේ නැත, එබැවින් ඔබගේ ඕනෑම දත්තයක් පරිසීමකය භාවිතා කරන්නේ නම්, ඔබගේ ගොනුව දූෂිත වනු ඇත.
සෙරින්

7
ErCerin -t යනු --tuples-only (තීරු නම් මුද්‍රණය කිරීම සහ ප්‍රති result ල පේළි ගණන් කිරීමේ පාදක ආදිය) සඳහා
සමාන පදයකි

21
කොමා වලින් ගැලවීමේ හිමිකම් පෑම පරීක්ෂා කර ඇත - එය සත්‍යයකි, # 1 ක්‍රමය කොමා වලින් අගයන්ගෙන් ගැලවෙන්නේ නැත .
මිස්ටර් කෝල්ස්

1
"et pset footer" ද භාවිතා කරන්න, එවිට පේළි ගණන ගොනුවේ
නොගැලපේ

95

පර්යන්තයේදී (db හා සම්බන්ධ වූ විට) ප්‍රතිදානය cvs ගොනුවට සකසන්න

1) ක්ෂේත්‍ර බෙදුම්කරු පහත පරිදි සකසන්න ',':

\f ','

2) නිමැවුම් ආකෘතිය නොබැඳි ලෙස සකසන්න:

\a

3) ටුපල් පමණක් පෙන්වන්න:

\t

4) ප්‍රතිදානය සකසන්න:

\o '/tmp/yourOutputFile.csv'

5) ඔබේ විමසුම ක්‍රියාත්මක කරන්න:

:select * from YOUR_TABLE

6) ප්‍රතිදානය:

\o

එවිට ඔබට මෙම ස්ථානයේ ඔබේ csv ගොනුව සොයාගත හැකිය:

cd /tmp

scpවිධානය භාවිතයෙන් එය පිටපත් කරන්න හෝ නැනෝ භාවිතයෙන් සංස්කරණය කරන්න:

nano /tmp/yourOutputFile.csv

4
සහ o o නැවත කොන්සෝලය මුද්‍රණය කිරීම සඳහා
metdos

2
මෙය CSV ගොනුවක් නිපදවන්නේ නැත, එය විධාන ප්‍රතිදානය පෙළ ගොනුවට පටිගත කරනු ඇත (එමඟින් එය කොමාවෙන් වෙන් නොකෙරේ).
රුස්ලාන් කබලින්

Us රුස්ලාන් කබාලින් ඔව්, කොමා වලින් වෙන් කරන ලද නිමැවුම් (
සීවීඑස්

5
"Csv" ප්‍රතිදානය නිසියාකාරව ගැලවී නොයන බවත්, SQL විධානයක් ක්‍රියාත්මක කරන සෑම අවස්ථාවකම ප්‍රති results ල ප්‍රතිදාන ගොනුවට සමපාත වන බවත් සඳහන් කිරීමෙන් මම මෙම පිළිතුර වැඩි දියුණු කරමි.
ඩැනී ආම්ස්ට්‍රෝං

ක්ෂේත්‍ර අගයන්හි නව රේඛා ගැන කුමක් කිව හැකිද? මෙම COPYහෝ \copyනිවැරදිව හැසිරවීම (සම්මත CSV ආකෘතියෙන් පරිවර්තනය) ළඟා; මෙය සිදු වේද?
වයිල්ඩ්කාඩ්

39

ශීර්ෂ පා with සමඟ විශේෂිත වගුවක සියලුම තීරු ගැන ඔබ උනන්දු නම් , ඔබට භාවිතා කළ හැකිය

COPY table TO '/some_destdir/mycsv.csv' WITH CSV HEADER;

මෙය වඩා ටිකක් සරලයි

COPY (SELECT * FROM table) TO '/some_destdir/mycsv.csv' WITH CSV HEADER;

එය මගේ දැනුමට අනුව සමාන වේ.


1
විමසුම අභිරුචි නම් (IE තීරු අන්වර්ථයන් හෝ විවිධ වගු වලට සම්බන්ධ වේ), ශීර්ෂකය තිරයේ දිස්වන ආකාරයට තීරු අන්වර්ථයන් මුද්‍රණය කරයි.
දේවි

36

CSV අපනයන ඒකාබද්ධ කිරීම

මෙම තොරතුරු සැබවින්ම හොඳින් නිරූපණය නොවේ. මෙය ව්‍යුත්පන්න කිරීමට මට අවශ්‍ය දෙවන අවස්ථාව මෙය බැවින්, වෙන කිසිවක් නොමැති නම් මට මතක් කර දීමට මෙය මෙහි තබමි.

ඇත්ත වශයෙන්ම මෙය කිරීමට ඇති හොඳම ක්‍රමය (CSG postgres වලින් ඉවත් කරන්න) COPY ... TO STDOUTවිධානය භාවිතා කිරීමයි . ඔබට එය කිරීමට අවශ්‍ය නොවුවද මෙහි පිළිතුරු වල දැක්වෙන ආකාරයට. විධානය භාවිතා කිරීමට නිවැරදි ක්‍රමය නම්:

COPY (select id, name from groups) TO STDOUT WITH CSV HEADER

එක් විධානයක් පමණක් මතක තබා ගන්න!

Ssh ට වඩා භාවිතා කිරීම සඳහා එය විශිෂ්ටයි:

$ ssh psqlserver.example.com 'psql -d mydb "COPY (select id, name from groups) TO STDOUT WITH CSV HEADER"' > groups.csv

Ssh හරහා ඩොකර් ඇතුළත භාවිතා කිරීම සඳහා එය විශිෂ්ටයි:

$ ssh pgserver.example.com 'docker exec -tu postgres postgres psql -d mydb -c "COPY groups TO STDOUT WITH CSV HEADER"' > groups.csv

එය දේශීය යන්ත්‍රයේ පවා විශිෂ්ටයි:

$ psql -d mydb -c 'COPY groups TO STDOUT WITH CSV HEADER' > groups.csv

නැත්නම් දේශීය යන්ත්‍රයේ ඩොකර් ඇතුලත?:

docker exec -tu postgres postgres psql -d mydb -c 'COPY groups TO STDOUT WITH CSV HEADER' > groups.csv

නැත්නම් කුබර්නෙට්ස් පොකුරක් මත, ඩොකර් තුළ, HTTPS හරහා ??:

kubectl exec -t postgres-2592991581-ws2td 'psql -d mydb -c "COPY groups TO STDOUT WITH CSV HEADER"' > groups.csv

ඉතින් බහුකාර්ය, බොහෝ කොමා!

ඔබත් එසේ කරනවාද?

ඔව් මම කළා, මෙන්න මගේ සටහන්:

COPYses

භාවිතා /copyඵලදායී ලෙස ඕනෑම දෙයක් පද්ධතිය මත ගොනු මෙහෙයුම් ක්රියාත්මක කරනු psqlවිධානය එය ක්රියාත්මක කරන පරිශීලක ලෙස, මත ධාවනය වන 1 . ඔබ දුරස්ථ සේවාදායකයකට සම්බන්ධ වන්නේ නම්, දුරස්ථ සේවාදායකයට psql/ සිට ක්‍රියාත්මක වන පද්ධතියේ දත්ත ගොනු පිටපත් කිරීම සරල ය .

COPYබැකෙන්ඩ් ක්‍රියාවලි පරිශීලක ගිණුම (පෙරනිමිය postgres), ගොනු මාර්ග සහ අවසරයන් පරීක්ෂා කර ඒ අනුව ක්‍රියාත්මක වන බැවින් සේවාදායකයේ ගොනු මෙහෙයුම් ක්‍රියාත්මක කරයි . භාවිතා කරන්නේ TO STDOUTනම් ගොනු අවසර චෙක්පත් මඟ හරිනු ලැබේ.

psqlCSV අවසානයේ වාසය කිරීමට අවශ්‍ය පද්ධතියේ ක්‍රියාත්මක නොවන්නේ නම් මෙම විකල්ප දෙකටම පසුකාලීන ගොනු චලනය අවශ්‍ය වේ . මගේ අත්දැකීම් අනුව, ඔබ බොහෝ දුරට දුරස්ථ සේවාදායකයන් සමඟ වැඩ කරන විට මෙය බොහෝ දුරට ඉඩ ඇත.

සරල CSV ප්‍රතිදානය සඳහා දුරස්ථ පද්ධතියකට ssh හරහා TCP / IP උමගක් වැනි දෙයක් වින්‍යාස කිරීම වඩාත් සංකීර්ණ වේ, නමුත් වෙනත් නිමැවුම් ආකෘති සඳහා (ද්විමය) /copyඋමං සම්බන්ධතාවයක් හරහා දේශීයව ක්‍රියාත්මක කිරීම වඩා හොඳ විය හැකිය psql. ඒ හා සමානව, විශාල ආනයන සඳහා, ප්‍රභව ගොනුව සේවාදායකයට ගෙනයාම සහ භාවිතා COPYකිරීම ඉහළම කාර්ය සාධන විකල්පය වේ.

PSQL පරාමිතීන්

Psql පරාමිතීන් සමඟ ඔබට CSV වැනි ප්‍රතිදානය සංයුති කළ හැකි නමුත් පේජරය අක්‍රීය කිරීමට මතක තබා ගැනීම සහ ශීර්ෂ ලබා නොගැනීම වැනි අවාසි ඇත:

$ psql -P pager=off -d mydb -t -A -F',' -c 'select * from groups;'
2,Technician,Test 2,,,t,,0,,                                                                                                                                                                   
3,Truck,1,2017-10-02,,t,,0,,                                                                                                                                                                   
4,Truck,2,2017-10-02,,t,,0,,

වෙනත් මෙවලම්

නැත, මට අවශ්‍ය වන්නේ මෙවලමක් සම්පාදනය කිරීම සහ / හෝ ස්ථාපනය නොකර CSV මගේ සේවාදායකයෙන් ඉවත් කර ගැනීමයි.


1
ප්‍රති results ල සුරැකෙන්නේ කොතැනටද? මගේ විමසුම ක්‍රියාත්මක වන නමුත් ගොනුව මගේ පරිගණකයේ කොතැනකවත් නොපෙන්වයි. මා කරන්නේ මෙයයි: COPY (a, b සිට c වෙතින් d = '1' තෝරන්න) CSVHEADER> abcd.csv
kRazzy R

1
RkRazzyR ප්‍රතිදානය psql විධානයේ stdout වෙත යයි, එබැවින් අවසානයේ ඔබ stdout සමඟ කරන ඕනෑම දෙයක් දත්ත යන්නේ කොතැනටද යන්න. මගේ උදාහරණ වලදී මම ගොනුවකට හරවා යැවීමට '> file.csv' භාවිතා කරමි. එය psql -c පරාමිතිය හරහා සේවාදායකයට යවන විධානයෙන් පිටත බව තහවුරු කර ගැනීමට ඔබට අවශ්‍යය. 'දේශීය යන්ත්‍රය' උදාහරණය බලන්න.
joshperry

1
සම්පූර්ණ පැහැදිලි කිරීම සඳහා ස්තූතියි. පිටපත් කිරීමේ විධානය psql සමඟ බලාපොරොත්තු රහිතව සංකීර්ණ වේ. මම සාමාන්‍යයෙන් අවසන් කරන්නේ දත්ත ගොනු ආනයනය හා අපනයනය කිරීම සඳහා නොමිලේ දත්ත සමුදා සේවාදායකයකු (dbeaver ප්‍රජා සංස්කරණය) භාවිතා කිරීමයි. එය හොඳ සිතියම්කරණ සහ ආකෘතිකරණ මෙවලම් සපයයි. ඔබගේ පිළිතුර දුරස්ථ පද්ධති වලින් පිටපත් කිරීම සඳහා සවිස්තරාත්මක උදාහරණ සපයයි.
පොහොසත් ලයිසකොව්ස්කි පීඑච්ඩී

26

මට දෝෂ පණිවිඩය ලැබුණු නිසා මට \ COPY භාවිතා කිරීමට සිදුවිය:

ERROR:  could not open file "/filepath/places.csv" for writing: Permission denied

එබැවින් මම භාවිතා කළෙමි:

\Copy (Select address, zip  From manjadata) To '/filepath/places.csv' With CSV;

එය ක්‍රියාත්මක වේ


21

නව අනුවාදය - psql 12 - සහාය වනු ඇත --csv.

psql - devel

--csv

CSV (කොමා-වෙන් කළ අගයන්) ප්‍රතිදාන ප්‍රකාරයට මාරු වේ. මෙය \ pset ආකෘතිය csv ට සමාන වේ .


csv_fieldsep

CSV ප්‍රතිදාන ආකෘතියේ භාවිතා කළ යුතු ක්ෂේත්‍ර බෙදුම්කරු නියම කරයි. බෙදුම්කරුගේ අක්‍ෂරය ක්ෂේත්‍රයක අගයක දිස්වන්නේ නම්, එම ක්ෂේත්‍රය සම්මත CSV රීති අනුගමනය කරමින් ද්විත්ව මිල ගණන් යටතේ ප්‍රතිදානය වේ. පෙරනිමිය කොමාවකි.

භාවිතය:

psql -c "SELECT * FROM pg_catalog.pg_tables" --csv  postgres

psql -c "SELECT * FROM pg_catalog.pg_tables" --csv -P csv_fieldsep='^'  postgres

psql -c "SELECT * FROM pg_catalog.pg_tables" --csv  postgres > output.csv

18

psql ඔබට මෙය කළ හැකිය:

edd@ron:~$ psql -d beancounter -t -A -F"," \
                -c "select date, symbol, day_close " \
                   "from stockprices where symbol like 'I%' " \
                   "and date >= '2009-10-02'"
2009-10-02,IBM,119.02
2009-10-02,IEF,92.77
2009-10-02,IEV,37.05
2009-10-02,IJH,66.18
2009-10-02,IJR,50.33
2009-10-02,ILF,42.24
2009-10-02,INTC,18.97
2009-10-02,IP,21.39
edd@ron:~$

man psqlමෙහි භාවිතා වන විකල්ප පිළිබඳ උදව් සඳහා බලන්න .


12
මෙය සත්‍ය CSV ගොනුවක් නොවේ - දත්තවල කොමාව තිබේ නම් එය පිළිස්සීම බලන්න - එබැවින් ගොඩනඟන ලද COPY සහාය භාවිතා කිරීම වඩාත් සුදුසුය. CSV හැරුණු විට වෙනත් විශේෂිත ආකෘති වලින් පෝස්ට්ග්‍රෙස් වෙතින් අපනයනය කිරීම සඳහා ඉක්මන් හැක් කිරීමක් ලෙස මෙම සාමාන්‍ය තාක්‍ෂණය පහසුය.
ග්‍රෙග් ස්මිත්

18

මම AWS Redshift හි වැඩ කරමින් සිටිමි, එය COPY TOවිශේෂාංගයට සහය නොදක්වයි .

මගේ BI මෙවලම ටැබ් වලින් වෙන් කරන ලද CSV සඳහා සහය දක්වයි, එබැවින් මම පහත සඳහන් දෑ භාවිතා කළෙමි:

 psql -h dblocation -p port -U user -d dbname -F $'\t' --no-align -c "SELECT * FROM TABLE" > outfile.csv

නියමයි, ස්තූතියි! CSV ලබා ගැනීම සඳහා මම `psql -h dblocation -p port -U user -d dbname -F $ ',' --no-align -c" SELECT * FROM TABLE "> outfile.csv` භාවිතා කර ඇත. ක්ෂේත්රයන් උපුටා දැක්වීමක් නොමැත, නමුත් එය මගේ අරමුණු සඳහා හොඳින් සේවය කරයි
සැහැල්ලු හිස සහිත

12

PgAdmin III හි විමසුම් කවුළුවෙන් ගොනු කිරීමට අපනයනය කිරීමට විකල්පයක් ඇත. ප්‍රධාන මෙනුවේ එය විමසුම -> ගොනු කිරීමට ක්‍රියාත්මක කරන්න හෝ එකම දේ කරන බොත්තමක් තිබේ (එය හරිත ත්‍රිකෝණයක් වන අතර එය නිල් පැහැති නම්ය තැටියක් ඇති අතර එය හරිත ත්‍රිකෝණයට වඩා වෙනස් වේ. ඔබ විමසුම් කවුළුවෙන් විමසුම ක්‍රියාත්මක නොකරන්නේ නම් මම IMSoP යෝජනා කළ දේ කර පිටපත් විධානය භාවිතා කරමි.


මට සුපිරි පරිපාලකයෙකු වීමට අවශ්‍ය බැවින් IMSoP හි පිළිතුර මට ප්‍රයෝජනවත් නොවීය. මෙය සංග්‍රහයක් විය. ස්තූතියි!
මයික්

10

මම කරුණු කිහිපයක් උත්සාහ කළ නමුත් ඒවායින් කිහිපයක් මට ශීර්ෂ විස්තර සහිත අපේක්ෂිත CSV ලබා දීමට හැකි විය.

මෙන්න මට වැඩ කළ දේ.

psql -d dbame -U username \
  -c "COPY ( SELECT * FROM TABLE ) TO STDOUT WITH CSV HEADER " > \
  OUTPUT_CSV_FILE.csv

9

මම කුඩා මෙවලමක් ලියා ඇති අතර psql2csvඑමඟින් COPY query TO STDOUTරටාව සංයුක්ත වන අතර එහි ප්‍රති CS ලය වන්නේ නිසි CSV ය. එහි අතුරු මුහුණත සමාන වේ psql.

psql2csv [OPTIONS] < QUERY
psql2csv [OPTIONS] QUERY

විමසුම STDIN හි අන්තර්ගතය, හෝ තිබේ නම් හෝ අවසාන තර්කය යැයි උපකල්පනය කෙරේ. මේවා හැර අනෙක් සියලුම තර්ක psql වෙත යොමු කරනු ලැබේ:

-h, --help           show help, then exit
--encoding=ENCODING  use a different encoding than UTF8 (Excel likes LATIN1)
--no-header          do not output a header

2
නියමයි. ඔබට ස්තුතියි.
ඇලෙක්ස්

6

ඔබට දිගු විමසුමක් තිබේ නම් සහ ඔබ psql භාවිතා කිරීමට කැමති නම් ඔබේ විමසුම ගොනුවකට දමා පහත විධානය භාවිතා කරන්න:

psql -d my_db_name -t -A -F";" -f input-file.sql -o output-file.csv

-F","-F";"
FWIW,

5

තීරු නම් සහිත CSV ගොනුව HEADER ලෙස බාගත කිරීම සඳහා මෙම විධානය භාවිතා කරන්න:

Copy (Select * From tableName) To '/tmp/fileName.csv' With CSV HEADER;

1

ජෙට් බ්‍රේන්ස් විසින් දත්ත සමුදා IDE එකක් වන ඩේටා ග්‍රිප් නිර්දේශ කරමි. ඔබට CSV ගොනුවකට SQL විමසුමක් අපනයනය කළ හැකි අතර පහසුවෙන් ssh උමං මාර්ග සැකසිය හැකිය. ප්‍රලේඛනය "ප්‍රති result ල කට්ටලය" ගැන සඳහන් කරන විට, එයින් අදහස් කරන්නේ කොන්සෝලය තුළ ඇති SQL විමසුමකින් ලැබෙන ප්‍රති result ලයයි.

මම DataGrip සමඟ සම්බන්ධ වී නැත, මම නිෂ්පාදනයට කැමතියි!


මම අනුමාන කරන්නේ පහත වැටීම සිදුවී ඇත්තේ සන්දර්භය / පැහැදිලි කිරීම නොමැතිකම නිසා, මම ඩේටා ග්‍රිප් ප්‍රලේඛනයට සම්බන්ධ කර ඇති බවයි. පහත හෙලීමට වෙනත් හේතුවක් තිබේ නම්, කරුණාකර මට දන්වන්න. මම ඉහත CLI විසඳුම් භාවිතා කර ඇති අතර කුඩා විමසුම් සඳහා DataGrip වඩා පහසුය.
skeller88

DataGrip හි ඇති ගැටළුව නම් එය ඔබේ මුදල් පසුම්බියට තදින් අල්ලා ගැනීමයි. එය නොමිලේ නොවේ. Dbeaver.io හි DBeaver හි ප්‍රජා සංස්කරණය උත්සාහ කරන්න . එය සියලුම ජනප්‍රිය දත්ත සමුදායන් සඳහා සහය දක්වන SQL ක්‍රමලේඛකයින්, DBAs සහ විශ්ලේෂකයින් සඳහා වන FOSS බහු-වේදිකා දත්ත සමුදා මෙවලමකි: MySQL, PostgreSQL, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access, Teradata, Firebird, Hive, Presto, ආදිය.
පොහොසත් ලයිසකොව්ස්කි පීඑච්ඩී

සිසිල් මම එය පරීක්ෂා කර බලන්න. ඔබේ අදහස පිළිතුරක් ලෙස නැවත පළ කරන්නේ කෙසේද?
skeller88

0

ඔබගේ වෙබ් බ්‍රව්සරයේ දත්ත සමුදා සේවාදායකයකු වන ජැක් ඩීබී මෙය සැබවින්ම පහසු කරයි. විශේෂයෙන්ම ඔබ හෙරොකු නම්.

දුරස්ථ දත්ත සමුදායන් හා සම්බන්ධ වීමට සහ ඒවා මත SQL විමසුම් ක්‍රියාත්මක කිරීමට එය ඔබට ඉඩ දෙයි.

                                                                                                                                                       මුලාශ්‍රය (මූලාශ්‍රය: jackdb.com )jackdb-heroku


ඔබේ ඩීබී සම්බන්ධ වූ පසු, ඔබට විමසුමක් ක්‍රියාත්මක කර CSV හෝ TXT වෙත අපනයනය කළ හැකිය (පහළ දකුණ බලන්න).


jackdb- අපනයනය

සටහන: මම කිසිසේත් ජැක් ඩීබී සමඟ සම්බන්ධ නොවෙමි. මම දැනට ඔවුන්ගේ නොමිලේ සේවාවන් භාවිතා කරන අතර එය විශිෂ්ට නිෂ්පාදනයක් යැයි සිතමි.


0

@ Skeller88 හි ඉල්ලීම පරිදි, මගේ ප්‍රතිචාරය පිළිතුරක් ලෙස නැවත පළ කරමි, එවිට සෑම ප්‍රතිචාරයක්ම කියවන්නේ නැති පුද්ගලයින්ට එය අහිමි නොවනු ඇත ...

DataGrip හි ඇති ගැටළුව නම් එය ඔබේ මුදල් පසුම්බියට තදින් අල්ලා ගැනීමයි. එය නොමිලේ නොවේ. Dbeaver.io හි DBeaver හි ප්‍රජා සංස්කරණය උත්සාහ කරන්න. එය සියලුම ජනප්‍රිය දත්ත සමුදායන් සඳහා සහය දක්වන SQL ක්‍රමලේඛකයින්, DBAs සහ විශ්ලේෂකයින් සඳහා වන FOSS බහු-වේදිකා දත්ත සමුදා මෙවලමකි: MySQL, PostgreSQL, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access, Teradata, Firebird, Hive, Presto, ආදිය.

DBeaver ප්‍රජා සංස්කරණය මඟින් දත්ත සමුදායකට සම්බන්ධ වීම, දත්ත ලබා ගැනීම සඳහා විමසුම් නිකුත් කිරීම සහ CSV, JSON, SQL, හෝ වෙනත් පොදු දත්ත ආකෘති වෙත සුරැකීමට ප්‍රති result ල කට්ටලය බාගන්න. එය පෝස්ට්ග්‍රෙස් සඳහා TOAD, SQL සේවාදායකය සඳහා TOAD හෝ ඔරකල් සඳහා ටෝඩ් සඳහා ශක්‍ය FOSS තරඟකරුවෙකි.

මට ඩීබීවර් සමඟ කිසිදු සම්බන්ධයක් නැත. මම මිල හා ක්‍රියාකාරිත්වයට ප්‍රිය කරමි, නමුත් ඔවුන් ප්‍රාර්ථනා කරන්නේ ප්‍රස්ථාර සහ ප්‍රස්ථාර සෘජුවම නිර්මාණය කිරීම සඳහා වාර්ෂික දායක මුදල ගෙවීමට පරිශීලකයින්ට අවශ්‍ය නොවී, ඩීබීවර් / සූර්යග්‍රහණ යෙදුම වඩාත් විවෘත කර විශ්ලේෂණ විජට් ඩීබීවර් / එක්ලිප්ස් වෙත එක් කිරීම පහසු කරවීමයි. අයදුම්පත්රය. මගේ ජාවා කේතීකරණ කුසලතා මලකඩ වන අතර සූර්යග්‍රහණ විජට් සාදන ආකාරය මුදා හැරීමට සති ගනනාවක් ගතවන බවක් මට හැඟෙන්නේ නැත, ඩීබීවර් ප්‍රජා සංස්කරණයට තෙවන පාර්ශවීය විජට් එකතු කිරීමේ හැකියාව අක්‍රීය කර ඇති බව සොයා ගැනීමට පමණි.

DBeaver හි ප්‍රජා සංස්කරණයට එකතු කිරීම සඳහා විශ්ලේෂණ විජට් නිර්මාණය කිරීමේ පියවර පිළිබඳව DBeaver භාවිතා කරන්නන්ට අවබෝධයක් තිබේද?


-3
import json
cursor = conn.cursor()
qry = """ SELECT details FROM test_csvfile """ 
cursor.execute(qry)
rows = cursor.fetchall()

value = json.dumps(rows)

with open("/home/asha/Desktop/Income_output.json","w+") as f:
    f.write(value)
print 'Saved to File Successfully'

3
කරුණාකර ඔබ පිළිතුර සංස්කරණය කළ දේ විස්තර කරන්න, කේත පමණක් පිළිතුරෙන් වළකින්න
GGO

3
සීමිත කෙටිකාලීන උදව් ලබා දිය හැකි මෙම කේත ස්නිපටයට ස්තූතියි. නිසි පැහැදිලි කිරීමක් මෙම ගැටලුවට හොඳ විසඳුමක් වන්නේ මන්දැයි පෙන්වීමෙන් එහි දිගුකාලීන වටිනාකම බෙහෙවින් වැඩි දියුණු කරනු ඇති අතර අනාගත පා readers කයන්ට වෙනත් සමාන ප්‍රශ්න සමඟ එය වඩාත් ප්‍රයෝජනවත් වනු ඇත. ඔබ කළ උපකල්පන ද ඇතුළුව යම් පැහැදිලි කිරීමක් එක් කිරීමට කරුණාකර ඔබේ පිළිතුර සංස්කරණය කරන්න.
ටෝබි ස්පයිට්

2
මෙය csv ගොනුවක් නොව json ගොනුවක් නිපදවනු ඇත.
nvoigt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.