2

私はPostgreSQLを使用しておりAdd/Delete/Update、サブテーブルの行がマスターテーブルに対して作成されるように、データベース内でほとんど同期されている2つ以上のテーブルが必要です。

この状況でトリガーを使用できるかどうかはわかりません。私の状況では、サブテーブルが切り捨てられ、新しいデータセットが読み込まれる可能性があるためです。

それを実装する方法はありますか?

例:

Employee_Sub1:
 id    name    version
+------+-------+--------+
 101    John     1
 102    David    1
 105    Azi      1

Employee_Sub2:
 id    name    version
+------+-------+--------+
 101    John     1
 102    DavidX   2       <- Sub2 having updated value for id 102
 105    Azi      1
 107    Marry    1

Employee_Sub3:
 id    name    version
+------+-------+--------+
 101    John    1
 105    Azi     1
 110    devil   1       <- Sub3 having new row of data

Employee_Finalテーブルは次のようになります。

Employee_Final:
 id    name    version
+------+-------+--------+
 101    John    1
 102    DavidX  2
 105    Azi     1
 107    Marry   1
 110    devil   1
4

3 に答える 3

2

トリガーを探していると思います。PL/PgSQLでそれらを実装する方法については、 PL/PgSQL トリガー手順を参照してください。、、およびAFTER INSERT OR UPDATE OR DELETEのそれぞれでトリガーを使用して、変更を に伝達します。Employee_Sub1Employee_Sub2Employee_Sub3Employee_Final

この質問については、テーブルの継承のような感じもありますが、継承が適切かどうかはわかりません。

通常、ID を変更するときはON UPDATE CASCADE外部キー参照を使用しますが、FK を変更すると PK が更新される逆にする必要があるため、ここでは機能しません。それはトリガーのもう 1 つの仕事です。NEWとレコード IDを比較しOLD、ID が変更された場合はマスター テーブルを更新する必要があります。

于 2012-11-09T07:49:10.077 に答える
1

テーブル継承を使用する場合があります。最初に、データのないマスター テーブルを作成し、継承オプションを使用してマスター テーブルから子テーブルを作成します。マスター テーブルから選択すると、結果セットには子テーブルのデータセットが含まれます。http://www.postgresql.org/docs/9.2/static/ddl-inherit.html にアクセスしてください

于 2012-11-09T08:47:20.267 に答える
0

通常、ソース テーブルにトリガーを作成すると、ターゲット テーブルに更新または挿入するかどうかが決まります。

于 2012-11-09T08:00:38.560 に答える