পোস্টগ্রিএসকিউএল থেকে একটি সিএসভি ফাইলে PL / pgSQL আউটপুট সংরক্ষণ করুন


910

কোনও পোস্টগ্রাইএসকিউএল ডাটাবেস থেকে সিএসভি ফাইলে PL / pgSQL আউটপুট সংরক্ষণ করার সহজতম উপায় কী?

আমি পোস্টগ্র্রেএসকিউএল 8.4 ব্যবহার করছি যেখানে আমি কোয়ে থেকে চালাচ্ছি যেখানে পিজএডমিন তৃতীয় এবং পিএসকিউএল প্লাগইন রয়েছে।


উত্তর:


1366

আপনি কি সার্ভারে বা ক্লায়েন্টের ফলাফল ফাইল চান?

সার্ভার সাইড

আপনি যদি আবার কিছু সহজে ব্যবহার করতে বা স্বয়ংক্রিয় করতে চান তবে আপনি পোস্টগ্র্রেস্কেলের বিল্ট ইন সিপি কমান্ডটি ব্যবহার করতে পারেন । যেমন

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

এই পদ্ধতির সম্পূর্ণরূপে রিমোট সার্ভারে চলে - এটি আপনার স্থানীয় পিসিতে লিখতে পারে না। এটি পোস্টগ্রিস "সুপারইউসার" (সাধারণত "রুট" নামে পরিচিত) হিসাবে চালানো দরকার কারণ পোস্টগ্রিস এটিকে সেই মেশিনের স্থানীয় ফাইল সিস্টেমের সাথে দুষ্টু কাজগুলি থামাতে পারে না।

আসলে এর অর্থ এই নয় যে আপনি একটি সুপার-ইউজার হিসাবে সংযুক্ত করা আছে, (স্বয়ংক্রিয় যে একটি ভিন্ন ধরনের একটি নিরাপত্তা ঝুঁকি হবে) কারণ আপনি ব্যবহার করতে পারেন বিকল্প একটি ফাংশন যা করতে রান যেন আপনি একটি সুপার-ইউজার ছিলSECURITY DEFINERCREATE FUNCTION

গুরুত্বপূর্ণ অংশটি হ'ল আপনার ফাংশনটি অতিরিক্ত চেকগুলি সম্পাদন করার জন্য রয়েছে, কেবলমাত্র সিকিউরিটি বাই-পাস করার জন্য নয় - সুতরাং আপনি এমন একটি ফাংশন লিখতে পারেন যা আপনার প্রয়োজনীয় ডেটা রপ্তানি করে, বা আপনি এমন কিছু লিখতে পারেন যা যতক্ষণ না তারা বিভিন্ন বিকল্প গ্রহণ করতে পারে একটি কঠোর শ্বেত তালিকাতে দেখা। আপনার দুটি জিনিস পরীক্ষা করা দরকার:

  1. কোন ডিস্কে ব্যবহারকারীকে কোন ফাইল পড়তে / লিখতে দেওয়া উচিত? উদাহরণস্বরূপ এটি কোনও নির্দিষ্ট ডিরেক্টরি হতে পারে এবং ফাইলের নামের একটি উপসর্গ বা এক্সটেনশন থাকতে পারে।
  2. ব্যবহারকারীর ডাটাবেসে কোন টেবিলটি পড়তে / লিখতে সক্ষম হওয়া উচিত? এটি সাধারণত GRANTডেটাবেজে এস দ্বারা সংজ্ঞায়িত করা হত তবে ফাংশনটি এখন সুপারভাইজার হিসাবে চলছে, সুতরাং সারণীগুলি যা সাধারণত "সীমার বাইরে" থাকবে তা পুরোপুরি অ্যাক্সেসযোগ্য হবে। আপনি সম্ভবত আপনার "ব্যবহারকারী" টেবিলের শেষে কাউকে আপনার ক্রিয়াকলাপটি করতে এবং সারি যুক্ত করতে চান না ...

আমি এই পদ্ধতির প্রসারিত একটি ব্লগ পোস্ট লিখেছি , ফাংশনগুলির কয়েকটি উদাহরণ যা ফাইল এবং টেবিলগুলি কঠোর শর্ত পূরণ করে রফতানি করে (বা আমদানি করে)।


মক্কেলের পক্ষে

অন্য পদ্ধতিটি হ'ল ফাইলটি ক্লায়েন্টের পক্ষে পরিচালনা করা , অর্থাৎ আপনার অ্যাপ্লিকেশন বা স্ক্রিপ্টে। পোস্টগ্রিস সার্ভারটি আপনার কোন ফাইলটিতে অনুলিপি করছে তা জানা দরকার নেই, এটি কেবল ডেটা ছড়িয়ে দেয় এবং ক্লায়েন্টটি এটিকে কোথাও রেখে দেয়।

এর জন্য অন্তর্নিহিত বাক্য COPY TO STDOUTগঠনটি হ'ল কমান্ড এবং পিজিএডমিনের মতো গ্রাফিকাল সরঞ্জামগুলি এটি আপনার জন্য একটি সুন্দর সংলাপে আবদ্ধ করবে।

psqlকম্যান্ড-লাইন ক্লায়েন্ট একটি বিশেষ "মেটা-কমান্ড" বলা হয়েছে \copy, যা "বাস্তব" সব একই বিকল্প লাগে COPY, কিন্তু ক্লায়েন্ট ভিতরে চালানো হয়:

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

নোট করুন যে কোনও টার্মিনেটিং নেই ;, কারণ মেটা-কমান্ডগুলি এসকিউএল কমান্ডের বিপরীতে নিউলাইন দ্বারা বন্ধ করা হয়।

ডক্স থেকে :

পিএসকিএল নির্দেশ-কপি দিয়ে কপি বিভ্রান্ত করবেন না। \ অনুলিপি এসটিডিন থেকে অনুলিপি বা স্টিডি অনুলিপি করে, এবং তারপরে পিএসকিএল ক্লায়েন্টের অ্যাক্সেসযোগ্য কোনও ফাইলে ডেটা সংগ্রহ / সঞ্চয় করে। সুতরাং, ফাইল অ্যাক্সেসযোগ্যতা এবং অ্যাক্সেসের অধিকারগুলি যখন \ অনুলিপি ব্যবহার করা হয় তখন সার্ভারের চেয়ে ক্লায়েন্টের উপর নির্ভর করে।

আপনার অ্যাপ্লিকেশন প্রোগ্রামিং ল্যাঙ্গুয়েজে ডেটা ঠেলা বা আনার পক্ষে সমর্থন থাকতে পারে তবে আপনি সাধারণত কোনও স্ট্যান্ডার্ড এসকিউএল স্টেটমেন্টের মধ্যে COPY FROM STDIN/ ব্যবহার করতে পারবেন না TO STDOUT, কারণ ইনপুট / আউটপুট স্ট্রিমের সংযোগ করার কোনও উপায় নেই। পিএইচপি'র পোস্টগ্রিসএসকিউএল হ্যান্ডলার ( পিডিও নয় ) খুব বেসিক pg_copy_fromএবং pg_copy_toফাংশনগুলি অন্তর্ভুক্ত করে যা কোনও পিএইচপি অ্যারেতে / থেকে অনুলিপি করে যা বড় ডেটা সেটগুলির জন্য কার্যকর নাও হতে পারে।


131
স্পষ্টতই উপরের উদাহরণটির জন্য ব্যবহারকারীকে কখনও কখনও সুপারইউসার হতে হয়, এখানে সাধারণ মানুষের জন্য একটি সংস্করণ রয়েছে;) প্রতিলিপি "কপি (সিইওপিও * থেকে সিএসভি হেডার" দিয়ে স্টুডুতে) নির্বাচন করুন | psql -o '/tmp/test.csv' database_name
Drachenfels

10
@ ড্রাচেনফেলস: \copyকাজ করে - সেখানেও, পথগুলি ক্লায়েন্টের সাথে সম্পর্কিত এবং কোনও সেমিকোলনের প্রয়োজন / অনুমতি নেই। আমার সম্পাদনা দেখুন।
krlmlr

3
@ আইএমএসওপি: আপনি কীভাবে কোনও স্কাইল (9.3 পোস্টগ্রিসে) ফাংশনে একটি কপির বিবৃতি যুক্ত করবেন? সুতরাং ক্যোয়ারী একটি .csv ফাইলে সংরক্ষিত হয়?
জো।

12
দেখে মনে হচ্ছে \copyওয়ান-লাইনার হওয়া দরকার। সুতরাং আপনি যেভাবে চান সিক্যুয়াল ফর্ম্যাট করার সৌন্দর্য পাবেন না এবং এর চারপাশে কেবল একটি অনুলিপি / ফাংশন রাখবেন।
isaaclw

1
@AndreSilva উত্তর যুক্তরাষ্ট্রের মতো, \copyএকটি বিশেষ মেটা-কমান্ড মধ্যে psqlকম্যান্ড-লাইন ক্লায়েন্ট । এটি অন্যান্য ক্লায়েন্ট, পিজএডমিনের মতো কাজ করবে না; এই কাজটি করার জন্য তাদের সম্ভবত গ্রাফিকাল উইজার্ডগুলির মতো নিজস্ব সরঞ্জাম থাকবে।
আইএমএসওপি

519

বেশ কয়েকটি সমাধান রয়েছে:

1 psqlকমান্ড

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

এতে এসএসএইচ এর মাধ্যমে আপনি এটি ব্যবহার করতে পারবেন এমন বড় সুবিধা রয়েছে ssh postgres@host command- যেমন আপনাকে পেতে সক্ষম করে

2 postgres copyকমান্ড

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

3 পিএসকিএল ইন্টারেক্টিভ (বা না)

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

এগুলির সবগুলি স্ক্রিপ্টগুলিতে ব্যবহার করা যেতে পারে তবে আমি # 1 পছন্দ করি।

4 পিগাডমিন কিন্তু এটি স্ক্রিপ্টযোগ্য নয়।


32
আইএমএইচও প্রথম বিকল্পটি ত্রুটিযুক্ত প্রবণ, কারণ এতে রফতানি হওয়া তথ্যে কমা যথাযথভাবে পালানো অন্তর্ভুক্ত নয়।
পাইওহেন

4
এছাড়াও, পিএসকিএল সেল মানগুলি উদ্ধৃত করে না, সুতরাং যদি আপনার কোনও ডেটা ডিলিমেটার ব্যবহার করে তবে আপনার ফাইলটি দূষিত হবে।
সেরিন

7
@ কেরিন-টি হ'ল - টপলস-কেবলমাত্র (কলামের নাম এবং ফলাফলের সারি গণনা পাদকগুলি মুদ্রণ বন্ধ করুন) - কলাম শিরোনাম পেতে এটিকে বাদ দিন
আইসি

21
কমা-পলায়নের দাবিটি সবেমাত্র পরীক্ষিত — এটি সত্য, পদ্ধতি # 1 মানগুলিতে কমাগুলি থেকে রেহাই পায় না
মিঃকোলস

1
"\ pset পাদলেখ" ব্যবহার করুন যাতে সারি গণনা করা যায় না ফাইলটিতে
টেকব্রাউনব্যাগগুলি 21

94

টার্মিনালে সিভিএস ফাইলে সেটআপ আউটপুট (ডিবিতে সংযুক্ত থাকা অবস্থায়)

1) ক্ষেত্র পৃথককে এতে সেট করুন ',':

\f ','

2) নির্ধারণ ছাড়াই আউটপুট বিন্যাস সেট করুন:

\a

3) কেবলমাত্র টিপলগুলি দেখান:

\t

4) আউটপুট সেট করুন:

\o '/tmp/yourOutputFile.csv'

5) আপনার ক্যোয়ারী কার্যকর করুন:

:select * from YOUR_TABLE

6) আউটপুট:

\o

তারপরে আপনি এই স্থানে আপনার সিএসভি ফাইলটি সন্ধান করতে পারবেন:

cd /tmp

scpকমান্ডটি ব্যবহার করে এটি অনুলিপি করুন বা ন্যানো ব্যবহার করে সম্পাদনা করুন:

nano /tmp/yourOutputFile.csv

4
এবং again o আবার কনসোল প্রিন্ট করতে
6:56

2
এটি কোনও সিএসভি ফাইল তৈরি করবে না, এটি কেবলমাত্র পাঠ্য ফাইলে কমান্ড আউটপুট রেকর্ড করবে (এটি এটিকে কমা দ্বারা পৃথক করে না)।
রুসলান কাবালিন

@RuslanKabalin হ্যাঁ আমি শুধু যে notticed এবং ammended কমা দ্বারা পৃথক আউটপুট (CVS) তৈরি করতে নির্দেশ
মার্সিন Wasiluk

5
আমি এই উত্তরটি উন্নত করে উল্লেখ করব যে "সিএসভি" আউটপুটটি যথাযথভাবে রক্ষা পাবে না এবং প্রতিবার কোনও এসকিএল কমান্ড কার্যকর করা হলে ফলাফল আউটপুট ফাইলের সাথে সংযুক্ত করা হয়।
ড্যানি আর্মস্ট্রং

ক্ষেত্রের মানগুলিতে নিউলাইনগুলি সম্পর্কে কী? COPYবা \copyসঠিকভাবে হ্যান্ডেল পন্থা (ধর্মান্তরিত মান CSV বিন্যাসে সাহায্য); এই আছে?
ওয়াইল্ডকার্ড

37

যদি আপনি শিরোনামের পাশাপাশি একটি নির্দিষ্ট টেবিলের সমস্ত কলামে আগ্রহী হন , আপনি ব্যবহার করতে পারেন

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

এটি তুলনায় একটি সামান্য বিট সহজ

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

যা আমার জ্ঞানের সেরা হিসাবে সমান।


1
যদি ক্যোয়ারীটি কাস্টম হয় (IE কলামের উপাধি রয়েছে বা বিভিন্ন টেবিলগুলিতে যোগদান করছেন), শিরোনামটি স্ক্রিনে যেমন প্রদর্শিত হবে তেমনি কলামের নামটি মুদ্রণ করবে।
ডেভী

33

সিএসভি রফতানি একীকরণ

এই তথ্যটি সত্যিই ভালভাবে উপস্থাপিত হয় না। যেহেতু এটি দ্বিতীয়বারের জন্য আমার দরকার হয়েছিল, আমি অন্য কিছু না থাকলে নিজেকে মনে করিয়ে দেওয়ার জন্য এটি এখানে রাখব।

সত্যিই এটি করার সর্বোত্তম উপায় হ'ল 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

বা এইচটিটিপিএসের উপর দিয়ে একটি ডাবরে, একটি কুবেরনেটস ক্লাস্টারে ??

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

এত বহুমুখী, অনেক কমা!

তুমি কি আসলেই?

হ্যাঁ আমি করেছি, এখানে আমার নোটগুলি রয়েছে:

কপিস

ব্যবহার /copyকার্যকরভাবে যাই হোক না কেন সিস্টেমে ফাইল অপারেশন executes psql, কমান্ড চলছে ব্যবহারকারী কে নির্বাহ হয় 1 । আপনি যদি কোনও রিমোট সার্ভারের সাথে সংযোগ স্থাপন psqlকরেন তবে রিমোট সার্ভারে / থেকে চালানো সিস্টেমে ডেটা ফাইলগুলি অনুলিপি করা সহজ ।

COPYব্যাকএন্ড প্রক্রিয়া ব্যবহারকারী অ্যাকাউন্ট (ডিফল্ট postgres) হিসাবে ফাইল সার্ভারে ফাইল অপারেশনগুলি চালায় , ফাইলের পাথ এবং অনুমতিগুলি ততক্ষণে পরীক্ষা করা হয় এবং প্রয়োগ করা হয়। যদি ব্যবহার করে থাকেন TO STDOUTতবে ফাইল অনুমতি চেকগুলি বাইপাস করা হয়।

psqlআপনি যে ফলাফলের সিএসভি চূড়ান্তভাবে বাস করতে চান সেই সিস্টেমে যদি না চালানো হয় তবে এই দুটি বিকল্পেরই পরবর্তী ফাইল চলাচলের প্রয়োজন । আপনি সম্ভবত বেশিরভাগ দূরবর্তী সার্ভারের সাথে কাজ করার সময়, আমার অভিজ্ঞতার ক্ষেত্রে এটি সম্ভবত সবচেয়ে সম্ভাব্য কেস।

টিএসসিপি / আইপি টানেলের মতো কোনও জিনিসকে সিএসভি আউটপুটের জন্য রিমোট সিস্টেমে টিএসসিপি / আইপি টানেলের মতো কনফিগার করা আরও জটিল, তবে অন্য আউটপুট ফর্ম্যাটগুলির (বাইনারি) জন্য /copyকোনও স্থানীয়কে কার্যকর করে টানেলযুক্ত সংযোগ স্থাপন করা ভাল psql। অনুরূপ শিরাতে, বড় আমদানির জন্য, উত্স ফাইলটি সার্ভারে সরানো এবং ব্যবহার COPYকরা সম্ভবত সর্বাধিক-সম্পাদন বিকল্প।

পিএসকিউএল পরামিতি

পিএসকিএল প্যারামিটারের সাহায্যে আপনি সিএসভি এর মতো আউটপুট ফর্ম্যাট করতে পারেন তবে পেসার অক্ষম করতে এবং হেডার না পাওয়ার মতো ডাউনসাইড রয়েছে:

$ 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,,

অন্যান্য সরঞ্জাম

না, আমি কেবল কোনও সংকলন এবং / অথবা কোনও সরঞ্জাম ইনস্টল না করে আমার সার্ভার থেকে সিএসভি পেতে চাই।


1
ফলাফলগুলি কোথায় সংরক্ষিত হবে? আমার ক্যোয়ারী চলে তবে ফাইলটি আমার কম্পিউটারে কোথাও প্রদর্শিত হবে না। এটি আমি যা করছি: অনুলিপি করুন (সি থেকে ডি, '1' থেকে a, b নির্বাচন করুন) CSVHEADER> abcd.csv দিয়ে
চালিয়ে

1
@kRazzyR আউটপুটটি পিএসএইচএল কমান্ডের স্টডআউটে চলে যায়, সুতরাং শেষ পর্যন্ত আপনি স্টাডআউট দিয়ে যা করেন তা ডেটা যায়। আমার উদাহরণগুলিতে আমি কোনও ফাইলে পুনঃনির্দেশ করতে '> file.csv' ব্যবহার করি। আপনি এটি নিশ্চিত করতে চান যে পিএসএকিএল-সি প্যারামিটারের মাধ্যমে সার্ভারে পাঠানো কমান্ডের বাইরে। 'লোকাল মেশিন' উদাহরণ দেখুন।
জোশপুরি

সম্পূর্ণ ব্যাখ্যার জন্য ধন্যবাদ। অনুলিপিটি পিএসএকিএল সহ অনুলিপি জটিল copy আমি সাধারণত ডেটা ফাইল আমদানি ও রফতানি করতে একটি ফ্রি ডাটাবেস ক্লায়েন্ট (ডাইভার সম্প্রদায় সংস্করণ) ব্যবহার করে শেষ করি। এটি ম্যাপিং এবং ফর্ম্যাটিংয়ের দুর্দান্ত সরঞ্জাম সরবরাহ করে। আপনার উত্তরটি দূরবর্তী সিস্টেমগুলি থেকে অনুলিপি করার জন্য দুর্দান্ত বিশদ উদাহরণ সরবরাহ করে।
রিচ লাইসাকোভস্কি পিএইচডি

24

আমি ত্রুটি বার্তা পেয়েছি কারণ আমাকে \ কপি ব্যবহার করতে হয়েছিল:

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

সুতরাং আমি ব্যবহার করেছি:

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

এবং এটি কাজ করছে


17

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
এটি সত্যিকারের সিএসভি ফাইল নয় - ডেটাতে কমা থাকলে তা জ্বলুন দেখুন - তাই বিল্ট-ইন সিপিওয়াই সমর্থনটি পছন্দ করা পছন্দ। তবে এই সাধারণ কৌশলটি সিএসভি ছাড়াও অন্যান্য সীমিত ফরমেটে পোস্টগ্র্রেস থেকে রফতানির জন্য দ্রুত হ্যাক হিসাবে কার্যকর।
গ্রেগ স্মিথ

16

আমি এডাব্লুএস রেডশিফ্টে কাজ করছি, যা COPY TOবৈশিষ্ট্যটি সমর্থন করে না ।

আমার বিআই সরঞ্জামটি যদিও ট্যাব-সীমাবদ্ধ CSV গুলি সমর্থন করে, তাই আমি নিম্নলিখিতটি ব্যবহার করেছি:

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

16

নতুন সংস্করণ - PSQL 12 - সমর্থন করবে --csv

পিএসকিএল - ডেভেল

--csv

সিএসভি (কমা-বিভাজিত মান) আউটপুট মোডে স্যুইচ করে। এটি \ pset ফর্ম্যাট সিএসভির সমতুল্য ।


csv_fieldsep

সিএসভি আউটপুট ফর্ম্যাটে ব্যবহারের জন্য ফিল্ড বিভাজক নির্দিষ্ট করে। বিভাজক চরিত্রটি যদি কোনও ক্ষেত্রের মানতে উপস্থিত হয়, তবে সেই ক্ষেত্রটি স্ট্যান্ডার্ড সিএসভি বিধি অনুসরণ করে ডাবল উদ্ধৃতিগুলির মধ্যে আউটপুট। ডিফল্ট একটি কমা হয়।

ব্যবহার:

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

11

PgAdmin III এ ক্যোয়ারী উইন্ডো থেকে ফাইলটিতে রফতানি করার বিকল্প রয়েছে। মূল মেনুতে এটি ক্যোয়ারী -> ফাইল করতে এক্সিকিউট করুন বা একটি বোতাম আছে যা একই কাজ করে (এটি একটি নীল ফ্লপি ডিস্কের সাথে একটি সবুজ ত্রিভুজ যা সরল সবুজ ত্রিভুজটির বিপরীতে রয়েছে যা কেবল অনুসন্ধান করে) runs আপনি যদি ক্যোয়ারী উইন্ডো থেকে কোয়েরিটি চালাচ্ছেন না তবে আমি আইএমএসওপি যা বলেছিলাম তা করব এবং অনুলিপি কমান্ডটি ব্যবহার করব।


আইএমএসওপির উত্তর আমার পক্ষে কার্যকর হয়নি কারণ আমার সুপার অ্যাডমিন হওয়া দরকার। এটি একটি ট্রিট কাজ করে। ধন্যবাদ!
মাইক

9

আমি বেশ কয়েকটি জিনিস চেষ্টা করেছিলাম কিন্তু তাদের মধ্যে কয়েকটি শিরোনামের বিশদ সহ আমাকে পছন্দসই সিএসভি দিতে সক্ষম হয়েছিল।

আমার জন্য যা কাজ করেছে তা এখানে।

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প্যাটার্নটি encapsulates , যার ফলে যথাযথ CSV হয়। এটি ইন্টারফেস অনুরূপ psql

psql2csv [OPTIONS] < QUERY
psql2csv [OPTIONS] QUERY

কোয়েরিটি উপস্থিত থাকলে, বা শেষ আর্গুমেন্টটি STDIN এর বিষয়বস্তু হিসাবে ধরে নেওয়া হয়। এগুলি ব্যতীত অন্য সমস্ত যুক্তিগুলি পিএসকিএলে ফরোয়ার্ড করা হয়েছে:

-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 -d my_db_name -t -A -F";" -f input-file.sql -o output-file.csv

এফডাব্লুআইডাব্লু, আমাকে এমএস এক্সেলে সঠিকভাবে খুলতে হবে এমন একটি সিএসভি ফাইল উত্পন্ন করার -F","পরিবর্তে ব্যবহার -F";"করতে হয়েছিল
সিএফএল_ জেফ ১৯

4

হেডার হিসাবে কলামের নাম সহ সিএসভি ফাইল ডাউনলোড করতে এই আদেশটি ব্যবহার করুন:

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

1

আমি জেটব্রেইনস দ্বারা ডেটাবেস আইডিই ডেটাগ্রিপকে অত্যন্ত সুপারিশ করব। আপনি একটি সিএসভি ফাইলে একটি এসকিউএল কোয়েরি রফতানি করতে পারেন পারেন এবং সহজেই এসএসএল টানেলিং সেটআপ করতে পারেন। যখন ডকুমেন্টেশনটি "ফলাফল সেট" বোঝায়, তাদের অর্থ কনসোলে একটি এসকিউএল কোয়েরি দ্বারা প্রাপ্ত ফলাফল।

আমি ডেটাগ্রিপের সাথে যুক্ত নই, আমি কেবল পণ্যটি পছন্দ করি!


অনুমান / ব্যাখ্যাের অভাবের কারণে ডাউনওয়েটটি অনুমান করা হচ্ছে, তাই আমি ডেটাগ্রিপ ডকুমেন্টেশনের সাথে লিঙ্ক করেছি। ডাউনটাটের জন্য যদি আলাদা কারণ থাকে তবে দয়া করে আমাকে জানান। আমি উপরের সিএলআই সমাধানগুলি ব্যবহার করেছি এবং ছোট প্রশ্নগুলির জন্য ডেটাগ্রিপ অনেক সহজ।
skeller88

ডেটাগ্রিপে সমস্যাটি হ'ল এটি আপনার মানিব্যাগের উপর একটি খপ্পর রাখে। এটি নিখরচায় নয়। Dbeaver.io এ ডিবিভারের সম্প্রদায় সংস্করণটি ব্যবহার করে দেখুন । এটি এসকিউএল প্রোগ্রামারস, ডিবিএ এবং বিশ্লেষকদের জন্য একটি ফসএস মাল্টি-প্ল্যাটফর্ম ডাটাবেস সরঞ্জাম যা সমস্ত জনপ্রিয় ডাটাবেসগুলিকে সমর্থন করে: মাইএসকিউএল, পোস্টগ্রিসকিউএল, এসকিউএলাইট, ওরাকল, ডিবি 2, এসকিউএল সার্ভার, সিবাস, এমএস অ্যাকসেস, টেরাদাতা, ফায়ারবার্ড, হাইভ, প্রেস্টো ইত্যাদি supports
রিচ লাইসাকোভস্কি পিএইচডি

কুল আমি এটি পরীক্ষা করে দেখুন। আপনি কীভাবে একটি উত্তর হিসাবে আপনার মন্তব্য পুনরায় পোস্ট?
skeller88

0

আপনার ওয়েব ব্রাউজারে একটি ডাটাবেস ক্লায়েন্ট জ্যাকডিবি এটি সত্যই সহজ করে তুলেছে । বিশেষত যদি আপনি হেরোকুতে থাকেন।

এটি আপনাকে দূরবর্তী ডেটাবেসগুলিতে সংযুক্ত করতে এবং সেগুলিতে এসকিউএল কোয়েরি চালাতে দেয়।

                                                                                                                                                       উত্স (উত্স: jackdb.com )jackdb-heroku


একবার আপনার ডিবি সংযুক্ত হয়ে গেলে আপনি একটি ক্যোয়ারী চালিয়ে সিএসভি বা টিএক্সটি রপ্তানি করতে পারেন (নীচের ডানদিকে দেখুন)।


jackdb-রপ্তানি

দ্রষ্টব্য: আমি কোনওভাবেই জ্যাকডিবি'র সাথে অনুমোদিত নই। আমি বর্তমানে তাদের নিখরচায় পরিষেবাগুলি ব্যবহার করি এবং মনে করি এটি দুর্দান্ত পণ্য।


0

@ স্কেলার ৮৮ এর অনুরোধ অনুসারে, আমি আমার মন্তব্যটি একটি উত্তর হিসাবে পুনরায় পোস্ট করছি যাতে এটি যে সমস্ত প্রতিক্রিয়া পড়ে না তাদের দ্বারা এটি হারাতে না পারে ...

ডেটাগ্রিপে সমস্যাটি হ'ল এটি আপনার মানিব্যাগের উপর একটি খপ্পর রাখে। এটি নিখরচায় নয়। Dbeaver.io এ ডিবিভারের সম্প্রদায় সংস্করণটি ব্যবহার করে দেখুন। এটি এসকিউএল প্রোগ্রামারস, ডিবিএ এবং বিশ্লেষকদের জন্য একটি ফসএস মাল্টি-প্ল্যাটফর্ম ডাটাবেস সরঞ্জাম যা সমস্ত জনপ্রিয় ডাটাবেসগুলিকে সমর্থন করে: মাইএসকিউএল, পোস্টগ্রিসকিউএল, এসকিউএলাইট, ওরাকল, ডিবি 2, এসকিউএল সার্ভার, সিবাস, এমএস অ্যাকসেস, টেরাদাতা, ফায়ারবার্ড, হাইভ, প্রেস্টো ইত্যাদি supports

ডিবিভার সম্প্রদায় সংস্করণটি একটি ডাটাবেসের সাথে সংযোগ স্থাপন, ডেটা পুনরুদ্ধার করতে কোয়েরি প্রদান এবং তারপরে সিএসভি, জেএসএন, এসকিউএল বা অন্যান্য সাধারণ ডেটা ফর্ম্যাটে সংরক্ষণের জন্য ফলাফল সেটটি ডাউনলোড করা তুচ্ছ করে তোলে। এটি পোস্টগ্রিসের জন্য টড, এসকিউএল সার্ভারের জন্য টয়ড, বা ওরাকলের জন্য টডের একটি কার্যকর টানা FOSS প্রতিযোগী।

ডিবিভারের সাথে আমার কোনও সম্পর্ক নেই। আমি দাম এবং কার্যকারিতা পছন্দ করি, তবে আমি আশা করি তারা ডিবিভার / এক্সলিপস অ্যাপ্লিকেশনটি আরও খুলবে এবং ব্যবহারকারীদের বার্ষিক সাবস্ক্রিপশনের জন্য সরাসরি গ্রাফ এবং চার্ট তৈরি করার জন্য অর্থ প্রদানের পরিবর্তে ডিবিভার / অ্যাকলিপসে বিশ্লেষণের উইজেটগুলি যুক্ত করা সহজ করে তুলবে আবেদনপত্র. আমার জাভা কোডিং দক্ষতা মরিচা এবং আমি কীভাবে এক্লিপস উইজেটগুলি তৈরি করবেন তা শিখতে কয়েক সপ্তাহ লাগার মতো মনে হয় না, কেবল ডিবিভারটি ডিবিভার কমিউনিটি সংস্করণে তৃতীয় পক্ষের উইজেট যুক্ত করার ক্ষমতা অক্ষম করে দিয়েছে।

ডিবিভারের সম্প্রদায় সংস্করণে যুক্ত করতে বিশ্লেষণ উইজেট তৈরি করার পদক্ষেপগুলি সম্পর্কে কি ডিবিভার ব্যবহারকারীদের অন্তর্দৃষ্টি রয়েছে?


-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
দয়া করে আপনি উত্তরটি সম্পাদনা করেছেন তা ব্যাখ্যা করুন, কেবল উত্তরটি
এড়ান

3
এই কোড স্নিপেটের জন্য আপনাকে ধন্যবাদ, যা কিছু সীমিত স্বল্পমেয়াদী সহায়তা সরবরাহ করতে পারে। একটি সঠিক ব্যাখ্যা কেন এটি সমস্যার একটি ভাল সমাধান, তা দেখিয়ে তার দীর্ঘমেয়াদী মানকে ব্যাপকভাবে উন্নত করবে এবং ভবিষ্যতে পাঠকদের আরও অন্যান্য অনুরূপ প্রশ্নের সাথে আরও দরকারী করে তুলবে। আপনার অনুমানগুলি সহ কিছু ব্যাখ্যা যুক্ত করতে দয়া করে আপনার উত্তরটি সম্পাদনা করুন।
টবির স্পিড

2
এটি কোনও সিএসভি ফাইল নয়, একটি জেসন ফাইল তৈরি করবে।
নভেম্বরে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.