日付によるテーブル パーティション (特にログ) が広く使用されていると想像できますが、問題に対する適切な答えを見つけることができません。
週ごとにテーブル パーティションを作成したい (レコード数が多すぎて月ごとに作成できない)。毎週行う理由は、プロセスの一部として日付を検索するアルゴリズムのデータが必要だからです。
私の問題は、週を考慮してパーティションを作成し、「典型的な」アプローチを使用して手動で作成する必要があることです。このようなもの。
CREATE TABLE measurement_y2013w01 (
CHECK ( logdate >= DATE '2013-01-07' AND logdate < DATE '2013-01-14' )
) INHERITS (measurement);
CREATE TABLE measurement_y2006w02 (
CHECK ( logdate >= DATE '2013-01-14' AND logdate < DATE '2013-01-21' )
) INHERITS (measurement);
...
しかし、私はそれが自動的に行われることを望んでいます。毎週1つずつパーティションを作成したくありません。
名前を付けるための私のルールは、パーティションの名前付けの場合は yYYYYwWW にするか、datadYYYYMMDD を開始します。
次のようなものを使用して挿入するときにパーティションをチェックすることを考えました:
SELECT
nmsp_parent.nspname AS parent_schema,
parent.relname AS parent,
nmsp_child.nspname AS child,
child.relname AS child_schema
FROM pg_inherits
JOIN pg_class parent ON pg_inherits.inhparent = parent.oid
JOIN pg_class child ON pg_inherits.inhrelid = child.oid
JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace
JOIN pg_namespace nmsp_child ON nmsp_child.oid = child.relnamespace
パーティションが存在しない場合は、挿入前に作成しますが、挿入されるレコードの数を考慮すると、これは非常に非効率的です。
私の他の選択肢は、このパーティションを作成する外部プロセスを毎週実行することですが、私はこれを避けようとしていました.
たとえば、毎月のチェックに使用される、私が見逃しているこれに対するより効率的なソリューションはありますか?