Я намагаюся експортувати таблицю PostgreSQL з заголовками у файл CSV за допомогою командного рядка, однак я отримую його для експорту в файл CSV, але без заголовків.
Мій код виглядає так:
COPY products_273 to '/tmp/products_199.csv' delimiters',';
Я намагаюся експортувати таблицю PostgreSQL з заголовками у файл CSV за допомогою командного рядка, однак я отримую його для експорту в файл CSV, але без заголовків.
Мій код виглядає так:
COPY products_273 to '/tmp/products_199.csv' delimiters',';
Відповіді:
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
як описано в посібнику .
COPY
вимагає прав адміністратора. Використовуйте \COPY
натомість, якщо у вас виникли проблеми.
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
З командного рядка psql:
\COPY my_table TO 'filename' CSV HEADER
жодної напівкрапки в кінці.
COPY
команда вимагає доступу адміністратора
psql
підходом можна зберегти вихід у будь-якому місці, до якого є доступ. Я просто використовував psql
підхід для отримання даних з віддаленого сервера в локальний файл. Дуже струнка.
pg_dump -h remote | pg_restore -h localhost
.
psql -c "\COPY (SELECT * FROM mytable) TO STDOUT" > mytable.csv
замість просто назви таблиці ви також можете написати запит на отримання лише вибраних даних стовпців.
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 ...
). І принаймні у моїй версії psql (9.5.2) мені не потрібно було вказувати "DELIMITER"; за замовчуванням була кома.
Коли я не маю дозволу виписувати файл із 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"
-F ,
і використовувати |
як роздільник. Дякую!
COPY
твердження, яке створює файл для повторного використання
Для версії 9.5, яку я використовую, було б так:
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
Ось як я отримав його робочу оболонку живлення, використовуючи підключення pgsl до бази даних 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
з Postgres, оскільки не мав правильних дозволів. Тому я вибрав "Експорт рядків сітки" і зберег вихід як UTF-8.
psql
Версія дається також @ Брайан не працював для мене, з іншої причини. Причина цього не спрацювала в тому, що, мабуть, командний рядок Windows (я використовував Windows) переплутався з кодуванням самостійно. Я продовжував отримувати цю помилку:
ПОМИЛКА: символ з послідовністю байтів 0x81 в кодуванні "WIN1252" не має еквівалента в кодуванні "UTF8"
Я вирішив використати те, щоб написати короткий сценарій JDBC (Java), який читав файл CSV і видав заяви вставляти безпосередньо в мою таблицю Postgres. Це спрацювало, але командний рядок також спрацював би, якби не змінював кодування.
Спробуйте це: "COPY products_273 FROM '\ tmp \ products_199.csv' DELIMITER ',' CSV HEADER"