PostgresQL外键语法错误

时间:2017-07-04 16:59:44

标签: 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 master_table (
id SERIAL PRIMARY KEY,
master_directory references auth_table (directory),
master_image references auth_table (image)
)

我收到错误的原因是什么?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

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

您的外键引用需要引用唯一列。所以" auth_table" 可能需要以这些方式之一声明。 (如果你的表与文件的路径有关,你可能想要第二个。)

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)
);

这些独特的约束意味着完全不同的东西,每个都需要不同的外键引用。假设您要声明" auth_table"第二种方式," master_table"可能应该被宣布为其中之一。 (故意忽略级联更新和删除。)

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)
);