int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY ?
Вопрос возник потому что мне требуется сделать upsert и ориентуюсь я на то, что если id приходит меньше 1, то делать новую строку, иначе обновлять уже имеющийся.
В мускуле решалось всё просто тем, что id usigned int и я делал просто on duplicate key update, а тут не получается, создаётся новая строка с ид 0, а должна создаваться новая с инкрементным идентификатором.
А если новую строку не с 0 посылать, а с null? А старую как и положено с ID и тогда insert into ... on conflict on constraint ... do update...
if id <0 then insert into (sequence.nextval) ... else merge ... when matched then update when not matched then insert into (sequence.nextval) end if;
Это только в 15-м postgresql, если более старая версия то там, думаю придется в коде приложения делить на два запроса - вставку новых и обновление старых.
ну да, если нет "мерджа здорового человека", то так по простому
Обсуждают сегодня