plpgsql,如何将变量存储到文件中

时间:2015-07-19 19:24:04

标签: windows postgresql cmd plpgsql

我想创建一个包含来自不同表的数据的自定义变量(字符串)。 我无法在一个查询中执行此操作(特殊订单存储和动态列)。

有没有办法将变量存储到文件中?

或使用命令行将一个变量的结果保存到文件中?

2 个答案:

答案 0 :(得分:3)

由于标记plpgsql,我假设你在plpgsql函数中执行一些查询,并且保存在变量中的结果应该发送到文件。

在纯SQL中,您可以使用copy命令将文本保存在文件中,如下所示:

copy (select 'some text') to 'c:\data\sample.txt';

在plpgsql函数中,您应该使用execute命令来选择变量的值,例如:

create or replace function copy_some_text_to_file(filename text)
returns void language plpgsql
as $$
declare
    var text:= 'some text';
begin
    execute format($fmt$
        copy (select '%s') to '%s'
        $fmt$, var, filename);
end $$;

select copy_some_text_to_file('c:\data\sample.txt')

如果要保存为使用多行字符串提交变量,可以使用regexp_split_to_table()

create or replace function copy_some_text_to_file(filename text)
returns void language plpgsql
as $$
declare
    var text:= 'first line\nsecond line\nthird line';
begin
    execute format($fmt$
        copy (select regexp_split_to_table(e'%s', e'\n')) to '%s'
        $fmt$, var, filename);
end $$;

请注意,该字符串不能包含单个引号,必须正确转义。在第一个版本中,您可以将'%s'替换为%L(如Erwin建议的那样),但在第二个版本中则无法执行此操作。

了解更多:

答案 1 :(得分:1)

从Linux shell执行SQL,您可以轻松地将结果重定向到文件:

postgres@db:~$ psql mydb --tuples-only -c 'select 1' > /path/to/myfile.txt

或者为文件执行SQL:

postgres@db:~$ psql mydb -t -f /path/to/myscript.sql > /path/to/myfile.txt

或者来自psql:

\o /path/to/myfile.txt
\t
SELECT 1;
\o

所有内容都在the manual for psql中解释。