少數的物件,像是角色、資料庫和表格空間名稱,定義在叢集層級,並儲存在 pg_global
表格空間中。叢集內部包含多個資料庫,彼此隔離,但可以存取叢集層級的物件。每個資料庫內部包含多個綱要,其中包含像是表格和函數的物件。因此完整的階層是:叢集、資料庫、綱要、表格(或某些其他種類的物件,例如函數)。
當連線到資料庫伺服器時,用戶端必須在其連線請求中指定資料庫名稱。每個連線無法存取多個資料庫。然而,用戶端可以開啟多個連線到同一個資料庫,或不同的資料庫。資料庫層級的安全性有兩個組成部分:存取控制(請參閱第 20.1 節),在連線層級進行管理,以及授權控制(請參閱第 5.8 節),透過授權系統進行管理。外部資料包裝器(請參閱 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
meta-command 和 -l
命令列選項也可用於列出現有的資料庫。
這個SQL標準將資料庫稱為“catalogs(目錄)”,但在實務上沒有區別。
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步說明的內容,請使用此表單回報文件問題。