1
私はトリガー関数を使って同じテーブルの古いレコードを更新しようとしています。PL/pgsqlを使用して同じテーブルの古いレコードを更新するためのトリガー
私はTG_TABLE_NAME
を使用して、このトリガの原因となったテーブルを更新する一般的な方法を試しています。私のコードは次のようになります。
BEGIN
UPDATE TG_TABLE_NAME
SET "Redundant"=true
WHERE "DocumentID"=NEW."DocumentID"
AND "RecordID" = NEW."RecordID"
AND "TransactionID" < NEW."TransactionID"
AND "Redundant" = false ;
RETURN NEW;
END
しかし、トリガが起動、Postgresはそれは私が、私は明らかに間違って何かをやっている推測している「tg_table_name」
というテーブルを見つけることができないことを不平を言うときが、私はpl/PGSQLが初めてです。誰も古いレコードを(レコードIDと小さいTransactionIDを一致させて)更新する方法についてアドバイスを持っていますか?
ありがとう、これは間違いなく正しい方法でした。私はそれを動作させるためにいくつかの調整が必要でした。私の最終的なコードだった: 'BEGIN EXECUTE ' UPDATE「' || TG_RELNAME || '" SET "冗長" =真 "文書ID" = $ 1 AND "レコードID" = $ 2 AND "TRANSACTIONID" <$ 3 AND "冗長" =偽 ' USING NEW "DocumentID"、 NEW。 "RecordID"、 NEW。 "TransactionID"; NEW; END' 私のテーブル名の大文字小文字を保持するために二重引用符を追加しなければならず(おそらく私の場合に固有の)、USING文の前に最初のセミコロンを削除しました。 お世話になりました! – Drewmate
@Drewmate:代わりに['quote_ident(TG_RELNAME)'](http://www.postgresql.org/docs/current/interactive/functions-string.html#FUNCTIONS-STRING-OTHER)を使用してください。大文字と小文字が混在しているとは思わなかった。小文字の識別子はあなたの人生をPostgreSQLで簡単にします。セミコロンを修正した私のアップデートを見逃しているに違いない。 –
識別子に関する良いアドバイス。私はすべてを小文字に切り替えると思います。 – Drewmate