我是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
实际上,所有外键引用表引用都不存在。当我删除引用时,就可以创建表了,有人能帮我吗?
1条答案
按热度按时间p8h8hvxi1#
脚本按顺序运行。所以当
pagecolours
创建表时users
表还不存在,因此references users
失败。你需要重新排序脚本,这样
users
首先创建表。但是你有一个循环引用(users
参考文献pagecolours
以及pagecolours
参考文献users
)您需要创建不带“inline”引用的表,然后在脚本末尾运行alter table来创建外键。但是像这样的循环引用通常不是一个好主意。但是如果您100%确定需要它,那么至少应该将外键声明为可延迟的,以便更容易插入行。
也:
serial
不是数据类型。引用serial
列应定义为integer
. 一般来说,建议远离serial
使用integer generated always as identity
相反。