【发布时间】:2021-11-02 14:53:08
【问题描述】:
我正在 Postgres (Supabase) 服务器中创建一个包含内容的表。此表应仅包含内容 ID。
在另一个表中,我存储了此内容的翻译(即内容 ID、翻译的语言和国家/地区代码以及翻译文本)。
类似这样的: 内容表 语言代码表 国家代码表 内容翻译
在目录表中,我尝试使用 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)
);
我期望被接受的条目:
( “我的 ID-1”, "恩", “我们”, “英文文本” )
( “我的 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 我发现了问题。谢谢大家的帮助。
【问题讨论】:
-
为什么会触发重复?对不起,我是 Postgres 的新手。由于它是一个复合键,它不应该作为一个整体来“评估”,而是作为每个“块”键?
-
这是错误:错误:错误:在表“contents_localization”上插入或更新违反外键约束
-
是的,如果你有重复的例子,比如
("my-id-1", "en", "US"),那么你会得到一个重复的错误。虽然我不确定如果content_id真的是uuid,那会发生什么? -
是的,这只是一个示例,抱歉,我认为最好简化:P。原始 id 是 68f8ebc2-ac50-44d0-a626-4babd343d2f9 不幸的是,我没有重复相同 id 和语言代码的实例。我不知道这是否是一个错误,或者我做错了什么,或者即使是专门来自 Supabase 的东西(我怀疑这是因为我使用纯 sql 创建表)
-
@AdrianKlaver 我打算仅在为一种语言和 id 重复输入时抛出这些重复错误,因此它不允许为同一种语言对同一种语言进行多次翻译文本。但由于我使用两种不同的语言代码,我无法发现问题
标签: sql postgresql supabase