本文實踐環境
- macOS Mojave 10.14.6
- docker 19.03.1
- docker-compose 1.24.1
- node 11.10.1
什么是 PostgreSQL ?
PostgreSQL簡稱PG,是一款功能強大且開源免費的關系型數據庫。它支持大部分 SQL 標準并且提供了許多現代特性:
- 復雜查詢
- 外鍵
- 觸發器
- 可更新視圖
- 事務完整性
- 多版本并發控制
同樣,PostgreSQL可以用許多方法擴展,比如, 通過增加新的:
- 數據類型
- 函數
- 操作符
- 聚集函數
- 索引方法
- 過程語言
docker 安裝
在項目根目錄下新建一個 docker-compose.yml 文件:
version: '3'
services:
postgres:
container_name: pg
image: postgres:9.6 # 使用的是 9.6 版本的 pg 數據庫
restart: always
ports:
- '54321:5432' # 把容器的 5432 端口映射到本機的 54321端口
environment:
POSTGRES_PASSWORD: 123456 # 設置 postgres 用戶的默認密碼
volumes:
- ./.docker/postgres-data:/var/lib/postgresql/data # 把數據庫目錄掛載出來
讓pg數據庫服務在后臺運行
$ docker-compose up -d
查詢容器運行情況
$ docker ps
嘗試登錄數據庫
$ docker exec -it ${容器ID} psql -U postgres
什么是 psql ?
psql 是 pg 數據庫中的一個命令行交互式客戶端工具
使用 psql 連接數據庫的方法:
psql -h <hostname or ip> -p <端口> [數據庫名稱] [用戶名稱]
這些連接參數也可以用環境變量指定,比如:
- export PGDATABASE=testdb
- export PGHOST=127.0.0.1
- export PGPORT=5432
- export PGUSER=postgres
psql 的常用命令
psql 的命令都是以斜杠 \
開頭的。
\h
查看幫助信息
\l
查看所有數據庫
\q
退出 psql
\d [ pattern ]
該命令將顯示每個匹配關系(表、視圖、索引、序列)的信息,可以加上 + 查看更多的信息,如 \d+
不加任何參數表示查看當前數據庫的所有表。
\d tablename
后面跟一個表名,表示顯示這個表的結構定義\d indexname
也可以顯示索引的信息,如 \d 索引名稱\d *
后面也可以跟通配符如*
或?
,\d x*
\d+
將顯示比\d
更詳細的信息,還會顯示任何與表關系的注釋,以及表中出現的 OID
\dt
只顯示匹配的表
\di
只顯示索引
\ds
只顯示序列
\dv
只顯示視圖
\df
只顯示函數
\timing on
或\timing off
顯示 SQL 已執行的時間,默認情況下是 off\dn
列出所有的 schema\du
或\dg
列出所有的數據庫用戶和角色\db
顯示所有的表空間,表空間其實是一個目錄,放在這個表空間的表,就是把表的數據文件發到這個表空間下。\dp
或\z
顯示表的權限分配情況\encoding
指定客戶端的字符編碼,如\encoding UTF8;
\pset
設置輸出的格式,\pset border 0 :
表示輸出內容無邊框。border 1 :
表示邊框只在內部。border 2 :
內外都有邊框\x
把表中的每一行的每列數據都拆分為單行展示,與 MySQL 中的\G
的功能類似。\echo
用于輸出一行信息,通常用于在 .sql 文件中輸出一些提示信息。\password
設置密碼\conninfo
列出當前數據庫連接的信息\dx
查看數據庫中安裝的擴展 或select * from pg_extension;
執行存儲在外部文件中的 SQL 命令
\i <文件名>
執行存儲在外部文件中的 sql 語句
當然也可以在 psql 命令行加 -f <filename>
來執行 SQL 腳本文件中的命令,如 psql -f ./test.sql
psql 的使用技巧和注意事項
在啟動 psql 命令后中加 "-E" 參數,就可以把 psql 中各種以 "" 開頭的命令執行的實際 SQL 打印出來,如下
psql -E postgres
,如果想關閉此功能,可以使用\set ECHO_HIDDEN on | off
自動提交方面的技巧
psql 中的事務是自動提交的,可以運行 begin;
然后執行 dml 語句,最后再執行 commit 或 rollback 語句。或 直接使用 psql 中的命令關閉自動提交的功能。\set AUTOCOMMIT off
- 查看數據庫、表、索引大小
select pg_size_pretty(pg_table_size('test'));
select pg_size_pretty(pg_database_size('david'));
select pg_size_pretty(pg_indexes_size('test'));