458

我正在尝试通过命令行将带有标题的 PostgreSQL 表导出到 CSV 文件,但是我让它导出到 CSV 文件,但没有标题。

我的代码如下所示:

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

14 回答 14

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

手册中所述。

于 2009-07-13T16:04:08.800 回答
244

从 psql 命令行:

\COPY my_table TO 'filename' CSV HEADER

末尾没有分号。

于 2012-06-19T13:06:29.763 回答
130

您还可以编写查询以仅获取选定的列数据,而不仅仅是表名。

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;
于 2015-10-09T10:49:51.027 回答
118

当我无权从 Postgres 写出文件时,我发现我可以从命令行运行查询。

psql -U user -d db_name -c "Copy (Select * From foo_table LIMIT 10) To STDOUT With CSV HEADER DELIMITER ',';" > foo_data.csv
于 2016-12-01T17:32:00.617 回答
36

这有效

psql dbname -F , --no-align -c "SELECT * FROM TABLE"
于 2012-01-13T06:03:16.840 回答
10

对于我使用的 9.5 版本,它会是这样的:

COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
于 2017-04-09T19:06:23.587 回答
10

最简单的方法(使用psql)似乎是使用--csv标志:

psql --csv -c "SELECT * FROM products_273" > '/tmp/products_199.csv'
于 2019-10-24T15:38:47.917 回答
8

这个解决方案对我有用\copy

psql -h <host> -U <user> -d <dbname> -c "\copy <table_name> FROM '<path to csvfile/file.csv>' with (format csv,header true, delimiter ',');"
于 2018-06-04T15:43:46.200 回答
4

下面是我如何使用 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' 作为分隔符,所以我使用~因为它是一个很少使用的字符。

于 2016-11-26T19:31:29.993 回答
1

COPY命令不受限制。受到限制的是将输出从TO定向到除STDOUT之外的任何地方。但是,通过\o命令指定输出文件没有任何限制。

\o '/tmp/products_199.csv';
COPY products_273 TO STDOUT WITH (FORMAT CSV, HEADER);
于 2020-12-17T18:16:20.647 回答
0

复制(anysql 查询 datawanttoexport)到 'fileablsoutepathwihname' delimiter ',' csv header;

使用这个你也可以导出数据。

于 2016-05-10T06:44:46.750 回答
0

我发布这个答案是因为这里给出的其他答案都没有真正对我有用。我无法COPY在 Postgres 中使用,因为我没有正确的权限。所以我选择了“导出网格行”并将输出保存为 UTF-8。

@Brian 给出的psql版本也对我不起作用,原因不同。它不起作用的原因显然是 Windows 命令提示符(我使用的是 Windows)正在自行干预编码。我不断收到此错误:

错误:编码“WIN1252”中字节序列为 0x81 的字符在编码“UTF8”中没有等效项

我最终使用的解决方案是编写一个简短的 JDBC 脚本 (Java),它读取 CSV 文件并将插入语句直接发送到我的 Postgres 表中。这行得通,但如果它没有改变编码,命令提示符也可以工作。

于 2019-06-27T10:27:09.233 回答
0

试试这个:“复制 products_273 FROM '\tmp\products_199.csv'DELIMITER ',' CSV HEADER”

于 2019-12-30T07:31:24.093 回答
0

pgAdmin中,突出显示您的查询语句,就像您使用F5执行并按下时一样F9- 这将打开文件浏览器,以便您可以选择保存 CSV 的位置。

如果您使用的是 Azure Data Studio,请参阅此处的说明:Azure Data Studio:另存为 CSV

我知道这不是一个通用的解决方案,但大多数时候你只想手动抓取文件。

于 2022-02-03T15:15:33.970 回答