2010-11-29 11 views
3

更新時にトリガーが発生しました。行を削除する必要があります。OLD *ですが、テーブル構造はわかりません。 私はinformation_schemaを使って列名を取得しようとしましたが、実際は遅いです。トリガーの行を削除する(PostgreSQL)

テーブル構造についての知識がなくても削除を実行できますか?

UPD: トリガーは、どのテーブルの行も受け入れる必要があります。したがって、トリガー関数は呼び出される前にテーブルについて何も知ることができません。

UPD2:
これは私のためによく働く:

EXECUTE 'DELETE FROM ' || tablename || ' WHERE ctid=$1' USING OLD.ctid; 

答えて

1

は、この記事をチェックアウト:

Dynamic Triggers in PLpgSQL

+0

ありがとう、それは便利でしたが、別の問題です。 –

0

あなたは\d+ tablenameを使用してpostgre SQLでテーブルを記述することができます。

1

あなたがこれを必要とするのはなぜ?更新とは、実際には新しいバージョンの挿入と古いバージョンのレコードの削除です。このトリガーによる追加の削除の必要はありません。トリガーは、レコードがすでに消失したためレコードを検出しません。

+0

トリガーはUPDATEトリガーなので、DELETEはありません。しかし、本当の問題は、アプリケーションが行を削除するときにDELETEを使用しない理由です。 –

+0

はい、更新トリガーですが、更新されたレコードの古いバージョンを削除したい、ctidを確認します。 –

関連する問題