| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 5. 資料定義 | Fast Forward | Next |
如果您建立了一個包含許多資料表,並且帶有外鍵約束,視圖, 觸發器,函數等等的複雜資料庫結構。那麼您就會在對像 之間隱含地建立了一個依賴性的網絡。比如,一個帶有外鍵 約束的資料表依賴於它引用的資料表。
為了保證整個資料庫結構的完整性,PostgreSQL 保證 您無法刪除那些還有其它對像依賴的對象。比如,試圖刪除我們在 Section 5.4.5 裡考慮的產品資料表,這個時候 訂單資料表仍然依賴它,這樣的刪除動作是不能成功的,會有類似下面的錯誤訊息出現:
DROP TABLE products;
NOTICE: constraint orders_product_no_fkey on table orders depends on table products
ERROR: Cannot drop table products because other objects depend on it
Use DROP ... CASCADE to drop the dependent objects too這個錯誤訊息包含一個有用的提示:如果您不想惹來分別刪除所有 依賴對象的麻煩,您可以執行
DROP TABLE products CASCADE;
然後所有被依賴的對象都將被刪除。在這種情況下, 它並不刪除訂單資料表,它只刪除外鍵約束。(如果您想檢查 DROP ... CASCADE 會幹什麼,執行不帶 CASCADE 的 DROP然後閱讀 NOTICE 訊息。)
PostgreSQL 裡的所有刪除命令都 支援聲明 CASCADE。當然,具體的依賴性實體 取決於對象的類型。您也可以寫 RESTRICT,而 不是 CASCADE,以獲取預設的行為, 這個時候限制於刪除那些其它對像依賴的對象。
注意: 根據 SQL 標準,要求至少聲明 RESTRICT 或者 CASCADE 中的一個。 實際上沒有哪種資料庫系統是這麼實現的,但是預設的行為是 RESTRICT 還是 CASCADE 則因系統而異。
注意: 在 PostgreSQL 7.3 之前的外鍵約束依賴性和序列字串依賴性 在升級過程中都不會得到維護或者建立。所有其它的依賴性類型 在升級過程中都將得到恰當的建立。