Из-за тега 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
(как предложил Эрвин), вы не можете сделать это во второй версии.
Подробнее:
Вы хотите экспортировать и сохранить результат запроса в файл? Просьба уточнить. – Spidey
Nimesh, Edited. –
И «командная строка» должна быть оболочкой? Или psql? И как plpgsql входит в это? Пожалуйста, уточните свой вопрос, покажите код, который у вас есть (даже если он не работает) и добавьте свою версию Postgres (как всегда). –