从PostgreSQL数据库保存PL/pgSQL输出到CSV文件的最简单的方法是什么?
我使用PostgreSQL 8.4 pgAdmin III和PSQL插件,我从那里运行查询。
从PostgreSQL数据库保存PL/pgSQL输出到CSV文件的最简单的方法是什么?
我使用PostgreSQL 8.4 pgAdmin III和PSQL插件,我从那里运行查询。
当前回答
我正在使用AWS红移,它不支持COPY TO功能。
我的BI工具支持标签分隔的csv,所以我使用了以下方法:
psql -h dblocation -p port -U user -d dbname -F $'\t' --no-align -c "SELECT * FROM TABLE" > outfile.csv
其他回答
有几种解决方案:
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,但这是不可编写脚本的。
在pgAdmin III中,有一个从查询窗口导出到文件的选项。在主菜单中,它是Query -> Execute to file或者有一个按钮做同样的事情(它是一个带有蓝色软盘的绿色三角形,而不是仅仅运行查询的普通绿色三角形)。如果您没有从查询窗口运行查询,那么我将按照IMSoP的建议使用复制命令。
PSQL可以帮你做到这一点:
edd@ron:~$ psql -d beancounter -t -A -F"," \
-c "select date, symbol, day_close " \
"from stockprices where symbol like 'I%' " \
"and date >= '2009-10-02'"
2009-10-02,IBM,119.02
2009-10-02,IEF,92.77
2009-10-02,IEV,37.05
2009-10-02,IJH,66.18
2009-10-02,IJR,50.33
2009-10-02,ILF,42.24
2009-10-02,INTC,18.97
2009-10-02,IP,21.39
edd@ron:~$
有关此处使用的选项的帮助,请参阅man psql。
我不得不使用\COPY,因为我收到了错误消息:
ERROR: could not open file "/filepath/places.csv" for writing: Permission denied
所以我用了:
\Copy (Select address, zip From manjadata) To '/filepath/places.csv' With CSV;
它在运作
如果你有更长的查询,你喜欢使用psql,然后把你的查询到一个文件,并使用以下命令:
psql -d my_db_name -t -A -F";" -f input-file.sql -o output-file.csv