У меня есть вопрос о создании правила вставки или триггера для таблицы [t_1] в PostgreSQLPostgresql вставка правило/триггер
В таблице имеет четыре колонки: c1, c2, c3, c4, ID (уникальный) При новый рекорд попытаться вставить в таблицу существуют следующие правила:
- Если идентификатор не дублируется, а затем сделать нормальную вставку с новой записью
- Если идентификатор существует: проверьте c1, c2, c3 и NEW. c1, NEW.c2, NEW.c3; если c1 или c2 или c3 не являются нулевыми, выполните обновление записи и не перезаписывайте старую запись новой записью.
Например
c1 (не равно нулю), с2 (нуль), c3 (не равно нулю), с4 (нуль)
+
nC1 (не равно нулю), Nc2 (не равно нулю), nc3 (нуль), nc4 (нуль)
Результат
c1, ПС2, c3, c4
- Если id существует: если новый c4 не является нулевым, проверьте старые c1, c2, c3, если какой-либо из старых c1, c2, c3 не равен null, тогда НЕ НИЧЕГО (не вставки или обновления)
Вот мой код в настоящее время: (до сих пор не имеют решения для 3-го состояния)
CREATE RULE "t_1_on_duplicate_ignore" AS ON INSERT TO "t_1"
WHERE EXISTS(SELECT 1 FROM t_1
WHERE (id)=(NEW.id)
DO INSTEAD
(
UPDATE t_1 SET
c1 = CASE
WHEN c1 IS NOT NULL
THEN c1
ELSE NEW.c1
END,
c2 = CASE
WHEN c2 IS NOT NULL
THEN c2
ELSE NEW.c2
END,
c3 = CASE
WHEN c3 IS NOT NULL
THEN c3
ELSE NEW.c3
END
WHERE id = NEW.id;
)
Я думаю, что его слияние. это новая функция после 9.x? – Lester