Добрый день всем!
Что имеется?
есть условная таблица 
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
Подскажите в чем может быть загвоздка, или альтернативу решения вопроса с обходом вышеуказанного "побочного эффекта".
Заранее Спасибо!