如何将表格导出为带有Postgresql标题的CSV?

How to export table as CSV with headings on Postgresql?

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

我的代码如下:

1
COPY products_273 TO '/tmp/products_199.csv' delimiters',';


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

如手册中所述。


从psql命令行:

1
\COPY my_table TO 'filename' CSV HEADER

最后没有分号。


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

1
COPY (SELECT id,name FROM tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;

具有管理员权限

1
\COPY (SELECT id,name FROM tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;


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

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


这有效

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


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

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


这个解决方案使用\copy为我工作。

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

以下是我如何使用pgsl连接到Heroku PG数据库的工作电源shell:

我必须先将客户端编码更改为utf8,如下所示:\encoding UTF8

然后将数据转储到CSV文件:

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

我使用?作为分隔符,因为我不喜欢CSV文件,我通常使用TSV文件,但它不会让我添加' t'作为分隔符,所以我使用?因为它是一个很少使用的characeter。


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

@Brian给出的psql版本对我来说也不起作用,原因不同。它不起作用的原因是显然Windows命令提示符(我使用的是Windows)自己干扰编码。我一直收到这个错误:

ERROR: character with byte sequence 0x81 in encoding"WIN1252" has no equivalent in encoding"UTF8"

我最终使用的解决方案是编写一个简短的JDBC脚本(Java),它读取CSV文件并将insert语句直接发布到我的Postgres表中。这有效,但如果没有改变编码,命令提示也会有效。


将(anysql query datawanttoexport)复制到'fileablsoutepathwihname'分隔符','csv header;

使用它你也可以导出数据。