【趙渝強老師】PostgreSQL的資料庫

赵渝强老师發表於2024-11-28

PostgreSQL的邏輯儲存結構主要是指資料庫中的各種資料庫物件,包括:資料庫叢集、資料庫、表、索引、檢視等等。所有資料庫物件都有各自的物件識別符號oid(object identifiers),它是一個無符號的四位元組整數,相關物件的oid都存放在相關的系統目錄表中,比如資料庫的oid和表的oid分別存放在pg_database,pg_class表中。下圖展示了PostgreSQL資料庫的邏輯儲存結構。

image.png

下面重點介紹一下PostgreSQL中的資料庫。影片講解如下:
https://www.bilibili.com/video/BV1RfpRehEbA/?aid=112976749200...

在PostgreSQL中,一個資料庫是資料庫物件的集合。通常每個資料庫物件屬於並且只屬於一個資料庫。更準確地說,一個資料庫是一個模式的集合,而模式包含表、函式等等各種資料庫物件。因此資料庫的完整層次應該包含如下組成部分:資料庫伺服器、資料庫、模式、表或者某些其他物件型別,如儲存過程、儲存函式等等。當連線到資料庫伺服器時,客戶端必須在它的連線請求中指定它要連線的資料庫名,透過資料庫例項來運算元據庫中的物件。使用者可能是在同一個資料庫裡,但可能在不同的模式中。

執行下面的語句可以檢視當前PostgreSQL資料庫叢集中已有的資料庫資訊。

postgres=# \l
           List of databases
   Name    |  Owner   | Encoding |......
-----------+----------+----------+-------
 postgres  | postgres | UTF8     |......
 template0 | postgres | UTF8     |......
 template1 | postgres | UTF8     |......
 
(3 rows)

下面詳細解釋一下每個資料庫的作用。

  • postgres資料庫由initdb命令在初始化資料儲存區域時建立的。該資料庫也是客戶端預設連線的資料庫。
  • template0是標準系統資料庫,該資料庫中只包含PostgreSQL版本預定義的標準物件。在資料庫叢集被初始化之後,不應該對template0做任何修改。在建立資料庫時透過指示使用template0取代template1進行複製,可以建立一個“純淨的”使用者資料庫。
  • template1是第二標準系統資料庫。當在PostgreSQL中建立一個新資料庫時,實際上就是克隆了template1。這就意味著對template1所做的任何修改都會體現在所有後續建立的使用者資料庫中。因此應避免在template1中建立物件,除非想把這些物件傳播到每一個新建立的資料庫中。

查詢現有資料庫集合資訊也可以透過查詢系統表pg_database得到。

postgres=# select datname from pg_database;

# 輸出的資訊如下:
  datname  
-----------
 postgres
 template1
 template0
 
(3 rows)

相關文章