叢集的啟動與管理
💡PostgreSQL的啟動過程相對簡單,只要啟動叢集就等於開啟資料庫。 當你啟動PostgreSQL時,叢集會直接進入運行狀態,並且會自動加載所有必要的數據結構和配置,而不需要經歷像Oracle那樣的多個狀態階段。
初始化新的PostgreSQL
到安裝檔路徑下bin資料夾,開啟終端初始化,所以要創新叢集(以orcl來說就是Instance)的時候就運行來複製一個初始的叢集,在利用conf來控制參數。
.\initdb.exe -D ..\data --username=postgres --auth=trust
初始化新的PostgreSQL-參數設定
以下參數只能在初始化或初始化前決定,無法事後透過conf檔或sql修改。 以下資訊也可以透過PgAdmin4資料庫儀錶板-配置取得。
select name, setting,unit,context,vartype,source from pg_settings order by name;| 參數名稱 | 設定值 | 單位 | Context | 類型 | 來源 | 決定時機 |
|---|---|---|---|---|---|---|
| block_size | 8192 | internal | integer | default | 編譯時決定 | |
| data_checksums | off | internal | bool | default | initdb時決定 | |
| data_directory_mode | 0700 | internal | integer | default | initdb時決定 | |
| debug_assertions | off | internal | bool | default | 編譯時決定 | |
| in_hot_standby | off | internal | bool | default | 運行時狀態 | |
| integer_datetimes | on | internal | bool | default | 編譯時決定 | |
| max_function_args | 100 | internal | integer | default | 編譯時決定 | |
| max_identifier_length | 63 | internal | integer | default | 編譯時決定 | |
| max_index_keys | 32 | internal | integer | default | 編譯時決定 | |
| segment_size | 131072 | 8kB | internal | integer | default | 編譯時決定 |
| server_encoding | UTF8 | internal | string | default | initdb時決定 | |
| server_version | 16.9 (Ubuntu 16.9-0ubuntu0.24.04.1) | internal | string | default | 編譯時決定 | |
| server_version_num | 160009 | internal | integer | default | 編譯時決定 | |
| shared_memory_size | 143 | MB | internal | integer | default | 運行時計算 |
| shared_memory_size_in_huge_pages | 72 | internal | integer | default | 運行時計算 | |
| ssl_library | OpenSSL | internal | string | default | ||
| wal_block_size | 8192 | internal | integer | default | 編譯時決定 | |
| wal_segment_size | 16777216 | B | internal | integer | default | initdb時決定 |
初始化新的PostgreSQL-參數設定(cont.)
🚨block_size必須在postgresql編譯前就修改!!!
初始化新的PostgreSQL-參數設定(cont.)
在pg_settings中:
- internal:編譯時或initdb時決定
- postmaster:需要重啟才能修改
- sighup:可以重新載入設定
- superuser-backend:超級用戶可修改(新連線生效)
- backend:每個連線可修改
- user:一般用戶可修改
啟動PostgreSQL叢集
🚨PostgreSQL Instance的啟動與停止在windows上只能使用pg_ctl,無法藉由其他工具。
.\pg_ctl -D D:\postgresql-版本號-windows-x64-binaries\pgsql\data -l logfile start
若有設定環境參數,則可省略pg_ctl的位置及-D “{datadir}“。
pg_ctl start測試服務狀態
這個指令會顯示資料庫的當前狀態。
.\pg_ctl -D D:\postgresql-版本號-windows-x64-binaries\pgsql\data status關閉PostgreSQL叢集
.\pg_ctl -D D:\postgresql-版本號-windows-x64-binaries\pgsql\data stop這個指令會使用預設的 “fast” 模式來關閉資料庫。你也可以指定不同的關閉模式:
- -m smart:等待所有連線斷開後再關閉。
- -m fast:(預設)立即斷開所有連線並關閉。
- -m immediate:立即關閉,不等待任何操作完成(可能導致資料損壞)。
重載PostgreSQL叢集
對於’sighup’的參數可以用重載的方式重新讀入。
-
使用
pg_reload_conf()SQL 命令:# 已使用psql連線來重讀設定檔 SELECT pg_reload_conf(); -
使用
pg_ctl命令:# 於cmd透過pg_ctl指定DB server重讀設定檔 .\pg_ctl -D D:\postgresql-版本號-windows-x64-binaries\pgsql\data reload
重啟PostgreSQL叢集
對於’postmaster’的參數必須用重啟的方式重新讀入。
.\pg_ctl -D D:\postgresql-版本號-windows-x64-binaries\pgsql\data restart [-m smart|fast|immediate]複習與問題
PostgreSQL Instance架構概述
後面是架構科普,操作看前面就好🙂
叢集(Instance): 在PostgreSQL中,叢集是一個運行中的PostgreSQL伺服器,它管理著一組資料庫。每個叢集可以同時服務多個資料庫,這資料庫之間是完全獨立的。

資料庫(Database): 資料庫之間不共享資料,並且每個資料庫都有自己的綱要(Schema)和對象,如表、索引和視圖等。

綱要(Schema):
在每個資料庫內部,可以有多個綱要,通常會有一個名為public的默認綱要。用戶可以在不同的綱要中創建表和其他對象,以便更好地管理和隔離數據。

Instance啟動過程打開文件順序
也不是很重要因為Cluster的開啟階段並不像ORACLE一樣複雜。
global/pg_controlpg_notify/0000./postgresql.conf./postmaster.opts./pg_xlog/00000001現在是叫pg_wal./pg_hba.conf./global/1137 pg_pltemplate_name_index(接下來就是遍歷global文件…)