postgres中的两个外键
Two foreign keys in postgres
我正在做一个路口 table。我希望它有 2 个单独的外键,引用 2 个单独的 tables.
中的 ID
create table user_book (
id serial primary key NOT NULL DEFAULT nextval('seq_user_prod_pk'::regclass),
book_id numeric references books (id) NOT NULL,
user_id numeric NOT NULL references user (id),
checked bool,
);
我收到错误:
ERROR: syntax error at or near "user"
LINE 4: user_id numeric NOT NULL references user (id),
^
********** Error **********
ERROR: syntax error at or near "user"
SQL state: 42601
Character: 202
Postgres 不允许来自两个单独 table 的 2 个外键吗?
我也试过:
create table user_book (
id serial primary key NOT NULL DEFAULT nextval('seq_user_prod_pk'::regclass),
book_id numeric NOT NULL,
user_id numeric NOT NULL,
checked bool,
foreign key (book_id) references book (id)
foreign key (user_id) references user (id)
);
但是得到了一个非常相似的错误。
两个、三个或十几个外键都没有问题。 user
是 Postgres 中的保留字(以及 IIRC,在 ANSI SQL 中),因此您不应将其用作 table 名称。当然,您可以使用引号 ("
):
来转义它
create table user_book (
id serial primary key NOT NULL DEFAULT nextval('seq_user_prod_pk'::regclass),
book_id numeric references books (id) NOT NULL,
user_id numeric NOT NULL references "user" (id), -- here
checked bool,
);
但实际上,这只是一个糟糕的名字选择。将名称切换为非保留字(例如,users
),问题就会消失。
尝试
create table user_book (
id serial primary key NOT NULL DEFAULT nextval('seq_user_prod_pk'::regclass),
book_id numeric references books (id) NOT NULL,
user_id numeric NOT NULL references "user" (id),
checked bool,
);
而是……
我正在做一个路口 table。我希望它有 2 个单独的外键,引用 2 个单独的 tables.
中的 IDcreate table user_book (
id serial primary key NOT NULL DEFAULT nextval('seq_user_prod_pk'::regclass),
book_id numeric references books (id) NOT NULL,
user_id numeric NOT NULL references user (id),
checked bool,
);
我收到错误:
ERROR: syntax error at or near "user"
LINE 4: user_id numeric NOT NULL references user (id),
^
********** Error **********
ERROR: syntax error at or near "user"
SQL state: 42601
Character: 202
Postgres 不允许来自两个单独 table 的 2 个外键吗?
我也试过:
create table user_book (
id serial primary key NOT NULL DEFAULT nextval('seq_user_prod_pk'::regclass),
book_id numeric NOT NULL,
user_id numeric NOT NULL,
checked bool,
foreign key (book_id) references book (id)
foreign key (user_id) references user (id)
);
但是得到了一个非常相似的错误。
两个、三个或十几个外键都没有问题。 user
是 Postgres 中的保留字(以及 IIRC,在 ANSI SQL 中),因此您不应将其用作 table 名称。当然,您可以使用引号 ("
):
create table user_book (
id serial primary key NOT NULL DEFAULT nextval('seq_user_prod_pk'::regclass),
book_id numeric references books (id) NOT NULL,
user_id numeric NOT NULL references "user" (id), -- here
checked bool,
);
但实际上,这只是一个糟糕的名字选择。将名称切换为非保留字(例如,users
),问题就会消失。
尝试
create table user_book (
id serial primary key NOT NULL DEFAULT nextval('seq_user_prod_pk'::regclass),
book_id numeric references books (id) NOT NULL,
user_id numeric NOT NULL references "user" (id),
checked bool,
);
而是……