Создаем функцию:
create function UPDATE_OR_INSERT (query_update text,query_insert text) returns void as
$$
declare
begin
execute query_update;
if FOUND=false then
execute(query_insert);
end if;
end
$$ language plpgsql;
Пример:
SELECT UPDATE_OR_INSERT('UPDATE table SET val = '||x||' WHERE id = ‘||y||’::text', 'INSERT INTO table (id, val) VALUES ('||y||', '||x||')'::text)
… не проверял, но должно работать на Postgresql ≥ 10 и выше :)
INSERT INTO "numbers_rus" ("num", "status", "provider", "infoRegion", "inn")
VALUES ('79000102927', '1', 'ООО "Т2=Мобайл"', 'Тверская обл.', '7743895280')
ON CONFLICT (num) DO UPDATE SET
"status" = '1',
"provider" = 'ООО "Т2+Мобайл"',
"infoRegion" = 'Тверская обл.',
"inn" = '7743895280';