基本操作
https://www.postgresguide.com/ https://docs.postgresql.tw/reference/sql-commands/drop-database
登入數據庫
PostgreSQL 提供了在命令行底下運行的數據庫工具 psql,我們可以通過 psql 命令執行內部管理數據庫,也可以執行 SQL,做用戶管理增刪查改等操作。
# 指定用戶連接 PostgreSQL
psql -U postgres
# 指定數據庫連接 PostgreSQL
psql -d postgres
# 參數參考
psql -h 127.0.0.1 -p 5432 -U ken -d postgres
常用 psql 命令
# 資料表相關 列出所有 table
\z [pattern]
# 查看所有用户 roles
\du
# 查看所有數據庫
\l
# 切換當前數據庫
\c {dbname}
# 查看當前庫下所有表
\dt
# 查看指定表
\d {tablename}
# 查看數據目錄
SHOW data_directory;
# 查詢用法
\h create table
# 取得當前資料夾名稱
\! pwd
# 退出 psql
\q
# 帳號相關
\password [ username ]
# 設定環境變數
\set foo bar # 將 foo 設為 bar
\echo :foo # 取得 foo 的變數值
常用 SQL 命令
# 創建數據庫
CREATE DATABASE test;
# 創建表(記得使用 \c 命令切換數據庫)
CREATE TABLE t1(id int,body varchar(100));
# 創建用戶
CREATE USER test WITH PASSWORD 'Test#1357';
# 修改密碼
ALTER USER test WITH PASSWORD 'Test#2468';
# 指定用戶添加指定角色
ALTER USER test createdb;
# 賦予指定帳戶指定數據庫所有權限
GRANT ALL PRIVILEGES ON DATABASE test TO test;
# 移除指定帳戶指定數據庫所有權限
REVOKE ALL PRIVILEGES ON DATABASE test TO test;
遠程訪問 PostgreSQL
帳戶與數據目錄
# 切換帳戶(圖形化介面安裝需要此步驟)
su postgres
# 進入PostgreSQL數據目錄(brew)
cd /opt/homebrew/var/postgresql@15/
# 進入PostgreSQL數據目錄(dmg)
cd /Library/PostgreSQL/15/data/
修改監聽地址
# 修改 postgresql.conf
vi postgresql.conf
# 修改監聽地址
listen_addresses= '*'
# 查看配置情況
cat postgresql.conf | grep "listen_addresses"
放開客戶端限制
# 修改 pg_hba.conf
vi pg_hba.conf
# 追加配置(md5指定加密方式,也可以選擇 scram-sha-256 等)
host all all 0.0.0.0/0 md5
# 查看配置情況
cat pg_hba.conf | grep "host"
重啟 PostgreSQL 服務
# 重啟服務(brew安裝)
brew services restart postgresql@15
# 重啟服務(dmg安裝,通過-D指定數據目錄)
pg_ctl restart -D /Library/PostgreSQL/15/data
備份還原數據庫
https://axiomq.com/blog/backup-and-restore-a-postgresql-database/
# 將資料庫的內容 dump 下來(備份)
pg_dump \
-U pjchender \
-h pjchender.us-west-2.rds.amazonaws.com \
-p 5432 pjchender-prod > pjchender-prod-dump
# 將 dump 下來的檔案灌入資料庫(還原)
psql test < pjchender-prod-dump
終止卡住的 PSQL 連線
https://ravenonhill.blogspot.com/2017/04/postgres-hanging-query.html
SELECT pg_terminate_backend(pid)
FROM from pg_stat_activity
WHERE state = 'idle';
檢視錯誤訊息 log
# Mac
$ cat /usr/local/var/log/postgres.log
終止 process
如果電腦操作到一半當機,可能會導致 PID 卡住,可以到該資料夾把檔案刪除.
cd /usr/local/var/postgres
rm postmaster.pid
建立使用者和 db
直接在 Terminal 使用關鍵字 createuser 建立使用者;使用關鍵字 createdb 建立 database。
# createuser -- define a new PostgreSQL user account
createuser apollo
###
# createdb -- create a new PostgreSQL database
# -O: 指定 db 的使用者
# -E: 指定編碼
###
createdb <database-name> -O apollo -E utf8
dropdb <database-name>
建立 database cluster
透過關鍵字 initdb 可以建立新的 PostgreSQL database cluster。 database cluster 是 databases 的集合。 接著就可以透過 Postico 連接到 PostgreSQL。
initdb /usr/local/var/postgres -E utf8