У меня есть этот образец из другой темы, и он идеально подходит для того, что мне нужно знать.
CREATE SEQUENCE AlimentosSequencia;
CREATE TABLE alimento (
id integer NOT NULL PRIMARY KEY
,name VARCHAR(255));
CREATE OR REPLACE FUNCTION AlimentoFuncion()
RETURNS "trigger" AS
$BODY$
BEGIN
New.id:=nextval('AlimentosSequencia');
Return NEW;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
CREATE TRIGGER AlimentosTrigger
BEFORE INSERT
ON alimento
FOR EACH ROW
EXECUTE PROCEDURE AlimentoFuncion();
INSERT INTO alimento (name) VALUES ('lemon');
Это работает нормально! Но я должен дополнить функцию AlimentoFunction.
Есть ли способ проверить IN THE FUNCTION, размещает ли мой оператор вставки идентификатор?
Пример:
INSERT INTO alimento (name) VALUES ('lemon');
Хорошо, это работает... и если я сделаю это:
INSERT INTO alimento (id, name) VALUES (299, 'lemon');
Моя функция должна проверить, нужно ли использовать последовательность.
Я знаю, что могу установить значение ID по умолчанию как последовательность при создании таблицы, но я не могу изменить это. Я просто могу изменить функцию триггера.