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