Answers:
从psql的帮助(\?
):
\ o [FILE]将所有查询结果发送到文件或管道
命令序列如下所示:
[wist@scifres ~]$ psql db
Welcome to psql 8.3.6, the PostgreSQL interactive terminal
db=>\o out.txt
db=>\dt
db=>\q
\o
再次键入将其关闭。
\?
不会转到文件中。:(
\o queries-output.txt
将所有后续命令o / p重定向到名为file的文件,queries-output.txt
然后键入\o
(再次在psql提示符下)恢复此重定向行为。
\o
jhwist已经描述了psql 命令。
另一种方法是使用COPY TO
命令直接写入服务器上的文件。这样做的好处是,它以您选择的易于解析的格式进行转储-而不是psql的列表格式。使用导入到另一个表/数据库也非常容易COPY FROM
。
注意!这需要超级用户特权,并将写入服务器上的文件。
例: COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';')
用';'创建一个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;
如果出现以下错误
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
我假设为此存在一些内部psql命令,但是您也可以script
从util-linux-ng包中运行该命令:
描述脚本对终端上打印的所有内容进行打字。
从最简单到最复杂的任何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
cat sqlop
做完了!谢谢!= D
码头工人的方法
通过psql命令
docker exec -i %containerid% psql -U %user% -c '\dt' > tables.txt
或从sql文件查询
docker exec -i %containerid% psql -U %user% < file.sql > data.txt