0

postgres トリガーを介して 1 つのフィールドを検証しようとしています。

対象のフィールドに小数の値がある場合、警告を表示する必要がありますが、ユーザーがレコードを保存できるようにします。

オプションでやってみた

RAISE EXCEPTION,RAISE - USING 

しかし、UI でエラーがスローされ、トランザクションが中止されます。

オプションでやってみた

RAISE NOTICE,RAISE WARNING 

警告は表示されず、記録は単に保存されます。

これについて誰かが助けてくれれば素晴らしいことです。

前もって感謝します

4

1 に答える 1

2

s とsclient_min_messagesが表示されるレベルに設定する必要があります。あなたはこれを行うことができます:NOTICEWARNING

  • トランザクションレベルでSET LOCAL
  • セッションレベルでSET
  • ユーザーレベルでALTER USER
  • データベースレベルでALTER DATABASE
  • 世界的にpostgresql.conf

次に、クエリの実行後にサーバーからのメッセージを確認し、それらをユーザーに表示するか、その他の方法で処理する必要があります。その方法は、指定していない、使用しているデータベース ドライバーによって異なります。PgJDBC? libpq? 他の?

通知または警告を発しても、トランザクションが一時停止してユーザー入力を待つことにはならないことに注意してください。あなたは本当にそれをしたくありません。代わりにRAISEEXCEPTIONトランザクションを中止します。問題についてユーザーに伝え、承認された場合はトランザクションを再実行します。例外を再度発生させないことを示すフラグを設定することもできます。

PL/Perlu、PL/Pythonu、または PL/Java トリガーが実行を一時停止し、サイドチャネル (TCP ソケットなど) を介してクライアントにアクションの承認を求めることは技術的に可能です。しかし、それは本当に悪い考えでしょう。

于 2013-01-11T10:58:50.093 に答える