psql - 将命令结果保存到文件中

时间:2011-03-16 20:26:16

标签: postgresql psql

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

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

10 个答案:

答案 0 :(得分:381)

来自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

[wist@scifres ~]$ 

答案 1 :(得分:81)

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

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

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

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

使用';'创建CSV文件作为字段分隔符。

与往常一样,see the documentation for details

答案 2 :(得分:16)

\copy这是一个postgres命令可以适用于任何用户。不知道它是否适用于\ dt,但是通过以下链接复制了一般语法Postgres SQL copy syntax

\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;

答案 3 :(得分:10)

使用pgsql命令的o参数。

-o,--output = FILENAME将查询结果发送到文件(或管道)

psql -d DatabaseName -U UserName -c "SELECT * FROM TABLE" -o /root/Desktop/file.txt

答案 4 :(得分:2)

COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER; 此命令用于将整个表存储为csv

答案 5 :(得分:2)

如果您收到以下错误消息 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

答案 6 :(得分:1)

我假设存在一些内部psql命令,但您也可以从util-linux-ng包运行script命令:

  

说明        脚本会在终端上打印所有内容的打字稿。

答案 7 :(得分:1)

使用以下查询将结果存储在csv文件中

\复制(您的查询)到“文件路径” csv标头;

示例

\复制(从购买订单中选择名称,日期顺序)复制到“ /home/ankit/Desktop/result.csv”cvs标头中;

希望这对您有所帮助。

答案 8 :(得分:0)

此方法适用于从最简单到最复杂的任何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

答案 9 :(得分:0)

用于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