コンテキスト:パーティション表でデータをINSERTしようとしています。私のテーブルは、たくさんのデータ(およびボリュームが増加すると予想される)があり、最新のデータが頻繁に照会されるため、月単位で区切られています。パーティションの選択に関するコメントは歓迎です(しかし、私の質問に対する答えは歓迎すべきものです)。SQL言語を使用してプログラムで定義されたPostgreSQLテーブルに挿入できますか?
documentationには、行を挿入するときに新しいデータの日付をチェックし、それに応じて右側の「子」テーブルに挿入するトリガが呼び出されるパーティションの例があります。 IFとELSIFステートメントのシーケンスを月ごとに1つずつ使用します。これを維持している男(またはガール)は、毎月新しいテーブルを作成し、トリガー機能を更新しなければなりません。
私は本当にこの解決策が嫌いです。私は完璧に動作するものをコーディングしたいと思いますし、私はいつも更新する必要はなく、それは私と壮大な子供たちを失うことになります。
私は次のようになり、トリガーを作ることができるのであれば、私は思っていた:
INSERT INTO get_the_appropriate_table_name(NEW.date) VALUES (NEW.*);
残念ながら私のすべての試みが失敗しています。私は "regclass"のものを使ってみましたが、成功しませんでした。
つまり、文字列を構成してテーブル名として使用したいと考えています。それは可能ですか?
+1その解決策を好きではない。私は毎月このような何かを座っていると想像することができます! – Icarus
パーティションを 'ローリング'(現在、月 - 1、...月 - n)してから、挿入するだけで現在のオフセットをチェックする必要があります(毎月挿入クエリを変更する必要はありません。そのまま)。もちろん、最後のパーティションを削除して他のパーティションの名前を変更して新しいパーティションを作成する必要がありますが、それはやってみてください(ドロップ/作成)。 –
@ X-Zeroそれはいい考えです。しかし、私が "古い"データを挿入した場合、私はまだすべてのif-elsesを書く必要があります。正直言って、それは起こるべきではありません。また、私はすべてのデータをドロップするつもりはないので、私は多くのテーブルを予期して作成する必要があります。それは完璧ではないだろうが、今のところ私の最高の解決策だ。ありがとう! – Arthur