PG删除问题

查看当前表被那些表引用

1
2
3
4
5
6
7
SELECT oid, relname FROM pg_class WHERE relname = 'account_analytic_account';
SELECT * FROM pg_CONSTRAINT WHERE confrelid = (SELECT oid FROM pg_class WHERE relname = 'account_analytic_account');

SELECT oid, relname FROM pg_class WHERE oid in
(
SELECT conrelid FROM pg_CONSTRAINT WHERE confrelid = (SELECT oid FROM pg_class WHERE relname = 'account_analytic_account')
);

查看/失效/生效 某张表的触发器(引用关系)

1
2
3
4
SELECT oid FROM pg_class WHERE relname = 'account_analytic_account';
SELECT * FROM pg_trigger WHERE tgrelid = 16458;
ALTER TABLE account_account_type DISABLE TRIGGER ALL;
ALTER TABLE account_account_type ENABLE TRIGGER ALL;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
pg_trigger是PostgreSQL数据库中的一个系统表,用于存储触发器的相关信息。以下是pg_trigger表中一些常见属性的含义:
oid:行标识符,通常是一个唯一的数字。
tgrelid:触发器所在表的对象标识符(OID)。
tgname:触发器的名称。
tgfoid:要被触发器调用的函数的OID。
tgtype:触发器类型,通常是一个整数,表示触发器的触发时机和操作类型。
tgenabled:触发器的启用状态,可能的值包括'O'(启用)、'D'(禁用)、'R'(在复制模式下触发)和'A'(始终触发)。
tgisinternal:内部触发器标识,如果为true表示内部触发器。
tgconstrrelid:完整性约束引用的表的OID。
tgconstrindid:完整性约束的索引的OID。
tgconstraint:约束触发器在pg_constraint中的OID。
tgdeferrable:约束触发器是否为可延迟类型。
tginitdeferred:约束触发器是否为初始延迟类型。
tgnargs:触发器函数的参数数量。
tgattr:当触发器指定列时的列号,未指定则为空数组。
tgargs:传递给触发器的参数。
tgqual:表示触发器的WHEN条件,如果没有则为null。
tgowner:触发器的所有者的OID。
tgordername:原始触发器名称。
tgorder:触发器是否控制触发先后顺序。
tgtime:触发器创建的时间点。

通过查看tgenabled是否为O来确认触发器是否关闭;

1
SELECT * FROM pg_trigger WHERE tgrelid = (SELECT oid FROM pg_class WHERE relname = 'account_analytic_account');

c\a的区别

1
2
3
4
RI_ConstraintTrigger_c_xxx 和 RI_ConstraintTrigger_a_xxx 可能是 PostgreSQL 中与约束触发器(Constraint Trigger)相关的名称或标识符。
RI_ConstraintTrigger_c_xxx 中的 c 可能表示 "constraint"(约束),这可能是一个与约束相关的触发器。
RI_ConstraintTrigger_a_xxx 中的 a 可能表示 "after"(之后),这可能是一个在特定操作之后触发的触发器。
通常,约束触发器用于在数据库操作中执行特定的约束检查或执行其他相关的操作。具体的含义和功能可能取决于数据库的设计和配置。