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

22.1. 概覽 #

少數物件,如角色、資料庫和表空間名稱,是在叢集級別定義的,並存儲在 pg_global 表空間中。叢集內部有多個數據庫,它們彼此隔離,但可以訪問叢集級別的物件。每個資料庫內部都有多個模式(schema),其中包含表和函式等物件。因此,完整的層級結構是:叢集、資料庫、模式、表(或其他型別的物件,如函式)。

連線到資料庫伺服器時,客戶端必須在其連線請求中指定資料庫名稱。每個連線不能訪問多個數據庫。但是,客戶端可以開啟到同一資料庫或不同資料庫的多個連線。資料庫級別的安全性有兩個組成部分:訪問控制(請參閱 第 20.1 節),在連線級別管理;授權控制(請參閱 第 5.8 節),透過 grant 系統管理。外部資料包裝器(請參閱 postgres_fdw)允許一個數據庫內的物件充當其他資料庫或叢集中物件的代理。舊的 dblink 模組(請參閱 dblink)提供了類似的功能。預設情況下,所有使用者都可以使用所有連線方法連線到所有資料庫。

如果計劃在一個 PostgreSQL 伺服器叢集中包含不相關的專案或使用者,並且這些專案或使用者在很大程度上應該彼此不知曉,則建議將它們放入單獨的資料庫中,並相應地調整授權和訪問控制。如果專案或使用者相互關聯,因此應該能夠使用彼此的資源,則它們應該放在同一個資料庫中,但可能放入單獨的模式中;這提供了模組化的結構,具有名稱空間隔離和授權控制。有關管理模式的更多資訊,請參閱 第 5.10 節

雖然可以在單個叢集中建立多個數據庫,但建議仔細考慮其好處是否大於風險和限制。特別是,擁有共享 WAL(請參閱 第 28 章)對備份和恢復選項的影響。儘管從使用者的角度來看,叢集中的各個資料庫是隔離的,但從資料庫管理員的角度來看,它們是緊密繫結的。

資料庫使用 CREATE DATABASE 命令建立(請參閱 第 22.2 節),並使用 DROP DATABASE 命令銷燬(請參閱 第 22.5 節)。要確定現有資料庫的集合,請檢查 pg_database 系統目錄,例如

SELECT datname FROM pg_database;

psql 程式的 \l 元命令和 -l 命令列選項也有助於列出現有資料庫。

注意

SQL標準稱資料庫為“目錄”(catalogs),但實際上沒有區別。

提交更正

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