PostgresQL 外键语法错误
PostgresQL Foreign Key Syntax Error
尝试在相应的数据库中创建第二个 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" 可能 需要以这些方式之一声明。 (如果您的 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)
);
尝试在相应的数据库中创建第二个 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" 可能 需要以这些方式之一声明。 (如果您的 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)
);