我在觸發器更新時,應刪除行舊*,但我不知道表結構。 所以我嘗試過使用information_schema來獲取列名稱,但它確實很慢。刪除觸發器中的行(PostgreSQL)
是否有可能在沒有關於表結構的知識的情況下執行刪除操作?
UPD: 觸發器應該接受任何表的行,所以觸發器函數在它被調用之前不會知道表的任何內容。
UPD2:
這很適合我:
EXECUTE 'DELETE FROM ' || tablename || ' WHERE ctid=$1' USING OLD.ctid;
我在觸發器更新時,應刪除行舊*,但我不知道表結構。 所以我嘗試過使用information_schema來獲取列名稱,但它確實很慢。刪除觸發器中的行(PostgreSQL)
是否有可能在沒有關於表結構的知識的情況下執行刪除操作?
UPD: 觸發器應該接受任何表的行,所以觸發器函數在它被調用之前不會知道表的任何內容。
UPD2:
這很適合我:
EXECUTE 'DELETE FROM ' || tablename || ' WHERE ctid=$1' USING OLD.ctid;
看看這篇文章:
你可以使用描述在\d+ tablename
SQL postgre表。
爲什麼需要這個?更新實際上是插入新版本和刪除記錄的舊版本。這個觸發器不需要額外的刪除,因爲記錄已經消失,所以觸發器永遠不會找到記錄。
觸發器是UPDATE觸發器,所以不會有DELETE。但真正的問題是:爲什麼應用程序在想要刪除一行時不使用DELETE – 2010-11-29 13:59:43
謝謝,它是有用的,但另一個問題。 – 2010-11-29 13:21:31