この大幅に簡略化されたフォームを試してください:
CREATE OR REPLACE FUNCTION somefunc()
RETURNS void AS
$func$
DECLARE
addresstablename text := 'address_history_' || to_char(now(), 'FMDD_MM_YYYY');
BEGIN
EXECUTE
'CREATE TABLE ' || addresstablename || '() INHERITS (address_all)';
EXECUTE
'INSERT INTO ' || addresstablename || '
SELECT *
FROM address_history
WHERE address_timestamp >= $1'
USING date_trunc('hour', now() - interval '7 days');
END
$func$ LANGUAGE plpgsql;
主なポイント:
-
宣言時にplpgsqlで変数を割り当てることができます。コードを簡素化します。
-
to_char()を使用しますコード>日付をフォーマットします。はるかに簡単です。 -
now()およびCURRENT_TIMESTAMP同じことをします。 -
'now()'を引用しないでください 、now()を使用します (引用符なし)現在のタイムスタンプが必要な場合。 -
USING<を使用します。 / code>、したがって、EXECUTEを含む句タイムスタンプを変換する必要はありませんtextへ そして戻って-おそらく引用にぶつかる あなたがしたような問題。より速く、より簡単に、より安全に。 -
LANGUAGE plpgsqlで 、plpgsqlはキーワードであり、引用しないでください。 -
CREATEを使用して、テーブルがすでに存在するかどうかを確認することをお勧めします。存在しない場合のテーブル、PostgreSQL9.1以降で利用可能です。