将PostgreSQL表导出为带有标题的CSV文件

时间:2009-07-13 15:19:35

标签: postgresql postgresql-copy

我正在尝试通过命令行将带有标题的PostgreSQL表导出到CSV文件,但我将其导出为CSV文件但没有标题。我也需要那些标题。我的代码如下所示

COPY products_273 to '/tmp/products_199.csv' delimiters',';

13 个答案:

答案 0 :(得分:556)

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

manual

中所述

答案 1 :(得分:198)

从psql命令行:

\COPY my_table TO 'filename' CSV HEADER

最后没有分号。

答案 2 :(得分:105)

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

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;

答案 3 :(得分:87)

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

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

答案 4 :(得分:32)

这有效

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

答案 5 :(得分:8)

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

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

答案 6 :(得分:5)

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

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

答案 7 :(得分:3)

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

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

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

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

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

答案 8 :(得分:0)

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

使用此功能,您也可以导出数据。

答案 9 :(得分:0)

我之所以发布此答案,是因为这里给出的其他答案均对我没有实际作用。我无法在Postgres中使用COPY,因为我没有正确的权限。因此,我选择“导出网格行”并将输出保存为UTF-8。

@Brian给出的psql版本对我也不起作用,原因是不同的。它不起作用的原因是,显然Windows命令提示符(我正在使用Windows)独自干预了编码。我一直收到此错误:

  

错误:编码为“ WIN1252”的字节序列为0x81的字符与编码为“ UTF8”的等效字符

我最终使用的解决方案是编写一个简短的JDBC脚本(Java),该脚本读取CSV文件并直接将插入语句发布到我的Postgres表中。这行得通,但是如果不更改编码,命令提示符也将行得通。

答案 10 :(得分:0)

最简单的方法(使用psql)似乎是使用--csv标志:

psql --csv -c "SELECT * FROM products_273" > '/tmp/products_199.csv'

答案 11 :(得分:0)

尝试一下: “从'\ tmp \ products_199.csv'DELIMITER','CSV HEADER复制COPY products_273”

答案 12 :(得分:0)

COPY 命令不受限制。受到限制的是将 TO 的输出定向到除 STDOUT 之外的任何位置。但是,通过 \ o 命令指定输出文件没有限制。

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