У меня есть такая таблица:
CREATE TABLE pratica
(
progressivo text NOT NULL DEFAULT nextval('pratica_prog_seq'::regclass),
commessa text NOT NULL,
pla_uo text NOT NULL,
tecnico text,
pratica text NOT NULL,
lcl_numero numeric(10,0),
CONSTRAINT pratica_pkey PRIMARY KEY (progressivo)
)
WITH (
OIDS=FALSE
);
И вторая таблица, такая как:
CREATE TABLE verifica_checklist
(
gid text NOT NULL DEFAULT nextval('verifica_checklist_gid_seq'::regclass),
progressivo text NOT NULL,
commessa text NOT NULL,
pla_uo text NOT NULL,
tecnico text NOT NULL,
pratica text NOT NULL,
lcl_numero numeric(10,0),
tipo_check text NOT NULL,
data text NOT NULL,
CONSTRAINT verifica_checklist_pkey PRIMARY KEY (gid)
)
WITH (
OIDS=FALSE
);
Я хочу создать триггер, который вставит новую строку в таблицу verifica_checklist
когда выполняются следующие условия:
new.prev_check_ok = 'Si' AND new.prev_check IS NULL
Я написал эту функцию и этот триггер, но каждый раз, когда я изменяю какое-либо значение, он вставляет новую строку в таблицу verifica_checklist
, даже если она уже присутствует.
CREATE OR REPLACE FUNCTION checklist_verifica()
RETURNS trigger AS
$BODY$
BEGIN
CASE
WHEN (new.prev_check_ok = 'Si' AND new.prev_check IS NULL) THEN
INSERT INTO verifica_checklist(progressivo,commessa,pla_uo,tecnico,pratica,tipo_check,data)
VALUES (NEW.progressivo, NEW.commessa, NEW.pla_uo, NEW.tecnico, NEW.pratica,'Preventivo',current_date);
ELSE NULL;
END CASE;
RETURN NEW;
END
$BODY$
LANGUAGE plpgsql VOLATILE
CREATE TRIGGER checklist_verifica
AFTER INSERT OR UPDATE
ON pratica
FOR EACH ROW
WHEN (((((((new.prev_check_ok = 'Si'::text) AND (new.prev_check IS NULL)) OR ((new.sal1_check_ok = 'Si'::text) AND (new.sal1_check IS NULL))) OR ((new.sal2_check_ok = 'Si'::text) AND (new.sal2_check IS NULL))) OR ((new.servitu_check_ok = 'Si'::text) AND (new.servitu_check IS NULL))) OR ((new.def_check_ok = 'Si'::text) AND (new.def_check IS NULL))))
EXECUTE PROCEDURE checklist_verifica();
Уникальными значениями являются столбец progressivo
и значение в столбце tipo_check
.Я мог бы иметь больше строк с тем же значением progressivo
, но только с разными значениями столбца tipo_check
.Как я мог решить?Спасибо