【问题标题】:PostgreSQL error: relation <Table> does not existPostgreSQL 错误:关系 <表> 不存在
【发布时间】:2020-01-26 20:00:26
【问题描述】:

我在 postgres 中创建了 2 个表,其中一个似乎很好,但另一个返回错误: 关系“系列”不存在。这两张表完全一样,除了主键和一些列。似乎是什么问题?当主键不同时,不应该创建表吗? '''

CREATE TABLE Films
(
Fid varchar (3) NOT NULL DEFAULT '000' PRIMARY KEY,
Uiid varchar (3),
FOREIGN KEY (Uiid) REFERENCES Users(Uid)
ON DELETE SET Default
ON UPDATE CASCADE,

Ciid varchar (3),
FOREIGN KEY (Ciid) REFERENCES Cinemas(Cid)
ON DELETE SET Default
ON UPDATE CASCADE,

Aiid varchar (3),
FOREIGN KEY (Aiid) REFERENCES Actor(Aid)
ON DELETE SET Default
ON UPDATE CASCADE,

Diid varchar (3),
FOREIGN KEY (Diid) REFERENCES Director(Did)
ON DELETE SET Default
ON UPDATE CASCADE,

uComm varchar (15000),
FOREIGN KEY (uComm) REFERENCES UserComments(Commentss)
ON DELETE SET Default
ON UPDATE CASCADE,

FName char (20) NOT NULL,
FprodYear char(4) NOT NULL,
FRate RATE,
FGenre char(50) NOT NULL        
);

'''

CREATE TABLE Series
(
Sid varchar (3) NOT NULL DEFAULT '000' PRIMARY KEY,
Uiiid varchar (3),
FOREIGN KEY (Uiiid) REFERENCES Users(Uid)
ON DELETE SET Default
ON UPDATE CASCADE,
Ciiid varchar (3),
FOREIGN KEY (Ciiid) REFERENCES Cinemas(Cid)
ON DELETE SET Default
ON UPDATE CASCADE,

Aiiid varchar (3),
FOREIGN KEY (Aiiid) REFERENCES Actor(Aid)
ON DELETE SET Default
ON UPDATE CASCADE,

Diiid varchar (3),
FOREIGN KEY (Diiid) REFERENCES Director(Did)
ON DELETE SET Default
ON UPDATE CASCADE,

uCommm varchar (15000),
FOREIGN KEY (uCommm) REFERENCES UserComments(Commentss)
ON DELETE SET Default
ON UPDATE CASCADE,

SName char (20) NOT NULL,
SprodYear char(4) NOT NULL,
SRate RATE,
SGenre char(50) NOT NULL
);

【问题讨论】:

  • DEFAULT '000' 在主键(或任何键)上没有什么意义。
  • 请发布确切的错误信息。另外,我想,是不是第二个查询失败了,对吧?
  • 愚蠢的想法:难道系列是保留关键字?但是是的,错误信息会告诉我们确切的原因
  • @TheImpaler 是系列表失败,错误:关系“系列”不存在 SQL 状态:42P01

标签: sql database postgresql


【解决方案1】:

在这两张表之前,你是否创建过这张表:

  • 用户
  • 电影院
  • 演员
  • 导演
  • 用户评论

如果没有,则不会创建这两个表。

另外请检查您是否创建了一个名为 RATE 的类型。

如果您已经创建了我提到的表和数据类型 RATE,请确保您在此表中有主键,以便您的外键可以引用它们。

然后,如果您已完成所有这些操作,请检查来自 @TheImpaler 的评论:“主键(或任何键)上的 DEFAULT '000' 没有什么意义。”。

另外,当你在列上有主键时,你不需要 NOT NULL 约束。

在所有这些之后,您将拥有两个有效的代码: https://dbfiddle.uk/?rdbms=postgres_12&fiddle=a91b77594583e6768360709ef7a9f494

在与 OP 评论后,我发现他可以通过在表名之前引用架构来创建表,如下所示:

create table schema_name.Series...

【讨论】:

  • CREATE DOMAIN RATE int DEFAULT 0 CHECK (VALUE IN('0','1','2','3','4','5'));
  • 这是我在代码顶部的 Rate,我将键更改为不同的默认值,并且我事先创建了这些表
  • 该错误可能与OP在问题中未显示的另一个问题有关。据我们所知,您的 SQLFiddle 证明查询很好。 +1
  • 嗨@Dorian 有时候就是这样,你修复一个错误以发现其他错误...希望我们正朝着正确的方向前进...我已经开始聊天,请你加入吗?
  • 嗨@Dorian,您已经寻求帮助,我为您提供了帮助以解决您的错误。很高兴从你那里得到一些反馈。您告诉我,这个答案确实对您有所帮助,因此很高兴获得赞成票,并且您接受我的回答是正确的。在聊天中,我们可以看到其他错误,我可以尝试提供帮助。如果我不能,你可以打开一个新问题...
猜你喜欢
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多