2015-06-21 32 views
1

我有2個表格。我正在嘗試創建一個FORIEGN KEY。這是我的第一個表:如何創建這個FOREIGN KEY? - Postgres

CREATE TABLE bills(
id serial, 
name varchar(100), 
payment decimal(12, 2), 
payoff decimal(12, 2), 
type varchar(25) 
) 

當我嘗試創建一個第二個表:

CREATE TABLE pay_dates(
id serial, 
bill_id integer REFERENCES bills(id), 
due_date date, 
pay_date date, 
paid boolean 
) 

我得到這個錯誤:

ERROR: there is no unique constraint matching given keys for referenced table "bills"

我在做什麼錯?

回答

2

被引用的列必須是唯一的。您應該聲明id爲主鍵:

CREATE TABLE bills(
id serial primary key, 
... 

主鍵(或唯一)約束必須聲明爲顯式。類型序列只確保默認值是序列中的下一個值。例如:

create table test (val1 serial, val2 serial); 
insert into test (val2) values (1), (2), (default), (3), (4), (default); 
select * from test; 

val1 | val2 
------+------ 
    1 | 1 
    2 | 2 
    3 | 1 
    4 | 3 
    5 | 4 
    6 | 2 
(6 rows) 
+0

so'id serial' is not unique? – jhamm

+0

@jhamm不,「SERIAL」並不意味着唯一。這意味着:「請在我的數據庫中創建一個'SEQUENCE'對象,並使用該序列中的數字作爲此表新行中的默認值」。請參閱[文檔](http://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-SERIAL)並仔細閱讀擴展的SQL。將列標記爲「UNIQUE」(或「PRIMARY KEY」)表示「請在此列上創建索引,並使用該索引始終檢查新列或修改後的行是否已存儲在此列中其他行上的重複值」。 SERIAL和UNIQUE/PRIMARY KEY做不同的工作。 –