一、docker 安裝 PG 的基本使用
1、查看本地pg鏡像 —— 需要先 pull 下來一個合適版本的 postgressql 鏡像,然后再查看
docker images | grep postgres
2、初始化鏡像 —— 需要先創建數據卷
docker run --name postgres2 -e POSTGRES_PASSWORD=password -p 5432:5432 -v pgdata:/var/lib/postgresql/data -d postgres
-p:端口映射
-v:將數據存到宿主服務器
-e POSTGRES_PASSWORD 密碼(默認用戶名postgres)
-e TZ=PRC時區,中國
-d:后台運行
--name:容器名稱
注意:時區問題 —— 如果在啟動容器時不設置時區,默認為UTC,使用 now() 設置默認值的時候將有時間差。
3、進入鏡像
[root@localhost home]# docker exec -it postgres2 /bin/bash root@72c5af7ed83c:/# ls bin boot dev docker-entrypoint-initdb.d docker-entrypoint.sh etc home lib lib64 media
mnt opt proc root run sbin srv sys tmp usr var
鏡像的data目錄在 /var/lib/postgresql/data
root@72c5af7ed83c:/# cd /var/lib/postgresql/data root@72c5af7ed83c:/var/lib/postgresql/data# ls base pg_dynshmem pg_logical pg_replslot pg_stat pg_tblspc pg_wal postgresql.conf global pg_hba.conf pg_multixact pg_serial pg_stat_tmp pg_twophase pg_xact postmaster.opts pg_commit_ts pg_ident.conf pg_notify pg_snapshots pg_subtrans PG_VERSION postgresql.auto.conf postmaster.pid
4、postgresql 的工具目錄是: /usr/lib/postgresql/11/bin
5、連接數據庫、數據庫操作
$ psql -Upostgres psql (12.2 (Debian 12.2-1.pgdg100+1)) Type "help" for help. postgres=#
// 創建數據庫
postgres=# CREATE DATABASE DB1; CREATE DATABASE postgres=# CREATE DATABASE DB2; CREATE DATABASE // 查看數據庫
postgres=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+------------+------------+----------------------- db1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | db2 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 | template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
| | | | | postgres=CTc/postgres (5 rows) // 切換數據庫
postgres=# \c db1
二、導出數據庫進行備份遷移報錯 Command pg_dump not found 的問題
我們現在需要導出數據庫的數據庫表,由於服務器上沒有安裝 pg_dump 命令,使用 pg_dump 時就會報錯:Command pg_dump not found,有 2 種方式去解決。一種是安裝 pg_dump ,需要安裝 pg 的客服端啥的,還需要注意版本,會麻煩一點;另一種就是可以直接在容器里操作。
1、進入鏡像的data目錄:/var/lib/postgresql/data
這個鏡像的data目錄,我們是利用數據卷掛載在宿主主機上的,也可以宿主主機上的這個目錄 /var/lib/docker/volumes/pgdata/_data ,宿主機的這個目錄和容器的 data 目錄會是同步更新的
那么我們可以在 容器 data 目錄 mkdir sqldata,然后 cd sqldata
2、進入 sqldata 目錄,執行 pg_dump 命令
容器內部:pg_dump -U root -s -f dump.sql edu
服務器上:pg_dump -h 127.0.0.1 -p 5432 -U root -s -f dump.sql edu
需要注意的是服務器上得指定 -h 及 -p
兩種導出的 dump.sql 是一樣的。
3、在容器內執行 pg_dump -U root -s -f dump.sql edu,之后我們可以看到 sqldata 目錄里生成一個 dump.sql 文件;退出容器,我們進入數據卷目錄,也可以看到 sqldata 目錄及里面的 dump.sql 文件。