考虑我有一个像 lgs_item 这样的表,其中包含以下项目
id title code
--------------------------------
1 laptop 01
我有几个引用 lgs_item 表的表。
每当我想从 lgs_item 中删除一条记录时,它都会检查foregin key 约束,当出现问题时,它会说它违反了带有约束名称的约束。
但我的问题是首先检查哪个约束?
我有两个不同的数据,并且在检查时看到了不同的约束(这太奇怪了)。 postgresql中检查约束有什么特殊顺序吗?
PostgreSQL中外键约束是通过系统触发器实现的。你可以用
看到它们SELECT c.conname AS constraint_name,
t.tgname AS trigger_name,
t.tgfoid::regproc AS trigger_function,
to_hex(t.tgtype::bigint) AS trigger_type
FROM pg_trigger AS t
JOIN pg_constraint AS c
ON t.tgconstraint = c.oid
WHERE t.tgisinternal
AND t.tgrelid = 'lgs_item'::regclass;
现在,相同类型的触发器按触发器名称的字母顺序触发,以便确定检查外键约束的顺序。在具有相同定义的两个不同数据库上,该顺序可能不同,因为触发器名称包含系统生成的触发器对象 ID。