別のスレッドからこのサンプルを入手しましたが、私が知る必要があるものに完全に適合しています。
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 ステートメントが ID を配置しているかどうかを確認する方法はありますか?
例:
INSERT INTO alimento (name) VALUES ('lemon');
わかりました、これは機能します...そして私がそれを行うと:
INSERT INTO alimento (id, name) VALUES (299, 'lemon');
私の関数は、シーケンスを使用する必要があるかどうかを確認する必要があります。
ID のデフォルト値をテーブル作成時のシーケンスに設定できることはわかっていますが、それを変更することはできません。トリガー関数を変更することしかできません。