我使用psql的\dt列出数据库中的所有表,我需要保存结果。
将psql命令的结果导出到文件的语法是什么?
我使用psql的\dt列出数据库中的所有表,我需要保存结果。
将psql命令的结果导出到文件的语法是什么?
当前回答
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文件。
与往常一样,详细信息请参阅文档
其他回答
这种方法适用于从最简单到最复杂的任何psql命令,而不需要对原始命令进行任何更改或调整。
注意:适用于Linux服务器。
将命令的内容保存到一个文件中
模型
read -r -d '' FILE_CONTENT << 'HEREDOC'
[COMMAND_CONTENT]
HEREDOC
echo -n "$FILE_CONTENT" > sqlcmd
例子
read -r -d '' FILE_CONTENT << 'HEREDOC'
DO $f$
declare
curid INT := 0;
vdata BYTEA;
badid VARCHAR;
loc VARCHAR;
begin
FOR badid IN SELECT some_field FROM public.some_base LOOP
begin
select 'ctid - '||ctid||'pagenumber - '||(ctid::text::point) [0]::bigint
into loc
from public.some_base where some_field = badid;
SELECT file||' '
INTO vdata
FROM public.some_base where some_field = badid;
exception
when others then
raise notice 'Block/PageNumber - % ',loc;
raise notice 'Corrupted id - % ', badid;
--return;
end;
end loop;
end;
$f$;
HEREDOC
echo -n "$FILE_CONTENT" > sqlcmd
执行命令
模型
sudo -u postgres psql [some_db] -c “$(cat sqlcmd)” >>sqlop 2>&1
例子
sudo -u postgres psql some_db -c “$(cat sqlcmd)” >>sqlop 2>&1
查看/跟踪您的命令输出
猫 SQLOP
完成了!谢谢!= D
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文件。
与往常一样,详细信息请参阅文档
从psql的帮助(\?):
\o [FILE]将所有查询结果发送到文件或|管道
命令序列如下所示:
[wist@scifres ~]$ psql db
Welcome to psql 8.3.6, the PostgreSQL interactive terminal
db=>\o out.txt
db=>\dt
然后任何db操作输出都将被写入out.txt。 输入'\o'将输出恢复到控制台。
db=>\o
使用下面的查询将结果存储在CSV文件中
\copy (your query) to 'file path' csv header;
例子
\copy (select name,date_order from purchase_order) to '/home/ankit/Desktop/result.csv' cvs header;
希望这对你有所帮助。
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