关系“表”已经存在

时间:2017-11-19 09:03:37

标签: sql postgresql atom-editor

我正在构建一个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) 
);

1 个答案:

答案 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;