一、首先准备pg数据库的docker镜像
![](https://img-blog.csdnimg.cn/img_convert/5d42a72b0763f85d5319a3310a73ba5f.png)
二、先创建一个文件作为pg数据库数据文件、配置文件等的外部挂载文件
![](https://img-blog.csdnimg.cn/img_convert/9fa5cc71361c9a9057b2299403f69c07.png)
三、创建镜像
docker run -it -d --name postgres14 --restart=always --privileged=true -p 5432:5432 -e POSTGRES_PASSWORD=postgres -v /home/fengyang/pg_data:/var/lib/postgresql 9f3ec01f884d
![](https://img-blog.csdnimg.cn/img_convert/09563026fb8501c7344f8ea0a0a4c248.png)
这样就创建好容器了,先看一下我们挂载的目录,已经有了一个data目录
![](https://img-blog.csdnimg.cn/img_convert/be2577f33bf9042148f72ab20ec1209d.png)
参数解释:
-p:端口映射,物理机的5432端口映射到容器内部5432端口
-e:设置密码,就是登录数据库的密码(这里要注意两点,一是设置密码时候,不用加引号,二是postgre数据库有一个默认用户名就是postgres)
-v:文件挂载,把容器内的文件挂载到容器外,这样需要修改东西的话就不用再进入到容器里了
--restart=always:开机自启
--privileged=true: 给自己容器内部一些操作的权限,其实这里并不需要,只是个人习惯
三、开始操作数据库
进入容器内部:
![](https://img-blog.csdnimg.cn/img_convert/8e9a2bbc8b14602cd9bcc12353efdbe9.png)
进入数据库:psql -U 用户名 数据库(这里的数据库可以省略,不写默认进入postgres库) -W 按回车输入密码,密码就是创建容器时候,-e设置的
![](https://img-blog.csdnimg.cn/img_convert/1a922f077b8fb5148bc4fd3e54c680c9.png)
四、数据库基本操作
创建数据库:create database 数据库名;
![](https://img-blog.csdnimg.cn/img_convert/6c95339d528b0c66ea3b5205589663a6.png)
查看所有数据库:SELECT * FROM pg_database ORDER BY datname
![](https://img-blog.csdnimg.cn/img_convert/f02c3a36dc2f40344f8344ee35bb4f89.png)
进入数据库:\c 数据库; 密码同理是创建容器时 -e 设置的。
![](https://img-blog.csdnimg.cn/img_convert/1be5a642282995800684748fd771a9bd.png)
创建用户: create user 用户名 with password '密码';
![](https://img-blog.csdnimg.cn/img_convert/1eb251195434c61568d3a26757d246e1.png)
查看所有用户: SELECT * FROM pg_roles;
![](https://img-blog.csdnimg.cn/img_convert/943bb611f2af1fcd419f66c8b0750f39.png)
创建模块: create schema 模块名;
![](https://img-blog.csdnimg.cn/img_convert/3dafa95a5a80f3e36205f3f0fe8dd144.png)
查看所有模块: SELECT * FROM information_schema.schemata;
![](https://img-blog.csdnimg.cn/img_convert/1d141259ef08776244caff8230321f01.png)
给操作某模块的用户赋权限:GRANT ALL PRIVILEGES ON schema 模块名 TO 用户;
![](https://img-blog.csdnimg.cn/img_convert/e3abb09d1a7a97d0de59fecbe1c3bb4f.png)
通过备份文件导入数据:
1) exit; 退出数据库
2)docker cp将备份文件复制到容器中
3)pg_restore -d 数据库 -U 用户名 备份文件; 导入备份文件(注意 如果这里不写-U 用户名 会默认到root用户名下,一般容易报错)。