Oracle на PostgreSQL перевести - PullRequest
1 голос
/ 06 августа 2020

Я переношу Oracle DLL на PostgreSQL, у меня возникла проблема с переводом следующего фрагмента кода на PostgreSQL

-- Generate ID using sequence and trigger
CREATE SEQUENCE partner_seq START WITH 1 INCREMENT BY 1;

CREATE OR REPLACE TRIGGER partner_seq_tr
 BEFORE INSERT ON partner FOR EACH ROW
 WHEN (NEW.idPartner IS NULL)
BEGIN
 SELECT partner_seq.NEXTVAL INTO :NEW.idPartner FROM DUAL;
END;
/
-- CREATE UNIQUE INDEX partner_idxName ON partner (Name);
-- COMMIT; 

1 Ответ

4 голосов
/ 06 августа 2020

Для этого вам не нужен триггер в Postgres. Просто объявите столбец как

idpartner integer generated always as identity

И Postgres будет использовать (автоматически созданную) последовательность автоматически, если столбец не указан в качестве целевого столбца в операторе INSERT.

В качестве альтернативы, если вам действительно нужен триггер:

create sequence partner_seq;

create function assign_partner_id()
  returns trigger
as
$$
begin 
  if new.idpartner is null then 
     new.idpartner := nextval('partner_seq');
  end if;
  return new;
end;
$$
language plpgsql;

create trigger partner_seq_trg
  before on partner insert on each row
  execute procedure assign_partner_id();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...