我正在构建一个SQL数据库并遇到错误“关系'性别'已经存在”。
对于发布类似问题的SO用户,我尝试过:注释掉约束以查看是否存在干扰,将对serial / all主键的所有引用更改为整数以匹配类型,如果存在则丢弃所有表。无论我做什么,错误都是一样的,所以我发布了原始代码。我真的可以使用一些指导来解决这个案例中的问题。谢谢!
CREATE TABLE sexes (
id serial PRIMARY KEY,
string text NOT NULL
);
CREATE TABLE humans (
id serial PRIMARY KEY UNIQUE NOT NULL,
forename text NOT NULL,
surname text NOT NULL,
birthdate date,
sex_id integer REFERENCES sexes(id)
);
CREATE TABLE marriages (
id serial PRIMARY KEY UNIQUE NOT NULL,
partner_1_id integer REFERENCES humans(id),
partner_2_id integer REFERENCES humans(id),
marriage_date date NOT NULL,
divorce_date date NOT NULL,
CONSTRAINT divorced CHECK (marriage_date <= divorce_date),
CONSTRAINT marry_self CHECK (partner_1_id <> partner_2_id)
);
答案 0 :(得分:1)
您可以使用IF NOT EXISTS
子句:
如果已存在同名关系,请不要抛出错误。在这种情况下发出通知。请注意,无法保证现有关系与已创建的关系类似。
CREATE TABLE IF NOT EXISTS sexes (
id serial PRIMARY KEY,
string text NOT NULL
);
这真的很奇怪,因为如果在创建新表之前删除它们会丢掉一个全新的错误。
如果你想删除表,你必须按正确的顺序执行:
DROP TABLE IF EXISTS marriages;
DROP TABLE IF EXISTS humans;
DROP TABLE IF EXISTS sexes;