postgresql 导出CSV格式数据
方法一 psql -c 导出
导出的文件存放在执行psql的客户端。
psql -h 127.0.0.1 -p 5432 -U postgres postgres -Atqc "select oid,relname,relnamespace from tmp_t0 " --csv -o /tmp/test.csv
方法二 psql -f 导出
导出的文件存放在执行psql的客户端。
如果查询很长,可以新建个SQL文件
vi /tmp/test.sql
select oid,relname,relnamespace from tmp_t0
psql -h 127.0.0.1 -p 5432 -U postgres postgres -Atqf /tmp/test.sql --csv -o /tmp/test.csv
方法三 psql + copy
copy 命令是 postgresql 服务端命令,导出的文件存放在服务器端,而非执行psql的客户端。
psql -h 127.0.0.1 -p 5432 -U postgres postgres
postgres=# \h copy
命令: COPY
描述: 在档案和数据表间复制数据
语法:
COPY 表名 [ ( 列名称 [, ...] ) ]
FROM { '文件名' | PROGRAM '命令' | STDIN }
[ [ WITH ] ( 选项 [, ...] ) ]
[ WHERE 条件 ]
COPY { 表名 [ ( 列名称 [, ...] ) ] | ( 查询 ) }
TO { '文件名' | PROGRAM '命令' | STDOUT }
[ [ WITH ] ( 选项 [, ...] ) ]
选项可以是下列内容之一:
FORMAT 格式_名称
FREEZE [ 布尔 ]
DELIMITER '分隔字符'
NULL '空字符串'
HEADER [ 布尔 ]
QUOTE '引用字符'
ESCAPE '转义字符'
FORCE_QUOTE { ( 列名称 [, ...] ) | * }
FORCE_NOT_NULL ( 列名称 [, ...] )
FORCE_NULL ( 列名称 [, ...] )
ENCODING 'encoding_name(编码名)'
URL: https://www.postgresql.org/docs/14/sql-copy.html
postgres=# COPY (select oid,relname,relnamespace from tmp_t0 ) TO '/tmp/test.csv' WITH (DELIMITER ',' , FORMAT CSV);
方法四 psql + \copy
\copy 是 psql 客户端工具提供的命令,导出的文件存放在执行psql的客户端。
psql -h 127.0.0.1 -p 5432 -U postgres postgres
postgres=# \?
...
...
...
输入/输出
\copy ... 执行 SQL COPY,将数据流发送到客户端主机
...
...
...
postgres=# \COPY (select oid,relname,relnamespace from tmp_t0 ) TO '/tmp/test.csv' WITH (DELIMITER ',' , FORMAT CSV);
参考:
http://www.postgres.cn/docs/14/sql-copy.html
http://www.postgres.cn/docs/14/app-psql.html