从PostgreSQL数据库保存PL/pgSQL输出到CSV文件的最简单的方法是什么?

我使用PostgreSQL 8.4 pgAdmin III和PSQL插件,我从那里运行查询。


当前回答

下载列名为HEADER的CSV文件使用以下命令:

Copy (Select * From tableName) To '/tmp/fileName.csv' With CSV HEADER;

其他回答

在pgAdmin III中,有一个从查询窗口导出到文件的选项。在主菜单中,它是Query -> Execute to file或者有一个按钮做同样的事情(它是一个带有蓝色软盘的绿色三角形,而不是仅仅运行查询的普通绿色三角形)。如果您没有从查询窗口运行查询,那么我将按照IMSoP的建议使用复制命令。

在终端(当连接到db时)将输出设置为cvs文件

1)设置字段分隔符为',':

\f ','

2)设置输出格式不对齐:

\a

3)只显示元组:

\t

4)设定输出:

\o '/tmp/yourOutputFile.csv'

5)执行查询:

:select * from YOUR_TABLE

6)输出:

\o

然后,您将能够在这个位置找到您的csv文件:

cd /tmp

使用scp命令复制或使用nano编辑:

nano /tmp/yourOutputFile.csv

我正在使用AWS红移,它不支持COPY TO功能。

我的BI工具支持标签分隔的csv,所以我使用了以下方法:

 psql -h dblocation -p port -U user -d dbname -F $'\t' --no-align -c "SELECT * FROM TABLE" > outfile.csv

如果您对特定表的所有列以及标题感兴趣,则可以使用

COPY table TO '/some_destdir/mycsv.csv' WITH CSV HEADER;

这稍微简单一点

COPY (SELECT * FROM table) TO '/some_destdir/mycsv.csv' WITH CSV HEADER;

据我所知,两者是等价的。

有几种解决方案:

1 PSQL命令

psql -d dbname -t -A -F"," -c "select * from users" > output.csv

这有一个很大的优势,您可以通过SSH使用它,如SSH postgres@host命令-使您能够获得

2 postgres copy命令

拷贝(SELECT * from users)到'/tmp/output.csv'

PSQL交互(或不交互)

>psql dbname
psql>\f ','
psql>\a
psql>\o '/tmp/output.csv'
psql>SELECT * from users;
psql>\q

它们都可以在脚本中使用,但我更喜欢第1种。

4 pgadmin,但这是不可编写脚本的。