PostgreSQL 提供這些輔助函數來從事件觸發器中檢索資訊。
有關事件觸發器的更多資訊,請參閱第 38 章。
pg_event_trigger_ddl_commands
() →setof record
pg_event_trigger_ddl_commands
傳回DDL由每個使用者動作執行的命令清單,當在附加到 ddl_command_end
事件觸發器的函數中呼叫時。如果在任何其他上下文中呼叫,則會引發錯誤。pg_event_trigger_ddl_commands
為執行的每個基本命令傳回一列;某些作為單一 SQL 陳述式的命令可能會傳回多列。此函數傳回下列欄位
名稱 | 類型 | 描述 |
---|---|---|
classid |
oid |
物件所屬目錄的 OID |
objid |
oid |
物件本身的 OID |
objsubid |
integer |
子物件 ID(例如,欄位的屬性編號) |
command_tag |
text |
命令標記 |
object_type |
text |
物件類型 |
schema_name |
text |
物件所屬的綱要名稱(如果有的話);否則為 NULL 。不會套用引號。 |
object_identity |
text |
物件識別的文字呈現,以綱要限定。如果需要,識別中包含的每個識別碼都會加上引號。 |
in_extension |
boolean |
如果命令是擴充套件指令碼的一部分,則為 True |
command |
pg_ddl_command |
命令的完整表示法,採用內部格式。這無法直接輸出,但可以傳遞給其他函數以取得有關命令的不同資訊。 |
pg_event_trigger_dropped_objects
() →setof record
pg_event_trigger_dropped_objects
傳回由在其 sql_drop
事件中呼叫的命令刪除的所有物件的清單。如果在任何其他上下文中呼叫,則會引發錯誤。此函數傳回下列欄位
名稱 | 類型 | 描述 |
---|---|---|
classid |
oid |
物件所屬目錄的 OID |
objid |
oid |
物件本身的 OID |
objsubid |
integer |
子物件 ID(例如,欄位的屬性編號) |
original |
boolean |
如果這是刪除的根物件之一,則為 True |
normal |
boolean |
如果相依性圖表中存在導致此物件的正常相依性關係,則為 True |
is_temporary |
boolean |
如果這是暫時物件,則為 True |
object_type |
text |
物件類型 |
schema_name |
text |
物件所屬的綱要名稱(如果有的話);否則為 NULL 。不會套用引號。 |
object_name |
text |
物件的名稱,如果綱要和名稱的組合可以用作物件的唯一識別碼;否則為 NULL 。不會套用引號,且名稱永遠不會以綱要限定。 |
object_identity |
text |
物件識別的文字呈現,以綱要限定。如果需要,識別中包含的每個識別碼都會加上引號。 |
address_names |
text[] |
一個陣列,與 object_type 和 address_args 一起,可以由 pg_get_object_address 函數用來在包含相同種類的同名物件的遠端伺服器中重新建立物件位址。 |
address_args |
text[] |
address_names 的補充 |
pg_event_trigger_dropped_objects
函數可以在事件觸發器中這樣使用
CREATE FUNCTION test_event_trigger_for_drops() RETURNS event_trigger LANGUAGE plpgsql AS $$ DECLARE obj record; BEGIN FOR obj IN SELECT * FROM pg_event_trigger_dropped_objects() LOOP RAISE NOTICE '% dropped object: % %.% %', tg_tag, obj.object_type, obj.schema_name, obj.object_name, obj.object_identity; END LOOP; END; $$; CREATE EVENT TRIGGER test_event_trigger_for_drops ON sql_drop EXECUTE FUNCTION test_event_trigger_for_drops();
表 9.108 中顯示的函數提供有關剛呼叫 table_rewrite
事件的資料表的資訊。如果在任何其他上下文中呼叫,則會引發錯誤。
表 9.108. 資料表重寫資訊函數
這些函數可以在事件觸發器中這樣使用
CREATE FUNCTION test_event_trigger_table_rewrite_oid() RETURNS event_trigger LANGUAGE plpgsql AS $$ BEGIN RAISE NOTICE 'rewriting table % for reason %', pg_event_trigger_table_rewrite_oid()::regclass, pg_event_trigger_table_rewrite_reason(); END; $$; CREATE EVENT TRIGGER test_table_rewrite_oid ON table_rewrite EXECUTE FUNCTION test_event_trigger_table_rewrite_oid();
如果您在文件中發現任何不正確、與特定功能的體驗不符或需要進一步澄清的內容,請使用此表單來回報文件問題。