簡體   English   中英

關系“表”已經存在

[英]Relation “table” already exists

我正在構建一個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) 
);

您可以使用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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM