Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgresQL外键语法错误_Sql_Postgresql_Foreign Keys_Ddl - Fatal编程技术网

PostgresQL外键语法错误

PostgresQL外键语法错误,sql,postgresql,foreign-keys,ddl,Sql,Postgresql,Foreign Keys,Ddl,在尝试在此相应数据库中创建第二个表时,我收到以下错误消息: ERROR: syntax error at or near "REFERENCES" LINE 3: master_directory REFERENCES auth_table (directory), 以下是我试图创建的数据库结构: CREATE TABLE auth_table ( id SERIAL PRIMARY KEY, directory VARCHAR, image VARCHAR ) CREATE TABLE

在尝试在此相应数据库中创建第二个表时,我收到以下错误消息:

ERROR:  syntax error at or near "REFERENCES"
LINE 3: master_directory REFERENCES auth_table (directory),
以下是我试图创建的数据库结构:

CREATE TABLE auth_table (
id SERIAL PRIMARY KEY,
directory VARCHAR,
image VARCHAR
)

CREATE TABLE master_table (
id SERIAL PRIMARY KEY,
master_directory references auth_table (directory),
master_image references auth_table (image)
)

我为什么会收到那个错误?任何帮助都将不胜感激

您已经关闭了数据类型,但语法错误是您遇到的最小问题

外键引用需要引用唯一列。所以“auth_table”可能需要通过以下方式之一声明。(如果表与文件路径有关,则可能需要第二个。)

这些独特的约束意味着完全不同的事情,每个约束都需要不同的外键引用。假设您想以第二种方式声明“auth_table”,那么“master_table”可能应该像下面这样声明。(故意忽略级联更新和删除。)


列应该有一个数据类型(在
引用
之前),varchar键通常不是一个好主意。另外应该有一个
后面加上code>。@joop忘了包括;按照我的定义,是我的错。我不知道引用之前的数据类型是必要的!我认为引用总是采用与原始引用相同的数据类型。非常感谢!引用外键-该值必须是唯一的吗?就像如果两个表中的值都保持不变一样?外键约束必须引用对其具有某种唯一约束的一个或多个列——
unique
not null unique
,或
主键
CREATE TABLE auth_table (
  id SERIAL PRIMARY KEY,
  directory VARCHAR not null unique,
  image VARCHAR not null unique
);

CREATE TABLE auth_table (
  id SERIAL PRIMARY KEY,
  directory VARCHAR not null,
  image VARCHAR not null,
  unique (directory, image)
);
CREATE TABLE master_table (
  master_directory varchar not null,
  master_image varchar not null,
  primary key (master_directory, master_image),
  foreign key (master_directory, master_image)
    references auth_table (directory, image)
);

CREATE TABLE master_table (
  id integer primary key,
  foreign key (id) references auth_table (id)
);