2010-11-29 142 views
3

我在觸發器更新時,應刪除行舊*,但我不知道表結構。 所以我嘗試過使用information_schema來獲取列名稱,但它確實很慢。刪除觸發器中的行(PostgreSQL)

是否有可能在沒有關於表結構的知識的情況下執行刪除操作?

UPD: 觸發器應該接受任何表的行,所以觸發器函數在它被調用之前不會知道表的任何內容。

UPD2:
這很適合我:

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

回答

0

你可以使用描述在\d+ tablename SQL postgre表。

1

爲什麼需要這個?更新實際上是插入新版本和刪除記錄的舊版本。這個觸發器不需要額外的刪除,因爲記錄已經消失,所以觸發器永遠不會找到記錄。

+0

觸發器是UPDATE觸發器,所以不會有DELETE。但真正的問題是:爲什麼應用程序在想要刪除一行時不使用DELETE – 2010-11-29 13:59:43