我试图通过命令行将一个带标题的PostgreSQL表导出到CSV文件,但是我得到的是导出到CSV文件,但没有标题。
我的代码如下。
COPY products_273 to '/tmp/products_199.csv' delimiters',';
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
如[手册]中所述(http://www.postgresql.org/docs/current/static/sql-copy.html)。
从psql命令行。
\COPY my_table TO 'filename' CSV HEADER
后面没有分号。
你也可以写一个查询,而不是只写表名,你也可以写一个查询,只获取选定的列数据。
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中写出一个文件时,我发现我可以在命令行中运行查询。
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"
对于我使用的9.5版本,应该是这样的。
我用copy解决了这个问题。
copy
psql -h -U -d -c "\copy FROM '<path to csvfile/file.csv>' with (format csv,header true, delimiter ',');"
Heres how I got it working power shell using pgsl connnect to a Heroku PG database:
我必须先把客户端编码改为utf8,像这样: /encoding UTF8
/encoding UTF8
然后把数据转储到一个CSV文件中,这样。
\copy (SELECT * FROM my_table) TO C://wamp64/www/spider/chebi2/dump.csv CSV DELIMITER '~'
我用 ~ 作为分隔符是因为我不喜欢 CSV 文件,我通常使用 TSV 文件,但它不会让我添加 't/39; 作为分隔符,所以我用了~,因为它是一个很少使用的字符。
复制(ansql查询datawanttoexport)到'fileablsoutepathwihname'。 delimiter ','。 csv头。
使用这个u也可以导出数据。
我把这个答案贴出来,因为这里给出的其他答案对我来说都不起作用。 我不能在Postgres中使用COPY,因为我没有正确的权限。 所以我选择了"导出网格行"。 并将输出保存为UTF-8。
COPY
@Brian给出的psql版本也没有为我工作,原因不同。 它不工作的原因是显然Windows命令提示符(我使用的是Windows)在自己的编码上做了手脚。 我一直得到这个错误。
psql
ERROR.字符的字节序列为0x81。 字符与字节序列0x81在编码"WIN1252"。 在编码"UTF8"中没有等价字符。
我最终使用的解决方案是写一个简短的JDBC脚本(Java),它读取CSV文件并直接向我的Postgres表发出插入语句。 这样就成功了,但如果不改变编码的话,命令提示符也能用。
最简单的方法(使用psql)似乎是使用--csv标志。
--csv
psql --csv -c "SELECT * FROM products_273" > '/tmp/products_199.csv'
如[手册]中所述(http://www.postgresql.org/docs/current/static/sql-copy.html)。
从psql命令行。
后面没有分号。
你也可以写一个查询,而不是只写表名,你也可以写一个查询,只获取选定的列数据。
有管理权限
当我没有权限从Postgres中写出一个文件时,我发现我可以在命令行中运行查询。
这个工作
对于我使用的9.5版本,应该是这样的。
我用
copy
解决了这个问题。Heres how I got it working power shell using pgsl connnect to a Heroku PG database:
我必须先把客户端编码改为utf8,像这样:
/encoding UTF8
然后把数据转储到一个CSV文件中,这样。
我用 ~ 作为分隔符是因为我不喜欢 CSV 文件,我通常使用 TSV 文件,但它不会让我添加 't/39; 作为分隔符,所以我用了~,因为它是一个很少使用的字符。
复制(ansql查询datawanttoexport)到'fileablsoutepathwihname'。 delimiter ','。 csv头。
使用这个u也可以导出数据。
我把这个答案贴出来,因为这里给出的其他答案对我来说都不起作用。 我不能在Postgres中使用
COPY
,因为我没有正确的权限。 所以我选择了"导出网格行"。 并将输出保存为UTF-8。@Brian给出的
psql
版本也没有为我工作,原因不同。 它不工作的原因是显然Windows命令提示符(我使用的是Windows)在自己的编码上做了手脚。 我一直得到这个错误。我最终使用的解决方案是写一个简短的JDBC脚本(Java),它读取CSV文件并直接向我的Postgres表发出插入语句。 这样就成功了,但如果不改变编码的话,命令提示符也能用。
最简单的方法(使用
psql
)似乎是使用--csv
标志。