为什么psql create table返回[42p01]错误:关系不存在

cbjzeqam  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(990)

我是sql新手。我试着运行sqlschema,下面是代码的一部分

create table PageColours (
    id          serial,
    userID      serial references  users(id),
                --references users(id),
    isTemplate  boolean default'false',
    name        NameValue not null unique,
    primary key (id)
);

create table People (
    id          serial,
    email       EmailValue not null unique,
    givenName   NameValue not null,
    familyName  NameValue,
    invitedID   serial references Events(id),
    attendedID  serial references Events(id),

    primary key (id)
);

create table users(
  id        serial
            references People(id),
    passWord    varchar not null,

    BillingAddress  serial not null
                    references Places(id),
    HomeAddress     serial
                    references Places(id),
    ListID          serial
                    references ContactLists(id),
    ColorID         serial
                    references PageColours(id),
    primary key (id)

);

它回来了 [2020-07-03 15:28:19] [42P01] ERROR: relation "people" does not exist ```
[2020-07-03 15:28:19] [42P01] ERROR: relation "users" does not exist

实际上,所有外键引用表引用都不存在。当我删除引用时,就可以创建表了,有人能帮我吗?
p8h8hvxi

p8h8hvxi1#

脚本按顺序运行。所以当 pagecolours 创建表时 users 表还不存在,因此 references users 失败。
你需要重新排序脚本,这样 users 首先创建表。但是你有一个循环引用( users 参考文献 pagecolours 以及 pagecolours 参考文献 users )您需要创建不带“inline”引用的表,然后在脚本末尾运行alter table来创建外键。
但是像这样的循环引用通常不是一个好主意。但是如果您100%确定需要它,那么至少应该将外键声明为可延迟的,以便更容易插入行。
也: serial 不是数据类型。引用 serial 列应定义为 integer . 一般来说,建议远离 serial 使用 integer generated always as identity 相反。

相关问题