postgresql 在定义 FOREIGN KEYS 时是否需要唯一的约束名称
Does postgresql require unique constraint names when defining FOREIGN KEYS
这是我的数据库表架构:
CREATE TABLE users (
user_id INTEGER NOT NULL,
device_id INTEGER,
user_points INTEGER,
cookie VARCHAR,
PRIMARY KEY (user_id)
);
CREATE TABLE admins (
admin_id INTEGER NOT NULL,
username VARCHAR,
password VARCHAR
);
CREATE TABLE admin_adventure (
adventure_id INTEGER NOT NULL,
admin_id INTEGER,
PRIMARY KEY (adventure_id)
);
CREATE TABLE adventures (
adventure_id INTEGER NOT NULL,
prize_id INTEGER,
novella_id INTEGER,
PRIMARY KEY (adventure_id)
);
我在这里尝试定义外键:
ALTER TABLE admin_adventure ADD FOREIGN KEY ( admin_id ) REFERENCES admins ( admin_id );
ALTER TABLE admin_adventure ADD FOREIGN KEY ( adventure_id ) REFERENCES adventures ( adventure_id );
这是我尝试使用 Flyway 迁移时遇到的错误:
ERROR: there is no unique constraint matching given keys for
referenced table "admins"
有人可以解释我做错了什么以及为什么会出现此错误吗?
错误消息抱怨您正在尝试 link 一个外键到另一个 table 中的列,这不是唯一的(例如主键)。尝试将 admins
table 中的 admin_id
列设为主键:
CREATE TABLE admins (
admin_id INTEGER NOT NULL,
username VARCHAR,
password VARCHAR,
PRIMARY KEY (admin_id)
);
喜欢the documentation 说:
A foreign key must reference columns that either are a primary key or form a unique constraint.
所以你必须
ALTER TABLE admins ADD PRIMARY KEY (admin_id);
或
ALTER TABLE admins ADD UNIQUE (admin_id);
这是我的数据库表架构:
CREATE TABLE users (
user_id INTEGER NOT NULL,
device_id INTEGER,
user_points INTEGER,
cookie VARCHAR,
PRIMARY KEY (user_id)
);
CREATE TABLE admins (
admin_id INTEGER NOT NULL,
username VARCHAR,
password VARCHAR
);
CREATE TABLE admin_adventure (
adventure_id INTEGER NOT NULL,
admin_id INTEGER,
PRIMARY KEY (adventure_id)
);
CREATE TABLE adventures (
adventure_id INTEGER NOT NULL,
prize_id INTEGER,
novella_id INTEGER,
PRIMARY KEY (adventure_id)
);
我在这里尝试定义外键:
ALTER TABLE admin_adventure ADD FOREIGN KEY ( admin_id ) REFERENCES admins ( admin_id );
ALTER TABLE admin_adventure ADD FOREIGN KEY ( adventure_id ) REFERENCES adventures ( adventure_id );
这是我尝试使用 Flyway 迁移时遇到的错误:
ERROR: there is no unique constraint matching given keys for referenced table "admins"
有人可以解释我做错了什么以及为什么会出现此错误吗?
错误消息抱怨您正在尝试 link 一个外键到另一个 table 中的列,这不是唯一的(例如主键)。尝试将 admins
table 中的 admin_id
列设为主键:
CREATE TABLE admins (
admin_id INTEGER NOT NULL,
username VARCHAR,
password VARCHAR,
PRIMARY KEY (admin_id)
);
喜欢the documentation 说:
A foreign key must reference columns that either are a primary key or form a unique constraint.
所以你必须
ALTER TABLE admins ADD PRIMARY KEY (admin_id);
或
ALTER TABLE admins ADD UNIQUE (admin_id);