浅析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 文件。

原文地址:https://www.cnblogs.com/goloving/p/15092391.html