淺析docker安裝postgresql的基本使用及解決pg_dump導出數據庫報錯Command pg_dump not found的問題


一、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 文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM