为什么我的 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!
我正在创建一个 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!