[英]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.