How to export table as CSV with headings on Postgresql?
我正在尝试通过命令行将带有标题的PostgreSQL表导出到CSV文件,但我将其导出为CSV文件,但没有标题。
我的代码如下:
1
| COPY products_273 TO '/tmp/products_199.csv' delimiters','; |
-
你使用的是postgres> = 8.1吗?
-
PostgreSQL 7.3.4
-
我想我会制定一个升级到更新版本的计划,这将使生活变得更加轻松
-
另请参见stackoverflow.com/q/1517635/287948
1
| COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER); |
如手册中所述。
-
请注意,直到8.1才会引入HEADER参数。
-
也就是说,有点生疏了。
-
Thx为响应运行古代版本7 ;-(
-
虽然仍然支持7.4(v7.4.25是最新的),但我建议尽快升级到8.3。如果你还在使用7.4以上的东西,我不想在你的鞋子里。
-
不幸的是PostgreSQL 7.3.4是我目前使用的版本;-(
-
Windows格式的示例COPY products_273 TO'D:\ products_199.csv'DELIMITER','CSV HEADER;
-
注意COPY需要管理员权限。如果遇到问题,请使用\COPY。
-
这可以给你不符合要求的输出,更好地使用"FORMAT csv"而不是"DELIMITER','"。不知道到底是什么版本
-
是的,FORMAT csv为我工作。
-
对于v9.5,命令现在是COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
-
@faraz我收到此错误:"或"附近的语法错误
-
奇怪的是,对于pgcli,它对我有用的唯一方法是使用\COPY(小写!)
-
我在外部文件中有一个复杂的SELECT。有关COPY语法的任何建议吗?
-
错误:无法从物化视图中复制。提示:尝试COPY(SELECT ...)TO变体。
-
我没有意识到路径是指服务器上的路径。如果要从远程服务器复制数据,可以执行psql -c"COPY products_273 TO STDOUT WITH (FORMAT CSV, HEADER)"> /tmp/products_199.csv
-
大家好,我使用了这个,并使用COPY my_table TO '/tmp/environment.csv' WITH (FORMAT CSV, HEADER);复制数据库。这显示COPY 1123620 postgres=#但我不确定文件的位置。 $ls /tmp/ yum_save_tx.2019-05-24.16-58.rz76Yg.yumtx没有这样的文件
从psql命令行:
1
| \COPY my_table TO 'filename' CSV HEADER |
最后没有分号。
-
此版本是最好的,因为COPY命令需要管理员访问权限
-
此外,使用psql方法,可以将输出保存在可以访问的任何地方。我只是使用psql方法将数据从远程服务器获取到本地文件中。非常光滑。
-
好多了,特别是在保存到您有权访问的目录但postgres用户没有访问的目录时。
-
得到此错误:语法错误在"或"附近
-
我是否必须先创建csv文件或自动生成?
-
@ismail - 上面突出显示的命令是在输入psql命令行后运行,而不是从PgAdmin运行
-
copy和copy之间的区别在于,第一个通过客户端管理数据,第二个将数据保存到服务器。这意味着您可以使用 COPY将数据从远程数据库获取到本地计算机。
-
@IanGow我想做同样的操作,从远程复制到localhost,怎么做才能实现呢?
-
@ MatthewO'Riordan你能说明如何从远程复制到localhost吗?
-
@ JuhaPalomä ki请显示复制到localhost的命令。
-
@arilwan使用pg_dump -h remote | pg_restore -h localhost。
-
@arilwan psql -c"\COPY (SELECT * FROM mytable) TO STDOUT"> mytable.csv
而不仅仅是表名,您还可以编写查询以仅获取选定的列数据。
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; |
-
我不相信你需要在psql版本的命令(\COPY ...)中使用终止分号。至少在我的psql版本(9.5.2)中,我不需要指定'DELIMITER';默认值为逗号。
-
写它时显示Permission denied错误
-
如果我从CSV复制到所选字段的表格,语法如何更改
当我没有从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.在Postgresql或客户端不需要特殊权限; 2.可以使用相对路径; 3.对于真正的CSV格式(安全报价)是安全的。
这有效
1
| psql dbname -F , --no-align -c"SELECT * FROM TABLE" |
-
尼斯。请注意,这似乎不会在包含它们的字段内转义逗号。
-
我喜欢这个,没有-F ,,并使用|作为分隔符。谢谢!
-
这不是通常被认为是导出功能,只是受控数据显示。区别很轻但很重要:这比人们更容易阅读,而COPY语句创建了一个可以重用的文件
-
危险它不适用于CSV格式,不适用于带有","的数组或文本..不能进行适当的CSV引用。使用@Brian的答案。
对于我使用的版本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;
使用它你也可以导出数据。