一、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 文件。
浅析docker安装postgresql的基本使用及解决pg_dump导出数据库报错Command pg_dump not found的问题