@estry

Как правильно составить запрос INSERT в postgresql?

Запрос предполагает обновление данных в таблице в случае если возник конфликт по определенному столбцу.
В случае возникновения конфликта необходимо получать дату, прибавлять к ней 30 дней и обновлять строку.
Пытаюсь выполнить такой запрос:
INSERT INTO info (id_user, firstname, lastname, date_payment)
VALUES (123, 'Alex', 'Ivanov', '2022-07-24, 12:05:13') ON CONFLICT (id_user) DO UPDATE SET payment_date = timestamp (SELECT payment_date FROM info WHERE id_user = 123) + interval '23 hours';


Получаю ошибку на вложенной запросе - вот тут SELECT payment_date FROM info WHERE id_user = 123.

Пробовал вложенный запрос поместить в кавычки. Результат тот же. Если вместо вложенного запроса прописать дату в кавычках, тогда все срабатывает. Но как видно такой вариант не подходит.

Что упускаю?
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
... DO UPDATE SET payment_date = info.payment_date + interval '23 hours';

Данные конфликтующей строки доступны
The SET and WHERE clauses in ON CONFLICT DO UPDATE have access to the existing row using the table's name (or an alias), and to rows proposed for insertion using the special excluded table.

имени таблицы (или алиаса указанного в запросе) - та версия строки что есть
псевдоним excluded - те значения что этот insert предполагал записать
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы