INSERT OR IGNORE

Положим, что в таблице используется первичный ключ, чтобы избежать дублирования данных. Некоторые БД (например, SQLite) при внесении данных допускаю конструкцию вида
INSERT OR IGNORE INTO tablename ...
и тогда попытки внести данные, нарушающие уникальность первичного ключа, молча игнорируются.

В PostgreSQL, к сожалению такой синтаксис не работает, но добиться требуемого функционала можно с помощью создания специального правила, обрабатывающего операции добавления в таблицу tablename с первичным ключом userkey:

CREATE OR REPLACE RULE "insert_test" AS
  ON INSERT TO "tablename"
  WHERE
    EXISTS(SELECT 1 FROM tablename WHERE userkey=NEW.userkey)
  DO INSTEAD NOTHING

Оставить комментарий