PostgreSQL 概述

2021-08-31 15:26 更新

少量的對象,例如角色、數(shù)據(jù)庫和表空間名,是在集群級別定義并存儲在pg_global表空間之中的。 集群內(nèi)部有多個數(shù)據(jù)庫,相互之間彼此隔離,但可以訪問集群級對象。 每個數(shù)據(jù)庫內(nèi)部都有多個模式,它們包含表和函數(shù)等對象。因此,完整的層級結(jié)構為:集群、數(shù)據(jù)庫、模式、表(或一些其他類型的對象,如函數(shù))。

當連接到數(shù)據(jù)庫服務器時,客戶端必須在它的連接請求中指定數(shù)據(jù)庫名稱。每個連接不可能訪問多于一個數(shù)據(jù)庫。 但是,客戶端可以對同一個數(shù)據(jù)庫打開多個連接,或可以打開不同的數(shù)據(jù)庫。 數(shù)據(jù)庫級別的安全有兩個組成部分:訪問控制(參見第 20.1 節(jié)),在連接級進行管理,還有授權控制(參見第 5.7 節(jié)),通過授權系統(tǒng)進行管理。 外部數(shù)據(jù)包裝器(參見postgres_fdw)允許一個數(shù)據(jù)庫中的對象作為其他數(shù)據(jù)庫或集群中的對象的代理。 舊的dblink模塊(參見dblink)提供了類似的功能。默認情況下,所有用戶可以使用所有連接方法連接所有的數(shù)據(jù)庫。

如果一個PostgreSQL服務器集群計劃包含不相關的項目或用戶,在很大程度上,彼此之間是不知道的,那么建議將它們放到單獨的數(shù)據(jù)庫中,并且調(diào)整相應的授權和訪問控制。 如果項目或用戶是相互關聯(lián)的,因此應該能夠互相使用彼此的資源,它們講被放在同一個數(shù)據(jù)庫中,但可能被放入相互獨立的模式中; 這提供了具有名稱空間隔離和授權控制的模塊化結(jié)構。關于模式管理的更多信息在第 5.9 節(jié)中。

雖然可以在單個集群中創(chuàng)建多個數(shù)據(jù)庫,但建議仔細考慮好處是否大于風險和限制。 特別是,共享WAL(參見第 29 章)對備份和恢復選項的影響。從用戶的角度來看,集群中的各個數(shù)據(jù)庫是隔離的,但從數(shù)據(jù)庫管理員的角度來看,它們是緊密綁定的。

數(shù)據(jù)庫是使用CREATE DATABASE(見第 22.2 節(jié)),并且用DROP DATABASE命令刪除(見第 22.5 節(jié))。要確定現(xiàn)有數(shù)據(jù)庫的集合,可以檢查系統(tǒng)目錄 pg_database,例如

SELECT datname FROM pg_database;

psql程序的\l元命令和-l命令行選項也可以用來列出已有的數(shù)據(jù)庫。

注意

SQL標準把數(shù)據(jù)庫稱作目錄,不過實際上沒有區(qū)別。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號