检查postgresql中的外键约束顺序

问题描述 投票:0回答:1

考虑我有一个像 lgs_item 这样的表,其中包含以下项目

id       title        code
--------------------------------
1         laptop         01

我有几个引用 lgs_item 表的表。

每当我想从 lgs_item 中删除一条记录时,它都会检查foregin key 约束,当出现问题时,它会说它违反了带有约束名称的约束。

但我的问题是首先检查哪个约束?

我有两个不同的数据,并且在检查时看到了不同的约束(这太奇怪了)。 postgresql中检查约束有什么特殊顺序吗?

sql postgresql foreign-keys constraints
1个回答
0
投票

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。

© www.soinside.com 2019 - 2024. All rights reserved.