2014-02-09 36 views
0

我試圖使用psql終端窗口和-f選項(這將執行腳本)使用腳本填充表時出現問題。PostgreSQL,我如何填充這個表有兩個外鍵,因爲它的字段

我可以填充滑雪道和提升表罰款沒有問題,但我有另一個表中包含這些表的外鍵。我可以創建表格,但我無法添加任何東西到桌子上,我根本不知道如何做到這一點。

我的表:

piste {piste_name {PK}, grade, length, fall, open} 
lift {lift_name {PK}, lift_type, summit, rise, length, operating} 
lift_location {piste_name*{PK}, lift_name*{PK}} 

我的腳本:

CREATE TABLE piste (
    piste_name varchar(30) PRIMARY KEY NOT NULL, 
    grade varchar(10) NOT NULL, 
    length decimal NOT NULL, 
    fall smallint NOT NULL, 
    open boolean NOT NULL 

); 

CREATE TABLE lift (
    lift_name varchar(20) PRIMARY KEY NOT NULL, 
    lift_type varchar(10) NOT NULL, 
    summit smallint NOT NULL, 
    rise smallint NOT NULL, 
    length smallint NOT NULL, 
    operating boolean NOT NULL 
); 

CREATE TABLE lift_location (

    piste_name varchar(30) REFERENCES piste(piste_name), 
    lift_name varchar(20) REFERENCES lift(lift_name), 
    PRIMARY KEY(piste_name, lift_name) 
); 

所以,如果我插入一些值到這些表:

INSERT INTO lift (lift_name, lift_type, summit, rise, length, operating) VALUES 
('test lift', 'gondola', 1920, 440, 1600, true); 


INSERT INTO piste (piste_name, grade, length, fall, open) VALUES 
('test piste, 'medium', 3, 440, true); 

這些表將一個與指定的信息排。基於上述,我想我的lift_location表中有下列信息:

piste_name | lift_name 
________________________ 
test piste | test lift 

我怎樣才能做到這一點?

謝謝。 Chris。

回答

1

您需要運行其他查詢。您需要在lift_location表中添加一個新行以創建兩個表中兩行之間的關係。

INSERT INTO lift_location (piste_name, lift_name) VALUES ('test piste', 'test lift'); 

另外,還要確保兩個liftpiste表具有所需的測試數據。您在第二個INSERT查詢中缺少'

+0

對不起,這是一個錯字!所以我只是以同樣的方式插入它?謝謝。 –

+0

@chrisedwards對,'INSERT'沒有什麼特別之處。該約束主要用於維護[「數據的參照完整性」](http://www.postgresql.org/docs/9.3/static/tutorial-fk.html),因此,例如,您不能在不存在的電梯上創建滑雪道和列表之間的關係。 –

相關問題