0

「points_per_month」列の値を変更した行で「前払い」列が true の場合にのみ実行されるように、テーブルにトリガーを作成しようとしています。私はこれを試しました:

CREATE TRIGGER "fix_usage_trigger" 
AFTER UPDATE OF "points_per_month"
ON "public"."clients"
FOR EACH ROW WHEN (ROW.prepaid)
EXECUTE PROCEDURE "fix_prepaid_client_available_usage"();

psqlは私にこれを言っています:

エラー: テーブル "行" 行 1 の FROM 節エントリがありません: ...r_month" ON "public"."clients" FOR EACH ROW WHEN (ROW.prepai...

FROM 句がないことは明らかですが、なぜそれが必要なのか、どこに配置すればよいのかわかりません。

4

1 に答える 1

0

when (new.prepaid)Davidのコメントによると、それはそうあるべきです。テーブル エイリアスと同様に、when 句で (更新前後の行のように) 古いものと新しいものにアクセスできます。エラー メッセージは、行が既知のテーブルではないことを訴える PG です。

2 つの追加メモ:

  • when (old.prepaid or new.prepaid)請求プランの切り替えを管理したい場合、または別の 2 つの別個のトリガーが必要になる場合があります。逆に、when (old.prepaid and new.prepaid)そうしないと、誰かがデータベース クエリを実行して、不注意でトリガーを起動し、望ましくない状態を作成する可能性があります (単体テストを 1 つまたは 2 つ追加します)。
  • 関数の名前は、コード フローのさらに上で何かが間違っている可能性があることを示唆しています。代わりに、最初に利用可能な使用法を適切に設定することで、それを修正したい場合があります。そうすることで、より効率的になる可能性もあります。
于 2013-09-26T15:23:02.440 に答える