テーブルのバージョン管理スキームの並べ替えを有効にする汎用トリガー プロシージャを実装しようとしています。すべてのテーブルにはバージョンと現在のフィールドがあります。更新時に、条件に基づいて、古いバージョンを更新する代わりに新しいバージョンの行を作成したい場合があります。主キー フィールド (常に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() 呼び出しです)。誰でもこれを手伝ってもらえますか?
前もって感謝します!