从PostgreSQL数据库保存PL/pgSQL输出到CSV文件的最简单的方法是什么?
我使用PostgreSQL 8.4 pgAdmin III和PSQL插件,我从那里运行查询。
从PostgreSQL数据库保存PL/pgSQL输出到CSV文件的最简单的方法是什么?
我使用PostgreSQL 8.4 pgAdmin III和PSQL插件,我从那里运行查询。
当前回答
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。
其他回答
在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
下载列名为HEADER的CSV文件使用以下命令:
Copy (Select * From tableName) To '/tmp/fileName.csv' With CSV HEADER;
我正在使用AWS红移,它不支持COPY TO功能。
我的BI工具支持标签分隔的csv,所以我使用了以下方法:
psql -h dblocation -p port -U user -d dbname -F $'\t' --no-align -c "SELECT * FROM TABLE" > outfile.csv
我写了一个叫做psql2csv的小工具,它封装COPY查询TO STDOUT模式,生成合适的CSV。它的接口类似于psql。
psql2csv [OPTIONS] < QUERY
psql2csv [OPTIONS] QUERY
查询被假定为STDIN的内容(如果存在)或最后一个参数。所有其他参数都被转发到psql,除了以下参数:
-h, --help show help, then exit
--encoding=ENCODING use a different encoding than UTF8 (Excel likes LATIN1)
--no-header do not output a header