#postgresql #psql #pgadmin
#postgresql #psql #pgadmin
Вопрос:
Пожалуйста, скажите, возможно ли сохранить какие-либо данные в файл при выполнении инструкции update?
Я выполняю эту функцию в postgres pgadmin / psql
do
$
declare
nr int;
status varchar(100);
begin
select count(*) into nr from film where title = 'Academy Dinosaur';
if nr = 1 then
update film
set length = 1000
where title = 'Academy Dinosaur';
status := 'Success';
end if;
end;$
и я хочу записать в файл (если обновление было выполнено успешно) что-то вроде этого:
Заголовок = заголовок, статус = Успех (в случае успеха), но я не знаю, как это сделать и как вернуть значение статуса в файл? Я не хочу копировать всю таблицу.
Комментарии:
1. Весь блок PL / pgSQL совершенно не нужен. Вы можете просто запустить ОБНОВЛЕНИЕ напрямую, что будет намного быстрее, поскольку не
select count(*)
выполняется бесполезно.2. @a_horse_with_no_name Я знаю, что это всего лишь пример, и я не знаю, как регистрировать информацию, когда этот блок был выполнен успешно. В моем реальном блоке я проверяю, найдена ли единственная строка. Если нет, я хочу записать информацию: Статус: файл не существует
Ответ №1:
do language plpgsql
$
brgin
update film
set length = 1000
where title = 'Academy Dinosaur';
if FOUND then
copy (select format('Title = %s, Status = %s', 'Academy Dinosaur', 'Success'))
to 'path-to-your-file';
enf if;
end;
$;
format
и замена текста существует только для случая, когда вы хотите использовать переменные. В противном случае просто (select 'Title = Academy Dinosaur, Status = Success')
Комментарии:
1. Один вопрос: я заполнил путь ‘C: Desktop’ и могу ли я иметь проблемы с запуском в терминале Windows? вот так: psql -h localhost -p 5432 -U user-d db -f C:Desktopscript.sql В этом файле у меня есть скрипт, в который я помещаю выходной файл, но я получил символ ошибки с последовательностью байтов 0xc5 0xbc в кодировке «UTF8» не имеет эквивалента в кодировке «WIN1252» Я ищу в Google, но все женичего не помогает
2. если я не смогу запустить его на сервере, где есть база Linux. Теперь у меня все еще проблема с копированием в Windows: ОШИБКА: синтаксическая ошибка в или рядом с copy (выберите ‘Title = aaaa, Status = wwwww’ Я пытаюсь это: copy (выберите ‘Title = aaaa, Status = success’) в ‘C:UsersDesktopoutput.csv ‘;
3. КОПИРОВАНИЕ файлов чтения и записи на сервере. ‘путь к вашему файлу’ должен быть локальным на сервере, как видно серверному процессу. Он не может ссылаться на местоположение на вашем терминале. И, кстати, скрипты plpgsql и команды psql — это не одно и то же.
4. Хорошо, завтра я попробую запустить этот скрипт на моем сервере postgres, который работает на Linux, я надеюсь, что это сработает 🙂 Сегодня я запускаю этот скрипт с помощью psql, потому что я создаю сервер postgres на Wndows, и я надеялся, что когда я так запущу psql -h localhost -p 5432 -U user-d db -f C:Desktopscript.sql в терминале Windows это будет работать.
5. Я знаю, что существует copy для запуска в psql в Windows, и это работает, но copy, например, использует всю таблицу, и я хочу, чтобы конкретная информация была записана в файл.