我有一个包含以下表格的数据库:items
、categories
和category_items
. (简化,省略字段)模式如下:
CREATE TABLE IF NOT EXISTS items (
id SERIAL primary key not null,
partNo text unique not null
);
CREATE TABLE IF NOT EXISTS categories (
id SERIAL PRIMARY KEY,
name TEXT UNIQUE
);
CREATE TABLE IF NOT EXISTS category_items (
category_id SERIAL PRIMARY KEY,
partno TEXT NOT NULL,
FOREIGN KEY (partno) REFERENCES items(partno),
FOREIGN KEY (category_id) REFERENCES categories(id)
);
在我想在表中插入一条记录之前,这个模式似乎工作正常category_items
。在第一次插入时category_items
,它可以工作,但是如果我尝试插入同一类别的另一个项目,则会出现重复键错误:duplicate key value violates unique constraint "category_items_pkey" Detail: Key (category_id)=(2) already exists.
问题是,category_id
从来没有指定必须是唯一的,那么为什么这会导致约束错误呢?
这些是我试图插入的记录:
INSERT INTO category_items (category_id, partno, size) VALUES
((SELECT id FROM categories WHERE name = 'category1'), 'part1', '1"');
INSERT INTO category_items (category_id, partno, size) VALUES
((SELECT id FROM categories WHERE name = 'category1'), 'part2', '4"');
使用 PostgreSQL 14。另外,如果这很重要,我正在 sqlfiddle.com 上运行它