繁体   English   中英

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

[英]plpgsql, how to store variable into file

我想创建一个自定义变量(字符串),其中包含来自不同表的数据。 我无法在一个查询(存储的特殊顺序和动态列)中做到这一点。

有没有一种方法可以将变量存储到文件中?

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

由于存在标签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 $$;

请注意,字符串不能包含单引号,必须将其正确转义。 在第一个版本中,您可以用%L替换'%s' (如Erwin建议),而在第二个版本中,您不能这样做。

阅读更多:

从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

有关所有内容,请参见psql手册

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM