0

我正在 Postgres (Supabase) 服务器中创建一个包含内容的表。此表应仅包含内容 ID。

在另一个表中,我存储了该内容的翻译(即内容 id、翻译的语言和国家代码以及翻译文本)。

像这样:contents_table language_codes_table country_codes_table contents_translation

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

我正在创建这样的表:

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)
);

我期望被接受的条目:

(“my-id-1”、“en”、“US”、“英文文本”)

(“my-id-1”、“pt”、“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

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


编辑 2

删除对国家表的引用后,问题就消失了。


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

4

1 回答 1

0

所以这就是我解决它的方法:


编辑

谢谢阿德里安!

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

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

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

需要说明的是:该表的第二个版本与第一个版本具有相同的属性,相同的外键和相同的列名称。所以我想当我创建第一个表时发生了一种我无法理解的错误或疯狂的事情。

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

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

于 2021-09-04T21:57:36.297 回答