2011-09-15 5 views
4

コンテキスト:パーティション表でデータをINSERTしようとしています。私のテーブルは、たくさんのデータ(およびボリュームが増加すると予想される)があり、最新のデータが頻繁に照会されるため、月単位で区切られています。パーティションの選択に関するコメントは歓迎です(しかし、私の質問に対する答えは歓迎すべきものです)。SQL言語を使用してプログラムで定義されたPostgreSQLテーブルに挿入できますか?

documentationには、行を挿入するときに新しいデータの日付をチェックし、それに応じて右側の「子」テーブルに挿入するトリガが呼び出されるパーティションの例があります。 IFとELSIFステートメントのシーケンスを月ごとに1つずつ使用します。これを維持している男(またはガール)は、毎月​​新しいテーブルを作成し、トリガー機能を更新しなければなりません。

私は本当にこの解決策が嫌いです。私は完璧に動作するものをコーディングしたいと思いますし、私はいつも更新する必要はなく、それは私と壮大な子供たちを失うことになります。

私は次のようになり、トリガーを作ることができるのであれば、私は思っていた:

INSERT INTO get_the_appropriate_table_name(NEW.date) VALUES (NEW.*); 

残念ながら私のすべての試みが失敗しています。私は "regclass"のものを使ってみましたが、成功しませんでした。

つまり、文字列を構成してテーブル名として使用したいと考えています。それは可能ですか?

+0

+1その解決策を好きではない。私は毎月このような何かを座っていると想像することができます! – Icarus

+0

パーティションを 'ローリング'(現在、月 - 1、...月 - n)してから、挿入するだけで現在のオフセットをチェックする必要があります(毎月挿入クエリを変更する必要はありません。そのまま)。もちろん、最後のパーティションを削除して他のパーティションの名前を変更して新しいパーティションを作成する必要がありますが、それはやってみてください(ドロップ/作成)。 –

+0

@ X-Zeroそれはいい考えです。しかし、私が "古い"データを挿入した場合、私はまだすべてのif-elsesを書く必要があります。正直言って、それは起こるべきではありません。また、私はすべてのデータをドロップするつもりはないので、私は多くのテーブルを予期して作成する必要があります。それは完璧ではないだろうが、今のところ私の最高の解決策だ。ありがとう! – Arthur

答えて

1

私は、now()のdate_partsに従ってテーブルに挿入するためにEXECUTEを使ってトリガ関数を作成しようとしていました。もし存在しない場合は、最初に作成してください。私たち - 右のあなた自身に言及されているドキュメントの章の下で:
http://www.postgresql.org/docs/9.0/interactive/ddl-partitioning.html

下にスクロールして、ユーザーの「ユーザーコメント」へのすべての方法。 Laban Mwangiが例を挙げました。

+0

aaaaaaaaaahそうですね。私はそれを試みます、それは本当にそうであるようです。ありがとうございました! – Arthur

+0

C'est la vie! ;) –

+1

ああああ。私はその年前に投稿しました。私はそれについてすべてを忘れてしまった!それはそこに人々を助けることを知って良い:D – Lmwangi

関連する問題