先確認有安裝 php-pgsql
套件:
sudo apt install php-pgsql
安裝完套件,就可以使用 PDO 來建立連線:
$connection = new PDO( 'pgsql:host=127.0.0.1;port=5432;dbname=postgres', 'postgres', 'password' );
軟體開發、伺服器和生活瑣事
先確認有安裝 php-pgsql
套件:
sudo apt install php-pgsql
安裝完套件,就可以使用 PDO 來建立連線:
$connection = new PDO( 'pgsql:host=127.0.0.1;port=5432;dbname=postgres', 'postgres', 'password' );
遠端連線到 PostgreSQL 時,遇到錯誤訊息:
SCRAM authentication requires libpq version 10 or above
這個問題主要是新舊版本儲存使用者密碼的方法不同所導致的,只要讓 PostgreSQL 支援 MD5 儲存密碼即可。
開啟 postgresql.conf
修改 password_encryption
參數:
password_encryption = md5
再來修改 pg_hba.conf
,讓使用者驗證的時候使用 MD5 方式驗證:
# IPv4 local connections: host all all 127.0.0.1/32 scram-sha-256 host all zeroplex 0.0.0.0/0 md5
設定檔修改後記得重新啟動 PostgreSQL。
設定檔改好、啟動也沒問題,就來更新使用者密碼,這樣一來,PostgreSQL 的密碼儲存方式就會改用 MD5:
ALTER USER zeroplex WITH PASSWORD 'your-password'
PostgreSQL 的使用者權限管理和 MySQL 差很多,花了好一陣子才搞懂。
一開始操作都必須使用 postgres
的使用者身份來操作,所以都會需要 sudo
:
# 建立預備要給予 admin 權限的帳號 # 如果不想要 sudo 則設定成 Linux 相同帳號名稱 sudo -u postgres createuser zeroplex
再來是要幫上面新增的使用者設定 role
,這邊需要進入 PostgreSQL 的 console 中下指令:
sudo -u postgres psql psql (14.2) Type "help" for help. -- 透過 \du 來列出現有的使用者與角色 postgres=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+------------ postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} zeroplex | | {}
從上表的內容,可以看出剛剛新增的帳號什麼權限都沒有,但是預設帳號 postgres
擁有 Superuser
的權限。
若要建立的帳號擁有 admin 權限 (在 PostgreSQL 中叫做 superuser
),則須透過 alter user
來授予權限:
postgres=# alter user zeroplex with superuser; ALTER ROLE -- 再次列出使用者與其角色 (role) postgres=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+------------ postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} zeroplex | Superuser | {}
除了 superuser
以外,還有其他不同權限的角色可以指派,請參考 PostgreSQL alter user 的說明。
接著就可以不用 sudo
直接下 PostgreSQL 管理相關指令:
$ createdb test
注意:使用者如果擁有 superuser
權限以後,下管理相關指令是不需要 sudo
的,因此必須承擔意外造成的風險。個人建議還是切換成 sudo -u postgres
以後在進行操作比較保險。
以前找資料的時候都是英文文件,現在意外發現已經有社群建立繁體中文的文件,這樣查資料速度會快一些。
PostgresSQL 官方文件實在缺東缺西,只好找第三方教學文件來看了: