错误:没有唯一约束匹配给定引用表的键#34;用户"

时间:2017-08-03 02:35:11

标签: sql postgresql

我已经阅读了一些类似的问题和答案,但我并没有放弃了解这个问题。我目前的一个猜测是,Potgres可能不允许非主键的外键输入。

用户:

用户注册,每行1个用户,每行1个ID(串行),唯一电子邮件(主键)

user_logins:

有关用户登录的信息,从用户引用user_id作为外键,其余列一起构成复合主键

CREATE TABLE users
(
    unique_email    TEXT NOT NULL,
    password        TEXT NOT NULL,
    user_id         SERIAL,
    created_date    TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT LOCALTIMESTAMP,    

    CONSTRAINT emailPK
                    PRIMARY KEY(unique_email)
);


CREATE TABLE user_logins
(
    user_id         SERIAL,
    login_date      TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT LOCALTIMESTAMP,
    login_ip        INET,

    CONSTRAINT user_idFK
                    FOREIGN KEY (user_id)
                    REFERENCES users(user_id)
                    ON DELETE CASCADE
                    ON UPDATE CASCADE,
    CONSTRAINT composit_PK_logins
                    PRIMARY KEY(user_id, login_date, login_ip)
);

1 个答案:

答案 0 :(得分:1)

user_id必须在unique表中有users个约束。否则,它会有歧义。

在此查询中,我在UNIQUE

中添加了user_id约束
CREATE TABLE users
(
    unique_email    TEXT NOT NULL,
    password        TEXT NOT NULL,
    user_id         SERIAL UNIQUE,
    created_date    TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT LOCALTIMESTAMP,    

    CONSTRAINT emailPK
                    PRIMARY KEY(unique_email)
);