使用 "()" 和 "." 引用列有什么区别?



我试图使用以下语句创建一个连接表:

CREATE TABLE directors_and_films(
id serial PRIMARY KEY,
directors_id int REFERENCES directors.id
films_id int REFERENCES films.id,
);

这会导致Postgres响应:

ERROR: schema "films" does not exist

当我把它改成

CREATE TABLE directors_films (
id serial PRIMARY KEY,
director_id integer REFERENCES directors (id),
film_id integer REFERENCES films (id)
);

代码执行良好。

我的问题是使用()与句号访问列之间的区别是什么?这两者在SQL中有什么区别?

Postgres确实支持函数表示法属性表示法用于列引用。因此,适用于具有列col的表tbl:

SELECT col(tbl) FROM tbl;

手动:

但是这种用法是不推荐的,因为它很容易混淆

:

  • 将常见查询存储为列?

但这与手头的情况无关。CREATE TABLE语句中FK约束的简短语法需要在引用列周围加上括号。(显然,在您的示例中,约束只能引用单个列。)像您尝试的(directors.id)这样的属性表示法在这里是一个语法错误。
这就是它的全部。手动:

REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]

相关内容

  • 没有找到相关文章

最新更新