我正在尝试通过命令行将带有标题的PostgreSQL表导出到CSV文件,但是我将其导出到CSV文件,但是没有标题。
我的代码如下:
COPY products_273 to '/tmp/products_199.csv' delimiters',';
我正在尝试通过命令行将带有标题的PostgreSQL表导出到CSV文件,但是我将其导出到CSV文件,但是没有标题。
我的代码如下:
COPY products_273 to '/tmp/products_199.csv' delimiters',';
Answers:
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
如手册所述。
COPY
需要管理员权限。\COPY
如果遇到问题,请改用。
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
从psql命令行:
\COPY my_table TO 'filename' CSV HEADER
最后没有分号。
COPY
命令需要管理员访问权限
psql
方法,可以将输出保存在任何人可以访问的地方。我只是使用该psql
方法将数据从远程服务器获取到本地文件中。非常光滑
pg_dump -h remote | pg_restore -h localhost
。
psql -c "\COPY (SELECT * FROM mytable) TO STDOUT" > mytable.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;
\COPY ...
)的psql版本中需要终止分号。至少在我的psql版本(9.5.2)中,我不需要指定'DELIMITER';默认为逗号。
对于9.5版,我将使用以下格式:
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
这是我如何使用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'作为分隔符,所以我使用〜因为它是很少使用的characeter。
我发布此答案是因为此处给出的其他答案均对我没有实际作用。我无法COPY
在Postgres中使用,因为我没有正确的权限。因此,我选择“导出网格行”并将输出保存为UTF-8。
psql
@Brian给出的版本也对我不起作用,原因有所不同。它不起作用的原因是,显然Windows命令提示符(我正在使用Windows)独自干预了编码。我不断收到此错误:
错误:编码为“ WIN1252”的字节序列为0x81的字符与编码为“ UTF8”的等效字符
我最终使用的解决方案是编写一个简短的JDBC脚本(Java),该脚本读取CSV文件并直接将插入语句发布到我的Postgres表中。这可以工作,但是如果不更改编码,命令提示符也可以工作。
尝试以下操作:“从'\ tmp \ products_199.csv'DELIMITER','CSV HEADER复制COPY products_273”