为什么我的 POSTGRES 组合键不能接受这个输入?

Why do my POSTGRES composite key can't accept this input?

我正在创建一个 table,其中包含 Postgres (Supabase) 服务器中的内容。此 table 应该只有内容 ID。

在另一个 table 中,我正在存储此内容的翻译(即内容 ID、翻译的语言和国家/地区代码以及翻译后的文本)。

像这样: contents_table language_codes_table country_codes_table contents_translation

在内容 table 中,我尝试使用 3 个外键的组合作为主键,它们是语言代码、国家代码和内容 ID。

我正在这样创建 table:

CREATE TABLE public.contents_localization_test (
  content_id uuid REFERENCES public.contents (content_id),
  lang_code text REFERENCES public.lang_codes (lang_code),
  country_code text REFERENCES public.lang_country_codes (country_code),
  content_name text,
  CONSTRAINT unique_entry PRIMARY KEY (content_id, lang_code, country_code)
);

我期望被接受的条目:

( “我的ID-1”, “恩”, “我们”, “英文文本” )

( “我的ID-1”, “点”, "BR", "Texto em Português" )

由于 ID 重复,它们未被明确接受。我做错了什么?


编辑 接受的数据样本(第一个):

content_id : 68f8ebc2-ac50-44d0-a626-4babd343d2f9
lang_code: pt
country_code: BR
content_name: Tabela Periódica

不接受的数据示例:

content_id : 68f8ebc2-ac50-44d0-a626-4babd343d2f9
lang_code: en
country_code: US
content_name: Periodic Table

这是错误: 错误:错误:在 table 上插入或更新“contents_localization_test”违反了外键约束“contents_localization_test_country_code_fkey


编辑 2

删除对 countries_table 的引用后,问题就消失了。


编辑 3 我发现了问题。谢谢大家的帮助。

我就是这样解决的:


编辑

谢谢阿德里安!

我决定 deactivate/activate 每个 primary foreign 键(即从 中删除它们主键 它们作为外键的引用),看看会发生什么。我从 country_code table 开始。我停用了它,尝试添加具有不同语言代码的重复国家(好的!它通过了!)。然后我尝试添加一个具有相同国家代码、相同语言代码和相同 content_id 的新条目。该错误清楚地表明,这个新的插入是不可能的,因为 id 是重复的(现在是!)。 所以我想我的 contry_codes table 不知何故被破坏了(虽然我无法猜测这是何时或如何发生的)。

我的国家table被打破了(我不知道为什么!)并且正在破坏其他一切。 table 本身很好,但看起来它有一个循环引用(我不知道如何命名)使国家代码本身算作两次(我在这里猜测...... ).简而言之:我需要用第一个的每个代码创建一个新的 country_codes table 并更改第二个的引用。现在一切正常。

我正在使用他们的 UI 创建此 table,所以可能在执行此操作或刷新浏览器时出现错误。

明确一点:table 的第二个版本与第一个版本具有相同的属性、相同的外键和相同的列名。所以我想当我创建第一个 table.

时发生了一种我无法理解的错误或疯狂的事情

因此,如果您从未来看到这一点:请停用并激活每个复合键,然后尝试添加应该被允许但不应比较的内容。这样就可以找到有问题的table。希望只有一个哈哈

谢谢大家的帮助和理解我糟糕的英语:D!