Добрый день всем!
Что имеется?
есть условная таблица
CREATE TABLE public.company
(
id integer DEFAULT nextval('company_id_seq'::regclass) NOT NULL,
company_name varchar(125),
inn varchar(32),
kpp varchar(32),
"check" varchar(65) -- проверка уникальности, так как данные формируются из нескольких источников
);
CREATE UNIQUE INDEX company_check_uindex ON public.company ("check");
стоит задача реализовать некий аналог
INSERT INTO company ( company_name, inn, kpp, "check") VALUES ('ООО рога и копыта', ''111, '222', '111-222') ON CONFLICT (\"check\") DO UPDATE SET company_name = 'ООО рога и копыта', inn='111', kpp='222', RETURNING id;
При этом необходимо обойти "побочный эффект" увеличения id в случае обновления данных.
погуглив нашел несколько вариантов, наиболее подходящий их которых, на мой взгляд, является
DO
$do$
BEGIN
UPDATE SET company_name = 'ООО рога и копыта', inn='111', kpp='222', WHERE "check"='111-222' RETURNING id;
IF NOT FOUND THEN
INSERT INTO company ( company_name, inn, kpp, "check") VALUES ('ООО рога и копыта', ''111, '222', '111-222') RETURNING id;
END IF;
END
$do$;
Однако данный вариант выдает ошибку.
ERROR: current transaction is aborted, commands ignored until end of transaction block [42601] ERROR: syntax error at or near "INTO
Подскажите в чем может быть загвоздка, или альтернативу решения вопроса с обходом вышеуказанного "побочного эффекта".
Заранее Спасибо!