在 Ubuntu 安裝 PostgreSQL 資料庫
確認條件
pdo_pgsql
版本
確認 PHP 支持的 通過輸出 phpinfo() 函數,查看 PHP 對應的 pdo_pgsql 的版本,
建議下載的 PostgreSQL 與 pdo_pgsql 版本不要相差太多
![[pdo_pgsql_version.jpg]]
PostgreSQL 版本大於 10 的話,則 pdo_pgsql 版本也必須大於 10 。
scram-sha-256 是 PostgreSQL 10 中新增的基於 SASL 的認證方式,是 PostgreSQL 目前提供的最安全的認證方式。使用 scram-sha-256 認證方式不支持舊版本的客戶端庫。如果使用 PostgreSQL 10 以前的客戶端庫連接數據庫,會有如下錯誤:
SCRAM authentication requires libpq version 10 or above
安裝 PostgreSQL
安裝指令
# 建立軟體庫設定文件:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
# 匯入軟體庫簽名密鑰:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# 更新軟體列表:
sudo apt-get update
# 安裝最新版本的PostgreSQL
sudo apt-get install postgresql
# 可供安裝特定版本的PostgreSQL
sudo apt-cache pkgnames postgresql
# 安裝特定版本的PostgreSQL
sudo apt-get install postgresql-14
實際指令以及對應版本可參考PostgreSQL官方安裝教學
測試安裝是否成功
sudo psql --version
安裝 pgAdmin 4 (可選)
[[install_ubuntu_pgAdmin4]]
觀念預備
[[guide_PostgreSQL]]
初次設定
以超級使用者身分使用預設的角色 postgres
sudo su - postgres
通常postgres
用戶只會在本地被使用。
進入psql 互動式終端機
psql
變更管理員密碼
確認該版本的加密方式
SHOW password_encryption;
舊版為md5
,新版為scram-sha-256
,如果要變更設定可到/etc/postgresql/14/main/postgresql.conf
調整password_encryption
20.3. 連線與認證
初始不用密碼就可以進入伺服器了,所以建議先改個密碼。
ALTER USER postgres PASSWORD 'password';
ALTER USER — 變更資料庫角色屬性
以普通使用者連線伺服器
psql -h localhost -U postgres
如果看到下圖就是成功了
![[postgres_password.jpg]]
建立角色
進入psql 互動式終端機
psql
建立可登入的用戶
# 使用別名並設定密碼
CREATE USER name WITH PASSWORD '********';
# 或使用新增角色指令並加入 LOGIN 參數
CREATE ROLE name WITH LOGIN PASSWORD '********';
CREATE USER 現在是 CREATE ROLE 的別名指令。唯一的區別是當命令為 CREATE USER 時,預設情況下是具有 LOGIN 權限的,而當命令為 CREATE ROLE 時則預設為 NOLOGIN。
具有 LOGIN 屬性的角色可以被認為是一個使用者。沒有此屬性的角色對於管理資料庫權限很有用,但不是一般認知上的使用者。
CREATE ROLE — 定義一個新的資料庫角色
CREATE USER — 定義一個新的資料庫角色
設定用戶管理資料庫權限
賦予角色建立其他角色和新資料庫的能力
ALTER USER user CREATEROLE CREATEDB;
ALTER USER — 變更資料庫角色屬性
ALTER ROLE — 變更資料庫角色
列出用戶列表檢查是否修改成功
postgres-# \du+
之後用 pgAdmin管理工具來設定其他使用者權限比較方便
設定遠端連線
修改設定文件
預設情況下,PostgreSQL 伺服器只監聽本機位址:127.0.0.1。
為了允許遠端連線
打開設定文件/etc/postgresql/14/main/postgresql.conf
並且在CONNECTIONS AND AUTHENTICATION
一節添加 listen_addresses = '*'
後存檔。
設定伺服器接受遠端連線
開啟 /etc/postgresql/14/main/pg_hba.conf
設定允許的連接方式
例如直接全開並使用 scram-sha-256 加密方式做驗證
# TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 scram-sha-256
實際在正式環境詳細設定請參照官方的文件
21.1. 設定檔:pg_hba.conf
重新啟動服務
sudo service postgresql restart
系統可用指令
查看執行狀態
sudo systemctl status postgresql
查看資料庫版本
sudo psql --version
以超級使用者身分使用 postgres
sudo su - postgres
使用後帳號名稱會變postgres,表示成功進入伺服器
postgres@computer-name:~$
psql — PostgreSQL 互動式終端機
postgres@computer-name:~$ psql
資料庫可用指令
顯示伺服器的版本號碼
SHOW SERVER_ENCODING;
查看用戶列表
postgres-# \du+
查看資料庫列表
postgres-# \l+
離開 psql 終端
exit;
參考資料
PostgreSQL官方安裝教學
pgAdmin官方安裝教學
PostgreSQL 14.7 Documentation
PostgreSQL正體中文使用手冊
https://learnku.com/articles/67688
Ubuntu-22.04安装Postgresql