Сохранение данных в файл txt или csv из postgres

#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, например, использует всю таблицу, и я хочу, чтобы конкретная информация была записана в файл.