簡體   English   中英

postgresql:嘗試創建表時關系“table_name”不存在

[英]postgresql: relation “table_name” does not exist when trying to CREATE TABLE

我正在通過 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 state:42P01

問題在於產品表(第一個表)中的外鍵,我知道這一點,因為我刪除了它並創建了所有帶有值的表(我刪除了一些值以方便編寫)。

不確定它是否是語法錯誤,我嘗試了幾種方法來解決它,但我一無所知,有什么建議嗎? 提前致謝。

您必須在product表之前創建supplier表作為sid從產品表引用到供應商表中的sid作為外鍵。

這是工作演示

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)
);

一種選擇是稍后(在插入之前)添加約束。 這樣您就不必擔心表創建的順序。

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

暫無
暫無

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

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