1
私はPostgres 10のパーティションをBY RANGE(date_created)の巨大なテーブルに自動化しようとしています。Postgres 10でパーティション作成を自動化
私はパーティションテーブルの自動作成がないことに気づいたので、これらのテーブルの作成を自動化する手順を記述したいと思います。
私はそのような何か考えていた:
CREATE OR REPLACE FUNCTION cdi.automating_partitions()
RETURNS TABLE(natural_id text, name text, natural_id_numeric text) AS
$func$
DECLARE
formal_table text;
BEGIN
FOR formal_table IN
select '2017-01-01'::date + (n || ' months')::interval months,
'2013-02-01'::date + (n || ' months')::interval monthsplus
from generate_series(0, 12) n
LOOP
RETURN QUERY EXECUTE
'CREATE TABLE cdi.' || 'document' || to_char(months, 'YYYY') || '' || to_char(months, 'MM') || ' PARTITION OF cdi.document
FOR VALUES FROM (''' || to_char(months, 'YYYY') || to_char(months, 'MM') || ''',
''' to_char(monthsplus, 'YYYY') || to_char(monthsplus, 'MM') ''');'
END LOOP;
END
$func$ LANGUAGE plpgsql;
をしかし、私ははっきりと読みやすいコードを取得するためにexecute
と連動して機能format()
を使用します(
PL/pgSQLブロックの外部で 'execute'を使用することはできません(SQLクエリの一部ではありません)。 –
あなたはどんなエラーを受けていますか? – JustMe