Estoy migrando Oracle DLL a PostgreSQL, tengo un problema al traducir el siguiente código a 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;En realidad, no necesita un disparador en Postgres para eso. Simplemente declare la columna como
idpartner integer generated always as identityY Postgres usará la secuencia (creada automáticamente) automáticamente si la columna no se especifica como columna de destino en la instrucción INSERT.
Alternativamente, si realmente quieres un disparador:
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();