7

PostgreSQL で Java/Spring/Hibernate を使用した新しいシステムを実装しています。このシステムは、テーブル内のレコードで変更/削除が行われるとすぐに、すべてのレコードのコピーを作成する必要があります。その後、監査テーブルはレポートによってクエリされ、ユーザーにデータが表示されます。

col1、col2 と呼ばれる約 20 列を持つ ENTITY_VERSIONS と呼ばれるテーブルに、変更された行 (削除された行) のコピーを作成するトリガーをテーブルに設定することにより、この監査/バージョン管理機能を実装することを計画していました。 、col3、col4 など、上記のテーブルの列を格納します。ただし、問題は、バージョン管理するテーブルが複数あり、すべてのテーブルのバージョンを格納する TARGET テーブル (ENTITY_VERSIONS) が 1 つしかない場合、TARGET テーブルをどのように設計すればよいかということです。

または、バージョン管理が必要なテーブルごとに VERSION テーブルの COPY がある方がよいでしょうか?

監査/バージョン管理を実装するための PostgreSQL トリガー (および関連するストアド プロシージャ) コードへのいくつかのポインターを共有できる場合は、ボーナスになります。

PS : SQL Server で監査テーブルを実装するための提案を見ましたか? OldValue と NewValue がどのタイプであるべきかわからないことを除いて、答えのようなものですか?

PPS : テーブルが HARD 削除の代わりに SOFT DELETE (ファントム削除) を使用している場合、アドバイスは変わりますか?

4

2 に答える 2

4

保持したいテーブルのバージョンを保持するために、各テーブルのコピーを用意します。グローバルバージョニングテーブルを維持して使用するのは少し悪夢のように聞こえます。

Postgresドキュメントのこのリンクは、Postgresの監査トリガーの例を示しています。

于 2010-07-06T17:03:41.677 に答える
2

グローバル テーブルでは、すべての列を hstore 型として 1 つの列に格納できます。監査を試してみたところ、うまく機能しているので、お勧めします。素晴らしい監査テーブルの例では、監査履歴の保持を開始したいテーブルにトリガーを追加するだけで、単一のテーブルのすべての変更を追跡します。すべての変更は hstore タイプとして保存されます-v 9.1+ このリンクで機能します

于 2013-06-30T16:59:03.457 に答える