この大幅に簡略化されたフォームを試してください:
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以降で利用可能です。