我想創建一個包含來自不同表的數據的自定義變量(字符串)。 我不能在一個查詢中執行它(特殊的存儲順序和動態列)。plpgsql,如何將變量存儲到文件中
有沒有辦法將變量存儲到文件中?
或者使用命令行將一個變量的結果保存到文件中?
我想創建一個包含來自不同表的數據的自定義變量(字符串)。 我不能在一個查詢中執行它(特殊的存儲順序和動態列)。plpgsql,如何將變量存儲到文件中
有沒有辦法將變量存儲到文件中?
或者使用命令行將一個變量的結果保存到文件中?
由於標籤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
(如Erwin建議的)替換'%s'
,但在第二個版本中不能這樣做。
瞭解更多:
它必須是格式('$ fmt $ copy(選擇%L)到%L $ fmt $,var,filename);'以正確地轉義文字。喜歡:http://stackoverflow.com/a/16991854/939860 –
謝謝,有沒有辦法使用腳本斷行?我已經試過E'',\ n –
從Linux執行SQL殼您可以輕鬆地將結果重定向到一個文件:
[email protected]:~$ psql mydb --tuples-only -c 'select 1' > /path/to/myfile.txt
或者EXEC對於文件UTE SQL:
[email protected]:~$ 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解釋。
您的意思是將查詢結果導出並存儲到文件中?請澄清。 – Spidey
Nimesh,編輯。 –
而「命令行」應該是shell?或者psql?那麼plpgsql如何進入呢?請澄清你的問題,顯示你的代碼(即使它不工作),並添加你的Postgres版本(一如既往)。 –