簡體   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