如何在PostgreSQL中通过表的对象标识符(OID)删除表?
我想删除PostgreSQL中的一个隐藏表,使用它的OID,比如16417。我该怎么做 通过使用将OID映射到regclass,我可以看到该表的存在如何在PostgreSQL中通过表的对象标识符(OID)删除表?,postgresql,Postgresql,我想删除PostgreSQL中的一个隐藏表,使用它的OID,比如16417。我该怎么做 通过使用将OID映射到regclass,我可以看到该表的存在 SELECT 16417::regclass; 我得到了一个 regclass -------------------------- cyanaudit.tb_audit_field (1 row) 我怎么才能放下这个?我尝试使用drop table cyanaudit.tb\u audit\u字段但它不起
SELECT 16417::regclass;
我得到了一个
regclass
--------------------------
cyanaudit.tb_audit_field
(1 row)
我怎么才能放下这个?我尝试使用drop table cyanaudit.tb\u audit\u字段代码>但它不起作用,给出以下消息
ERROR: relation "cyanaudit.tb_audit_field" does not exist
LINE 1: ... distinct table_schema ) end from cyanaudit....
^
QUERY: select case when in_schema is not null then ARRAY[ in_schema ] else array_agg( distinct table_schema ) end from cyanaudit.tb_audit_field
CONTEXT: PL/pgSQL function cyanaudit.fn_update_audit_fields(character varying) line 1 at SQL statement
SQL statement "SELECT cyanaudit.fn_update_audit_fields()"
PL/pgSQL function cyanaudit.fn_update_audit_fields_event_trigger() line 1 at PERFORM
虽然它显示表不存在,但我仍然得到
regclass
--------------------------
cyanaudit.tb_audit_field
(1 row)
每当我询问
SELECT 16417::regclass;
任何输入?看起来像是一个事件触发器干扰了您的操作
当执行像DROP TABLE
这样的DDL语句时,会运行事件触发器
在本例中,它似乎是在DDL操作之后运行的事件触发器
事件触发器函数尝试对触发它的表执行某些操作,但由于您删除了该表,该函数失败(这可能是触发器函数中的错误)
由于事件触发器失败,整个事务(包括DROP TABLE
)被回滚,因此该表并没有真正被删除
您需要禁用或删除该事件触发器或修复触发器功能,以便可以删除该表。看起来像是操作中的事件触发器
当执行像DROP TABLE
这样的DDL语句时,会运行事件触发器
在本例中,它似乎是在DDL操作之后运行的事件触发器
事件触发器函数尝试对触发它的表执行某些操作,但由于您删除了该表,该函数失败(这可能是触发器函数中的错误)
由于事件触发器失败,整个事务(包括DROP TABLE
)被回滚,因此该表并没有真正被删除
您需要禁用或删除该事件触发器或修复触发器功能,以便可以删除该表。如何删除触发器?例如,如果我的触发器是:tr_after_audit_field_change after INSERT或UPDATE ON cyanaudit.tb_audit_field为每行执行过程cyanaudit.fn_after_audit_field_change(),我删除了触发器,但仍无法删除表格常规DML触发器不是您的问题。使用psql
中的\dy
查看事件触发器。您的问题是触发函数cyanaudit.fn\u update\u audit\u fields\u event\u trigger()
的问题。谢谢您的帮助。你是个救生员。我禁用了所有触发器。我应该再次启用它们吗?如果您需要,当然可以。这不是我该说的。我如何移除触发器?例如,如果我的触发器是:tr_after_audit_field_change after INSERT或UPDATE ON cyanaudit.tb_audit_field为每行执行过程cyanaudit.fn_after_audit_field_change(),我删除了触发器,但仍无法删除表格常规DML触发器不是您的问题。使用psql
中的\dy
查看事件触发器。您的问题是触发函数cyanaudit.fn\u update\u audit\u fields\u event\u trigger()的问题。谢谢您的帮助。你是个救生员。我禁用了所有触发器。我应该再次启用它们吗?如果您需要,当然可以。这不是我该说的。