我试图通过命令行导出一个带有标题的PostgreSQL表到CSV文件,但是我把它导出到CSV文件,但没有标题。
我的代码如下:
COPY products_273 to '/tmp/products_199.csv' delimiters',';
我试图通过命令行导出一个带有标题的PostgreSQL表到CSV文件,但是我把它导出到CSV文件,但没有标题。
我的代码如下:
COPY products_273 to '/tmp/products_199.csv' delimiters',';
当前回答
我之所以发布这个答案,是因为这里给出的其他答案都不适合我。我不能从Postgres内部使用COPY,因为我没有正确的权限。所以我选择“Export grid rows”并将输出保存为UTF-8。
由于不同的原因,@Brian给出的psql版本也不适合我。它不起作用的原因显然是Windows命令提示符(我使用的是Windows)自己干扰了编码。我一直得到这个错误:
错误:字节序列为0x81的字符在编码“WIN1252”时没有对应的编码“UTF8”
我最终使用的解决方案是编写一个简短的JDBC脚本(Java),读取CSV文件并直接向Postgres表发出插入语句。这是可行的,但是如果没有改变编码,命令提示符也可以工作。
其他回答
复制(anyql查询datawanttoexport)到' fileablsoutepathwiname '分隔符',' CSV头;
使用这个u也可以导出数据。
对于我使用的9.5版本,它是这样的:
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT 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
除了表名之外,还可以编写查询来只获取选定的列数据。
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内部使用COPY,因为我没有正确的权限。所以我选择“Export grid rows”并将输出保存为UTF-8。
由于不同的原因,@Brian给出的psql版本也不适合我。它不起作用的原因显然是Windows命令提示符(我使用的是Windows)自己干扰了编码。我一直得到这个错误:
错误:字节序列为0x81的字符在编码“WIN1252”时没有对应的编码“UTF8”
我最终使用的解决方案是编写一个简短的JDBC脚本(Java),读取CSV文件并直接向Postgres表发出插入语句。这是可行的,但是如果没有改变编码,命令提示符也可以工作。