【问题标题】:postgreSQL primary / foreign key not complyingpostgreSQL 主/外键不符合
【发布时间】:2012-04-20 19:20:17
【问题描述】:

您好,我目前有两个表,一个成员表与平常一样。

成员表

member_id SERIAL, 
first_name varchar(20)
last_name varchar(20).

我有第二张桌子

规划师

day as varchar
time as varchar
activity varchar
member bigint

我将 member_id 定义为主键,不为空且唯一

我还设置了member是member_id的外键

所以这应该允许它只在成员中输入 ID 号并在规划器中输入,是吗?

目前我有四个成员,member_id 从 1 到 4 。 好吧,当我在下面尝试时,它仍然不允许我将数据插入到计划表中。

INSERT INTO planner VALUES ('monday','09:00','Rowing',2);

对我来说应该可以,但我收到了这个错误:

 DETAIL Key (member)=(2) is not present in the table "members".

所以我目前很难过,任何帮助都会非常有帮助,谢谢大家。

【问题讨论】:

  • 请向我们展示完整的CREATE TABLE语句,而不是缩写的表描述,包括外键的定义。
  • member_id SERIALinteger 类型,而您的 FK 是 member bigint。这不应该损害 FK 约束的操作,因为 Pg 知道如何将 bigint 转换为整数,但您确实应该使用相同的基本类型定义这两个,要么使成员整数或成员 ID bigserial
  • 一定有什么你没有告诉我们的,因为它确实有效(至少根据你提供的信息)。见这里:pastebin.com/YrdLLG1Q

标签: postgresql foreign-keys primary-key


【解决方案1】:

它不起作用,因为继承不适用于外键。使用当前版本的 PostgreSQL

我必须为它创建一个规则

create rule fake_ref
as on insert to planner
where new.member not in (select member_id from members)
do instead nothing;

【讨论】:

  • 如果您从一开始就向我们展示了所有相关表的 CREATE TABLE 语句,这将是显而易见的。
猜你喜欢
  • 2023-03-14
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
  • 2018-04-07
相关资源
最近更新 更多