跳至主要內容

在 Ubuntu 安裝 PostgreSQL 資料庫

Pamis Wang大约 4 分鐘資料庫PostgreSQLPostgreSQL 14UbuntuUbuntu 22.04

確認條件

確認 PHP 支持的 pdo_pgsql 版本

通過輸出 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官方安裝教學open in new window

測試安裝是否成功

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. 連線與認證open in new window

初始不用密碼就可以進入伺服器了,所以建議先改個密碼。

ALTER USER postgres PASSWORD 'password';

ALTER USER — 變更資料庫角色屬性open in new window
以普通使用者連線伺服器

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 — 定義一個新的資料庫角色open in new window
CREATE USER — 定義一個新的資料庫角色open in new window

設定用戶管理資料庫權限

賦予角色建立其他角色和新資料庫的能力

ALTER USER user CREATEROLE CREATEDB;

ALTER USER — 變更資料庫角色屬性open in new window
ALTER ROLE — 變更資料庫角色open in new window

列出用戶列表檢查是否修改成功

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.confopen in new window

重新啟動服務

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;

SHOW — 顯示執行時期參數的值open in new window

查看用戶列表

postgres-# \du+

查看資料庫列表

postgres-# \l+

離開 psql 終端

exit;

參考資料

PostgreSQL官方安裝教學open in new window
pgAdmin官方安裝教學open in new window
PostgreSQL 14.7 Documentationopen in new window
PostgreSQL正體中文使用手冊open in new window
https://learnku.com/articles/67688open in new window
Ubuntu-22.04安装Postgresqlopen in new window

常見問題

could not change directory to "/root": Permission deniedopen in new window

上次編輯於:
貢獻者: pamis