2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2

3.3. 外部索引鍵 #

回想一下 第二章 中的 weather 表和 cities 表。考慮以下問題:您想確保 weather 表中插入的行在 cities 表中都有匹配的條目。這被稱為維護資料的 參照完整性。在簡陋的資料庫系統中,這(如果實現的話)會透過首先檢視 cities 表來檢查是否存在匹配的記錄,然後插入或拒絕新的 weather 記錄來實現。這種方法有許多問題,而且非常不方便,所以 PostgreSQL 可以為您處理這個問題。

表的宣告將如下所示

CREATE TABLE cities (
        name     varchar(80) primary key,
        location point
);

CREATE TABLE weather (
        city      varchar(80) references cities(name),
        temp_lo   int,
        temp_hi   int,
        prcp      real,
        date      date
);

現在嘗試插入一個無效記錄

INSERT INTO weather VALUES ('Berkeley', 45, 53, 0.0, '1994-11-28');
ERROR:  insert or update on table "weather" violates foreign key constraint "weather_city_fkey"
DETAIL:  Key (city)=(Berkeley) is not present in table "cities".

外部索引鍵的行為可以根據您的應用程式進行精細調整。在本教程中,我們將不超出這個簡單的示例,而是引用 第五章 以獲取更多資訊。正確使用外部索引鍵肯定會提高您的資料庫應用程式的質量,因此強烈建議您瞭解它們。

提交更正

如果您在文件中看到任何不正確、與您對特定功能的經驗不符或需要進一步澄清的內容,請使用 此表單 來報告文件問題。