Postgres 9.0以降では、関数は次のようになります。
CREATE OR REPLACE FUNCTION dummytest_insert_trigger()
RETURNS trigger AS
$func$
DECLARE
v_partition_name text := quote_ident('dummyTest'); -- assign at declaration
BEGIN
IF NEW.datetime IS NOT NULL THEN
EXECUTE
'INSERT INTO ' || v_partition_name || ' VALUES ($1,$2)'
USING NEW.id, NEW.datetime;
END IF;
RETURN NULL; -- You sure about this?
END
$func$ LANGUAGE plpgsql;
RETURN NULL
について :
- PostgreSQLのトリガー前の結果を無視するには?
大文字と小文字が混在する識別子は使用しないことをお勧めします。 format( .. %I ..)
を使用 またはquote_ident()
、"dummyTest"
という名前のテーブルを取得します 、残りの部分については二重引用符で囲む必要があります。関連:
- PostgreSQLの列名では大文字と小文字が区別されますか?
代わりに小文字を使用してください:
quote_ident('dummytest')
EXECUTE
で動的SQLを使用しても意味がありません 静的なテーブル名がある限り。しかし、それはおそらく単純化された例にすぎませんか?