0

テーブルのバージョン管理スキームの並べ替えを有効にする汎用トリガー プロシージャを実装しようとしています。すべてのテーブルにはバージョン現在のフィールドがあります。更新時に、条件に基づいて、古いバージョンを更新する代わりに新しいバージョンの行を作成したい場合があります。主キー フィールド (常にid )の既定値を取得できません。

これが私がやったことです:

CREATE FUNCTION version_trigger() RETURNS trigger AS $$
DECLARE
    id_default text;
    id_value text;

BEGIN
    IF version_condition() THEN
        old.current = false;

        -- I can read the default value
        SELECT column_default INTO id_default
               FROM  information_schema.columns
               WHERE table_name = TG_TABLE_NAME AND column_name = 'id';

        -- THIS DOESN'T WORK!
        EXECUTE 'SELECT $1' INTO id_value USING id_default;

        new.id = id_value;
        EXECUTE 'INSERT INTO ' || quote_ident(TG_TABLE_NAME) || ' SELECT ($1).*' USING new;
        RETURN old;
    END IF;

    -- regular UPDATE
    RETURN new;
END
$$ LANGUAGE plpgsql;

IDのデフォルト値を読み取るステップがありません(これは単なる nextval() 呼び出しです)。誰でもこれを手伝ってもらえますか?

前もって感謝します!

4

1 に答える 1