سؤال

أحاول تصدير جدول postgresql مع عناوين ملف CSV عبر سطر الأوامر، ومع ذلك أحصل عليه للتصدير إلى ملف CSV، ولكن بدون عناوين.

يبدو رمزي على النحو التالي:

COPY products_273 to '/tmp/products_199.csv' delimiters',';
هل كانت مفيدة؟

المحلول

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

كما هو موضح في كتيب.

نصائح أخرى

من سطر الأوامر PSQL:

\COPY my_table TO 'filename' CSV HEADER

لا نصف القولون في النهاية.

بدلا من اسم جدول فقط، يمكنك أيضا كتابة استعلام للحصول على بيانات العمود المحددة فقط.

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;

عندما لا يكون لدي إذن بكتابة ملف من Postgres، أجد أنه يمكنني تشغيل الاستعلام من سطر الأوامر.

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

هذا يعمل

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

لاستخدام الإصدار 9.5، سيكون مثل هذا:

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

هذا الحل يعمل بالنسبة لي باستخدام \copy.

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

هيريس كيف حصلت عليه شل السلطة العاملة باستخدام pgsl connnect إلى قاعدة بيانات heroku pg:

اضطررت إلى تغيير ترميز العميل أولا إلى UTF8 مثل هذا: \encoding UTF8

ثم ألقت البيانات إلى ملف CSV هذا:

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

لقد استخدمت ~ كمسؤول لأنني لا أحب ملفات CSV، وأستطيع عادة استخدام ملفات TSV، لكنها لن تسمح لي بإضافة " t" كمسؤول، لذلك اعتدت ~ لأنها نادرا ما تستخدم characeter.

نسخ (anysql query datawanttoexport) إلى "fileablsoutePathwihname" محدد "، رأس CSV؛

باستخدام هذا يمكنك تصدير البيانات أيضا.

أنا نشر هذه الإجابة لأن أي من الإجابات الأخرى المقدمة هنا عملت بالفعل بالنسبة لي. لم أستطع استخدام COPY من داخل الخوارز، لأنني لم يكن لدي الأذونات الصحيحة. لذا اخترت "صادرات صادرات الشبكة" وحفظت الإخراج كما UTF-8.

ال psql الإصدار الذي تعطى ببيان لم يعمل بالنسبة لي أيضا، لسبب مختلف. السبب في أنه لم ينجح هو أنه على ما يبدو موجه أوامر Windows (كنت أستخدم Windows) تدخل مع الترميز الخاص به. ظللت الحصول على هذا الخطأ:

خطأ: حرف مع تسلسل البايت 0x81 في ترميز "Win1252" لا يحتوي على ما يعادلها في ترميز "UTF8"

كان الحل الذي انتهى بي باستخدامه هو كتابة برنامج نصي JDBC قصير (Java) الذي قرأت ملف CSV وإدراج عبارات إدراج مباشرة في جدول Postgres الخاص بي. هذا عملت، لكن موجه الأوامر كان قد عملت أيضا أنه لم يغير الترميز.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top