0
は、私は、PostgreSQLにこのテーブルを持っていると私は毎回私はpublications
last_edit_date
がnow()
に更新されるテーブルの1行を編集トリガーしたいのですが:私は「スタック深さリミットINSERTトリガー
CREATE FUNCTION trigger_update_question_timestamp()
RETURNS "trigger" AS $func$
BEGIN
UPDATE publications SET last_edit_date = now() WHERE publicationid = NEW.publicationid;
RETURN NULL;
END;
$func$ LANGUAGE plpgsql;
CREATE TRIGGER answer_update_question_timestamp AFTER INSERT OR UPDATE ON publications
FOR EACH ROW EXECUTE PROCEDURE trigger_update_question_timestamp();
CREATE TABLE publications
(
publicationid SERIAL PRIMARY KEY,
body VARCHAR(1000) NOT NULL ,
creation_date TIMESTAMP DEFAULT now() NOT NULL,
userid INTEGER NOT NULL,
last_edit_date TIMESTAMP,
CONSTRAINT body_length CHECK (CHAR_LENGTH(body) >= 10 AND CHAR_LENGTH(body) <= 1000),
CONSTRAINT "FK_publications_users"
FOREIGN KEY ("userid") REFERENCES users ("userid") ON DELETE SET NULL ON UPDATE CASCADE
);
をmをPhpStormで手動で編集すると、次のエラーが表示されます。
[54001] ERROR: stack depth limit exceeded Hint: Increase the configuration parameter "max_stack_depth" (currently 2048kB), after ensuring the platform's stack depth limit is adequate. Where: SQL statement "SELECT 1 FROM ONLY "public"."users" x WHERE "userid" OPERATOR(pg_catalog.=) $1 FOR KEY SHARE OF x" SQL statement "UPDATE publications SET last_edit_date = now() WHERE publicationid = NEW.publicationid" PL/pgSQL function trigger_update_question_timestamp()
これはどういう意味ですか?それは私の引き金や他の定義と関係がありますか?
あなたは何を意味する:
ここに解決策は、次のように
NEW
を修正BEFORE INSERT OR UPDATE
トリガーを使用するのですか? @Laurenz Albe 'BEGIN UPDATEパブリケーションのようなものSET NEW.last_edit_date = CURRENT_TIMESTAMP where publicationid = NEW.publicationid; RETURN NULL;終わり; ' これは出版物の新版が存在しないと言います –いいえ、これは完全なボディーです(私はそれを示す答えを編集しました)。 'UPDATE'はありません。 *行が挿入される前の*値を変更するだけです。 'BEFORE'トリガーでなければならないことを忘れないでください。 –