2015-09-19 2 views
0

В библиотеке, которую я использую в настоящее время, есть ошибка, и я пытаюсь найти обходной путь. Можно ли игнорировать столбец в вставке просмотра PostgreSQL? У меня есть этот вид:Игнорировать столбец в PostgreSQL view insert

CREATE VIEW schema.auth AS 
    SELECT email AS id, pass AS pass, 'onymous'::varchar AS rolname 
    FROM schema.person; 

библиотека пытается сделать следующее:

INSERT INTO schema.auth (id, pass, rolname) VALUES ('abc', '123', ''); 

библиотека не должна быть настройка пустой строки ('') для rolname, отсюда и ошибка.

Есть ли способ остановить публикацию PostgreSQL при ошибке rolname и спокойно отбросить пустую строку?

+0

Возможный дубликат [Ввод триггера Postgresql для установки значения] (http://stackoverflow.com/questions/16102188/postgresql-insert-trigger-to-set-value) – Bulat

+0

Насколько я понимаю, триггеры не работают таким образом на представлениях. – Calebmer

+0

Вы попробовали? – Bulat

ответ

0

Это на самом деле очень тривиально. Что вы делаете это просто «забывают» rolname при распространении в INSERT на целях базовых таблиц:

CREATE FUNCTION fix_lib_issue() RETURNS trigger AS $$ 
BEGIN 
    INSERT INTO schema.person (email, pass) 
    VALUES NEW.id, NEW.pass; 
    RETURN NEW; 
END; 
$$ LANGUAGE plpgsql; 

CREATE TRIGGER tr_auth 
INSTEAD OF INSERT ON schema.auth 
FOR EACH ROW EXECUTE PROCEDURE fix_lib_issue(); 

Когда вы запрашиваете вид после вставки, то rolname будет установлен в onymous, следуя определению вида.

Смежные вопросы