【问题标题】:postgresql: relation "table_name" does not exist when trying to CREATE TABLEpostgresql:尝试创建表时关系“table_name”不存在
【发布时间】:2020-07-15 21:52:01
【问题描述】:

我正在通过 pgAdmin4 运行此代码:

CREATE TABLE product(
    code integer, 
    pname varchar(30),
    descr varchar(50),
    utype varchar(30),
    uprice float, 
    manu varchar(30),
    sid integer,
    PRIMARY KEY (code, sid),
    FOREIGN KEY (sid) REFERENCES supplier(sid)
);

CREATE TABLE branch(
    bid integer,
    bname varchar(30),
    baddress varchar(50),
    PRIMARY KEY (bid)
);

CREATE TABLE stock(
    code integer,
    bid integer,
    units float,
    PRIMARY KEY (code, bid)
);

CREATE TABLE receipt(
    bid integer,
    rdate date,
    rtime time,
    ptype varchar(30),
    total float,
    PRIMARY KEY (bid, rdate, rtime)
);

CREATE TABLE purchase(
    bid integer,
    rdate date,
    rtime time,
    code integer,
    units float,
    PRIMARY KEY (bid, rdate, rtime, code),
    check (units > 0)
);

CREATE TABLE supplier(
    sid integer,
    sname varchar(30),
    address varchar(50),
    phone numeric (9,0),
    PRIMARY KEY (sid)
);

INSERT INTO product (code, pname, descr, utype, uprice, manu, sid) VALUES
        (987, 'Tomatoes',       'Vegetable',  'Kg',  5.99,  'manufacturer1', 111),
        (876, 'Cucumbers',      'Vegetable',  'Kg',  4.99,  'manufacturer1', 222),
        (765, 'Cornflakes',     'Cornflakes', 'Box', 15.9,  'manufacturer1', 222),

INSERT INTO branch (bid, bname, baddress) VALUES
        (987, 'tal aviv', 'road 1 tel aviv'),
        (878, 'Raanana',  'road 1 raanana'),
        (767, 'Holon',    'road 1 holon');

INSERT INTO stock (code, bid, units) VALUES
        (987, 989, 50),
        (987, 878, 75),
        (987, 767, 100),

INSERT INTO receipt (bid, rdate, rtime, ptype) VALUES
        (989, '2020-3-19', '10:00', 'Cash'),
        (989, '2020-7-16', '12:30', 'Credit'),
        (989, '2020-7-15', '15:35', 'Credit'),

INSERT INTO purchase (bid, rdate, rtime, code, units) VALUES
        (989, '2020-3-18', '10:00', 987, 5),
        (989, '2020-3-18', '10:00', 876, 3),
        (989, '2020-3-18', '10:00', 543, 4),

INSERT INTO supplier (sid, sname, address, phone) VALUES
        (111, 'supplier2', 'road2 tel aviv',  111111111),
        (222, 'supplier3', 'road3 jerusalem', 222222222),
        (333, 'supplier4', 'road2 eilat',     333333333);

我不断收到这条消息: 错误:关系“供应商”不存在 SQL 状态:42P01

问题在于产品表(第一个表)中的 外键,我知道这一点是因为我删除了它并创建了所有带有值的表(我删除了一些值以方便写作)。

不确定它是否是语法错误,我尝试了几种方法来解决它,但我一无所知,有什么建议吗? 提前致谢。

【问题讨论】:

  • 显然你需要创建supplier之前你可以在上面定义一个外键。重新排列你的陈述。
  • @a_horse_with_no_name 我尝试了一个该选项,但它一直表示该表不存在,您建议可能在创建所有值和表后添加该命令?

标签: sql postgresql syntax


【解决方案1】:

您必须在product 表之前创建supplier 表作为sid 从产品表引用到供应商表中的sid 作为外键。

这是工作的demo

CREATE TABLE supplier(
    sid integer,
    sname varchar(30),
    address varchar(50),
    phone numeric (9,0),
    PRIMARY KEY (sid)
);

CREATE TABLE product(
    code integer, 
    pname varchar(30),
    descr varchar(50),
    utype varchar(30),
    uprice float, 
    manu varchar(30),
    sid integer,
    PRIMARY KEY (code, sid),
    FOREIGN KEY (sid) REFERENCES supplier(sid)
);

【讨论】:

  • 非常感谢,我使用了演示。在我之前的尝试中,我尝试切换产品和供应商位置,但没有将它们都放在 sql 查询中的较低位置,这就是我不断收到该错误的原因。
【解决方案2】:

一种选择是稍后添加约束(在插入之前)。这样就不用担心建表的顺序了。

ALTER TABLE product
ADD FOREIGN KEY (sid) REFERENCES supplier(sid);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 2011-01-03
    • 2012-01-13
    • 2020-09-03
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多