-1

JDBC を使用してデータを db に挿入しようとしていますが、そうするときは、制約を無効にする必要があります-check、not-null、foreign-keys。

alter table user_table disable trigger all;

上記のクエリで試しましたが、うまくいきません。

プログラムの開始時にすべての制約を無効にする方法が必要です。トランザクションが完了したら、制約を元に戻す必要があります。

JDBC4 と Postgresql 9.0 を使用しています。

4

1 に答える 1

3

PostgreSQLのドキュメントには、そのALL部分について次のように記載されています。

テーブルに属するすべてのトリガーを無効または有効にします。(トリガーのいずれかが、外部キー制約または延期可能な一意性および除外制約を実装するために使用されるものなど、内部的に生成された制約トリガーである場合、これにはスーパーユーザー特権が必要です。)

したがって、質問に外部キーチェックを記載しているため、データの挿入に使用しているユーザーはスーパーユーザーではないと思います

ただし、要件が非常に特別でない限り、間違ったルートを進んでいると思います:

チェック/トリガーを一緒に無効にすることは、データの一貫性を非常に簡単に破壊する非常に大きな銃です. そして、トランザクションの最後にチェックを再度有効にしたいので、これをしたくないようです。

最初に延期可能な制約を回避できればよいでしょう。次に、トランザクション スコープに自動的にバインドされるSET CONSTRAINTSコマンドを使用できます。一貫性が危険にさらされていないことを確認できます。遅延可能なトリガーに関するCREATE TABLEのドキュメントも参照してください。

于 2012-12-21T15:15:04.673 に答える