Postgresql এ শিরোনাম সহ সিএসভি হিসাবে সারণী রফতানি করবেন কীভাবে?


418

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

আমার কোডটি নিম্নরূপ দেখায়:

COPY products_273 to '/tmp/products_199.csv' delimiters',';

আপনি কি কোনও পোস্টগ্রেস> = 8.1 ব্যবহার করছেন?
দানা দ্য সনে

1
আমি মনে করি আমি আরও নতুন সংস্করণে আপগ্রেড করার পরিকল্পনা করব, জীবনকে এত সহজ করে
তুলব

উত্তর:


594
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);

ম্যানুয়াল বর্ণিত হিসাবে ।


7
সচেতন থাকুন যে হেডার যুক্তিটি 8.1.30 অবধি চালু করা হয়নি।
দানা দ্য সনে

7
কোনটি, যাক, কিছু মরিচা।
মাইলেন এ রাদেব

65
নোটের COPYপ্রশাসকের অধিকার প্রয়োজন। \COPYআপনি যদি সমস্যাগুলির মধ্যে চলে যান তবে পরিবর্তে ব্যবহার করুন ।
fny

5
এটি আপনাকে "DELIMITER ','" এর চেয়ে "ফরমেট সিএসভি" ব্যবহার করা ভাল, অ-সঙ্গতিপূর্ণ আউটপুট দিতে পারে। নিশ্চিত না যে কোন সংস্করণটি এসেছিল
গ্রাহাম্রহে

37
V9.5 জন্য কমান্ড এখনCOPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
Shubham গয়াল

223

পিএসকিএল কমান্ড লাইন থেকে:

\COPY my_table TO 'filename' CSV HEADER

শেষে কোনও আধা-কোলন নেই।


22
COPYআদেশটি অ্যাডমিন অ্যাক্সেসের প্রয়োজন হিসাবে এই সংস্করণটি এখন পর্যন্ত সেরা
ম্যাথু ও'রর্ডান

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

আরও ভাল, বিশেষত কোনও ডিরেক্টরি যেখানে আপনার অ্যাক্সেস রয়েছে সেভ করার সময় কিন্তু পোস্টগ্রিজ ব্যবহারকারী তা করেন না।
স্টিভ বেনেট

2
@ আরিলওয়ান ইউজ করুন pg_dump -h remote | pg_restore -h localhost
ইয়ান গা

4
@ আরিলওয়ান psql -c "\COPY (SELECT * FROM mytable) TO STDOUT" > mytable.csv
জুহা পালোমকি

122

কেবল টেবিলের নামের পরিবর্তে, আপনি কেবলমাত্র নির্বাচিত কলামের ডেটা পাওয়ার জন্য কোয়েরি লিখতে পারেন।

COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;

অ্যাডমিন সুবিধা সহ

\COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;

আমি বিশ্বাস করি না আপনার কমান্ডের ( \COPY ...) কমান্ডের পিএসকিএল সংস্করণে সমাপ্তি সেমিকোলন প্রয়োজন । এবং কমপক্ষে আমার পিএসকিএল সংস্করণে (9.5.2) আমাকে 'DELIMITER' নির্দিষ্ট করার দরকার নেই; ডিফল্ট একটি কমা ছিল।
ব্যবহারকারী 1071847

নির্বাচিত ক্ষেত্রগুলির জন্য আমি সিএসভি থেকে টেবিলের অনুলিপি করতে চাইলে সিনট্যাক্সটি কীভাবে পরিবর্তন হয়
ব্যবহারকারী 269867

99

যখন পোস্টগ্র্রেস থেকে আমার কাছে কোনও ফাইল লেখার অনুমতি নেই তখন আমি দেখতে পাই যে আমি কমান্ড লাইন থেকে কোয়েরি চালাতে পারি।

psql -U user -d db_name -c "Copy (Select * From foo_table LIMIT 10) To STDOUT With CSV HEADER DELIMITER ',';" > foo_data.csv

7
"যে কোনও পরিবেশ" এর জন্য সেরা। সেরা জন্য 1. পোস্টগ্র্যাস্কিল বা ক্লায়েন্টে বিশেষ অনুমতি প্রয়োজন নেই; 2. আপেক্ষিক পথ ব্যবহার করতে পারেন; এবং 3. বাস্তব সিএসভি ফর্ম্যাট (সুরক্ষিত উদ্ধৃতি) জন্য নিরাপদ।
পিটার ক্রাউস

34

এইটা কাজ করে

psql dbname -F , --no-align -c "SELECT * FROM TABLE"

10
খুশী হলাম। মনে রাখবেন যে এটি এমন ক্ষেত্রগুলির মধ্যে কমাগুলি থেকে রেহাই পাবে না।
পুনরাবৃত্তিমূলক

আমি এটি পছন্দ করি, ছাড়া এবং পৃথককারী হিসাবে -F ,ব্যবহার করি |। ধন্যবাদ!
dsummersl

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

7
বিপজ্জনক এটি CSV ফর্ম্যাটের জন্য নয়, অ্যারে বা "," সহ পাঠ্যের জন্য কাজ করে না .. সঠিক সিএসভি-উদ্ধৃতি করবেন না। @ ব্রায়ানের উত্তর ব্যবহার করুন।
পিটার ক্রাউস

8

9.5 সংস্করণটি আমি ব্যবহার করি, এটি এর মতো হবে:

COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);

7

এই সমাধানটি ব্যবহার করে আমার পক্ষে কাজ করেছিল \copy

psql -h <host> -U <user> -d <dbname> -c "\copy <table_name> FROM '<path to csvfile/file.csv>' with (format csv,header true, delimiter ',');"

4

সবচেয়ে সহজ উপায় (ব্যবহার করা psql) --csvপতাকা ব্যবহার করে বলে মনে হচ্ছে :

psql --csv -c "SELECT * FROM products_273" > '/tmp/products_199.csv'

এটি কেবল পোস্টগ্রিসকিউএল সংস্করণ 12+ এ কাজ করে
ডার্ক

3

হেরস আমি কীভাবে এটি হিরোকু পিজি ডাটাবেসে pgsl সংযোগ ব্যবহার করে পাওয়ার শেল ব্যবহার করে কাজ করেছি:

আমাকে প্রথমে ক্লায়েন্টের এনকোডিংটি এইভাবে utf8 এ পরিবর্তন করতে হয়েছিল: \encoding UTF8

তারপরে এটি কোনও CSV ফাইলে ডেটা ফেলে দিয়েছে:

\copy (SELECT * FROM my_table) TO  C://wamp64/www/spider/chebi2/dump.csv CSV DELIMITER '~'

আমি সিএসভি ফাইল পছন্দ করি না বলে আমি ডিলিমিটার হিসাবে ব্যবহার করি, আমি সাধারণত টিএসভি ফাইল ব্যবহার করি তবে এটি আমাকে ডিলিমিটার হিসাবে '\ t' যুক্ত করতে দেয় না, তাই আমি ব্যবহার করেছি ~ কারণ এটি খুব কমই ব্যবহৃত চেরেসেটার।


0

অনুলিপি (anysql ক্যোয়ারী ডেটাওয়ান্টোএক্সপোর্ট) 'ফাইলব্লসউটিপাথভিহনেম' ডিলিমিটার ',' সিএসভি শিরোলেখ;

এটি ব্যবহার করে আপনি ডেটাও রফতানি করতে পারেন।


0

আমি এই উত্তরটি পোস্ট করছি কারণ এখানে প্রদত্ত অন্য উত্তরগুলির মধ্যে কোনওটিই আসলে আমার পক্ষে কাজ করেনি। আমি ব্যবহার করতে পারি নাCOPYপোস্টগ্রিসের মধ্যে থেকে , কারণ আমার কাছে সঠিক অনুমতি নেই। সুতরাং আমি "রফতানি গ্রিড সারি" বেছে নিয়ে আউটপুটটিকে ইউটিএফ -8 হিসাবে সংরক্ষণ করেছি।

psqlসংস্করণ @Brian কর্তৃক প্রদত্ত আমার জন্য কাজ না করে, একটি ভিন্ন কারণে। এটি কাজ না করার কারণটি হ'ল দৃশ্যত উইন্ডোজ কমান্ড প্রম্পটটি (আমি উইন্ডোজ ব্যবহার করছিলাম) নিজেই এনকোডিং সহ চারপাশে হস্তক্ষেপ করছিল। আমি এই ত্রুটি পেতে থাকি:

ত্রুটি: "WIN1252" এনকোডিংয়ে বাইট সিকোয়েন্স 0x81 সহ অক্ষরের "UTF8" এনকোডিংয়ের সমতুল্য নেই

আমি যে সমাধানটি ব্যবহার করে শেষ করেছি তা হ'ল একটি সংক্ষিপ্ত জেডিবিসি স্ক্রিপ্ট (জাভা) লিখুন যা সিএসভি ফাইল পড়ে এবং সরাসরি আমার পোস্টগ্রিস টেবিলের মধ্যে statementsোকানো বিবৃতি জারি করে। এটি কাজ করেছে, তবে এনকোডিংটি পরিবর্তন না করা হলে কমান্ড প্রম্পটও কাজ করবে al


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