PostgreSQL DB Design IF столбец NULL, затем COALESCE (КОЛОННА A, КОЛОННА B) - PullRequest
0 голосов
/ 27 января 2020

Я разрабатываю схему PostgreSQL и хочу создать правило, согласно которому, если пользователь не вводит значение для столбца C, тогда я задаю значение для столбца C COALESCE (COLUMN A, COLUMN Б). Я пробовал обновление таблицы и триггер, но в логе c должно быть что-то не так, буду признателен за вашу помощь - спасибо

Я пробовал:

1.

update Mytable 
    set ColC=
    case when ColC is NULL then COALESCE(ColA,ColB)
    else ColC;

2.

CREATE TRIGGER ColC_VIOLATION
BEFORE INSERT OR UPDATE OF ColC
ON Mytable FOR EACH ROW
WHEN ColC is NULL then COALESCE(ColA,ColB)

3.

CREATE OR REPLACE FUNCTION ColC_func() RETURNS trigger AS 
$$
BEGIN
UPDATE Mytable
    set ColC=
    case when ColC is NULL then  COALESCE(ColA,ColB)
    else ColC ;
END
$$
LANGUAGE PLPGSQL;

1 Ответ

1 голос
/ 27 января 2020

вам не нужен оператор UPDATE в триггере, просто присвойте значение:

CREATE OR REPLACE FUNCTION ColC_func() RETURNS trigger AS 
$$
BEGIN
   NEW.colc := COALESCE(NEW.cola, NEW.colb);
   RETURN NEW;
END
$$
LANGUAGE PLPGSQL;

И заставьте триггер срабатывать, только если colc равно нулю:

CREATE TRIGGER ColC_VIOLATION
  BEFORE INSERT OR UPDATE on mytable
  FOR EACH ROW execute procedure colc_func()
  WHEN ColC is NULL;
...