我使用psql的\dt列出数据库中的所有表,我需要保存结果。

将psql命令的结果导出到文件的语法是什么?


当前回答

COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER;

该命令用于将整个表存储为CSV格式

其他回答

如果你得到以下错误

ufgtoolspg=> COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';');
ERROR:  must be superuser to COPY to or from a file
HINT:  Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.

你可以这样运行它:

psql somepsqllink_or_credentials -c "COPY (SELECT foo, bar FROM baz) TO STDOUT (format csv, delimiter ';')"  > baz.csv
COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER;

该命令用于将整个表存储为CSV格式

\copy是一个postgres命令,可以为任何用户工作。不知道它是否适用于\dt,但一般语法是从以下链接复制的Postgres SQL复制语法

\copy (select * from tempTable limit 100) to 'filenameinquotes' with header delimiter as ','

上述操作将选择查询的输出保存在csv文件提供的文件名中

编辑:

对于我的psql服务器,以下命令工作,这是一个旧版本v8.5

copy (select * from table1) to 'full_path_filename' csv header;

psql \o命令已经由jhwist描述。

另一种方法是使用COPY TO命令直接写入服务器上的文件。这样做的好处是,它被转储为您选择的易于解析的格式——而不是psql的表格格式。使用COPY FROM导入到另一个表/数据库也很容易。

NB !这需要超级用户或pg_write_server_files权限,并将写入服务器上的文件。

示例:COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';')

创建一个以';'作为字段分隔符的CSV文件。

与往常一样,详细信息请参阅文档

docker方法

通过PSQL命令

 docker exec -i %containerid% psql -U %user% -c '\dt' > tables.txt

或从SQL文件查询

docker exec -i %containerid% psql -U %user% < file.sql > data.txt