# 我所理解的 PostgreSQL 01: 釐清 Database Cluster 與 pgAdmin 的常見誤解 {%hackmd @moment89/tXJIcGqmSI6_fJQp2hnJUA %} ## Database Cluster? 和 Database 的關係? 看到 Cluster 這個字眼可能會直覺想到是指分散式資料庫? 是指有很多個 PostgreSQL Server 組成的分散式服務? ❌不是 節選自[官方文檔 18.2 節](https://www.postgresql.org/docs/current/creating-cluster.html) > Before you can do anything, you must initialize a database storage area on disk. We call this a database cluster. (The SQL standard uses the term catalog cluster.) A database cluster is a collection of databases that is managed by a single instance of a running database server. Database Cluster 在 PostgreSQL 的定義是指指由單個 PostgreSQL Server Instance 管理的 Database 集合,這些 Database 會使用相同的配置文件、Port、Process 與 Memory 結構,就可以稱為一個 Database Cluster。 一般我們安裝 PostgreSQL,預設就會在本機的 5432 Port 上運作一個 PostgreSQL Server Instance,這個服務上除了原生自帶的 postgres 資料庫,還能建立多個其他的資料庫,故這個服務就是一個 Database Cluster。 ### 那一個環境可以有多個 Database Cluster 嗎? ✅可以 安裝過 PostgreSQL 後,我們電腦內就有了 PostgreSQL 的功能 (在安裝路徑下的 bin 資料夾內),我們可以參考剛剛貼的那份官方文檔,使用 PostgreSQL 的 initdb 功能建立一個新的 PostgreSQL Server Instance,並可以將該實例的啟動指令註冊成 Windows 服務,方便管理。 但要注意的是,一個 Port 上只能有一個 PostgreSQL Server Instance,不能同時運作兩個,也就是說新建的 PostgreSQL Server Instance 要記得去 Config 檔修改成其他 Port (ex. 改成 5433) 才能運作喔! ### 結論 Database Cluster 並不是分散式架構,而是單一 PostgreSQL Server Instance 所管理的多個 Database 集合。 ![image](https://hackmd.io/_uploads/HJEAOYkwle.png) ## pgAdmin 就是 PostgreSQL 嗎? 原生的 PostgreSQL 是一個單純的資料庫服務,需要透過 Terminal 以 psql 功能連線到資料庫內進行操作。 ![image](https://hackmd.io/_uploads/B1NDeILPgx.png) pgAdmin 工具是對 PostgreSQL 的操作包裝成 GUI 介面的工具,讓連線資料庫、下 SQL 指令、查看系統狀況等手續變更簡單。 (但 pgAdmin 並不是呼叫 psql 工具來執行 SQL,而是使用 Python 的 psycopg 套件連線並發送 SQL 指令。) 可透過 pgAdmin 可以快速從左側導覽列看到 Database Cluster 下所有 Database 及其下所有物件,而 pgAdmin 可以顯示這些就是因為它在背後直接透過連線資料庫、查詢 PostgreSQL 系統表返回這些資訊並顯示為按鈕。 (這也就是為什麼,當我們透過 pgAdmin 介面連線了 Database Cluster 下某一個 database,想刪除該 database 時會跳錯誤說有使用者正在連線、不可刪除,因為背後就是 pgAdmin 會對資料庫建立連線拿這些顯示用的資訊。) <center class="half"> <img src=https://hackmd.io/_uploads/rkyCgL8Peg.png width="200"/> </center> 也可以透過 pgAdmin 操作資料庫邏輯備份和還原,但這些功能背後調用的是你電腦裡安裝的 PostgreSQL 的 pg_dump、pg_restore 操作備份還原。 <center class="half"> <img src=https://hackmd.io/_uploads/HkDtWIIwlx.png width="200"/> </center> 如果電腦裡有裝 PostgreSQL,但還是用不了 Backup、Restore 功能,那可能是需要手動配置 PostgreSQL 功能執行檔的路徑 (PostgreSQL Binary Path)。 1. 點擊 pgAdmin 左上角進入 Preferences 介面 <center class="half"> <img src=https://hackmd.io/_uploads/Bk56ZLIwge.png width="200"/> </center> 2. 配置 PostgreSQL Binary Path 為 PostgreSQL bin 資料夾的路徑 <center class="half"> <img src=https://hackmd.io/_uploads/HJOIG88wxl.png width="500"/> </center> ### 結論 * pgAdmin 只是一個 GUI 介面工具,將查詢指令包裝成圖形化介面。 * pgAdmin 專門服務於 PostgreSQL,但並不等於 PostgreSQL。