我正在尝试通过命令行将一个带有表头的PostgreSQL表格导出到CSV文件,但是它只能导出CSV文件而没有表头。
我的代码如下:
我的代码如下:
COPY products_273 to '/tmp/products_199.csv' delimiters',';
COPY products_273 to '/tmp/products_199.csv' delimiters',';
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
如手册所述。
COPY
命令需要管理员权限。如果遇到问题,请使用 \COPY
命令代替。 - fnyCOPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
。 - Shubham Goyal使用 psql 命令行:
\COPY my_table TO 'filename' CSV HEADER
末尾没有分号。
psql
方法,可以将输出保存在任何有访问权限的地方。我刚刚使用了 psql
方法,将远程服务器上的数据获取到本地文件中。非常流畅。 - Ian Gowpg_dump -h remote | pg_restore -h localhost
。 - Ian Gowpsql -c "\COPY (SELECT * FROM mytable) TO STDOUT" > mytable.csv
- Juha Palomäki除了表名,您还可以编写查询以仅获取所选列的数据。
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';默认值是逗号。 - user1071847当我没有从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"
COPY
语句则创建一个可重复使用的文件。 - Romain Ggnumeric out.tsv
就可以工作了。 - hoffmanc最简单的方法(使用psql
)似乎是通过使用--csv
标志:
psql --csv -c "SELECT * FROM products_273" > '/tmp/products_199.csv'
>
后的任何路径下。 - Yan Fotopsql (PostgreSQL) 11.7 (Ubuntu 11.7-0ubuntu0.19.10.1)
没有 --csv
选项。 - hoffmanc\copy
命令。psql -h <host> -U <user> -d <dbname> -c "\copy <table_name> FROM '<path to csvfile/file.csv>' with (format csv,header true, delimiter ',');"
对于我使用的版本9.5,应该是这样的:
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
\encoding UTF8
然后,我将数据转储到 CSV 文件中,如下所示:\copy (SELECT * FROM my_table) TO C://wamp64/www/spider/chebi2/dump.csv CSV DELIMITER '~'
我使用~作为分隔符,因为我不喜欢CSV文件,通常我使用TSV文件,但是它不允许我将'\t'作为分隔符,因此我使用了~,因为它是一个很少使用的字符。
COPY命令并没有受到限制,受到限制的是将TO的输出指向除STDOUT之外的任何地方。但是,可以通过\o命令指定输出文件而没有限制。
\o '/tmp/products_199.csv';
COPY products_273 TO STDOUT WITH (FORMAT CSV, HEADER);