概要
如何快速的在本机启动postgreSQL?
技术细节
1. 准备宿主机存储路径
mkdir -p /data1/postgresql12
chown -R 1001:1001 /data1/postgresql12
bitnami 提供的postgresql镜像中,有一个postgres用户要在该创建data目录,需要给一下权限
进入镜像:cat /etc/passwd
postgres: x:1000:1000::/home/postgres:/bin/sh
避免下面的报错
postgresql 06:39:19.64 WARN ==> Lack of permissions on data directory!
chmod: changing permissions of ‘/bitnami/postgresql/data’: Operation not permitt
2. docker 启动脚本
docker run -d --restart=always --name postgres -v /data1/postgresql12:/bitnami/postgresql -e POSTGRES_PASSWORD=Aa@123 -p 5000:5432 postgresql:12.8.0
-d :守护进程,后台运行该容器
--restart=always :开机自启动
--name postgres:容器的名称
-v :目录映射,容器目录挂载到宿主机目录,格式: <宿主机目录>:<容器目录>
-e :设置启动环境变量
-p :启动的端口号, 宿主机端口:容器内服务的端口
访问地址:服务器IP:5000 (端口可以根据自己的需要修改)
账号/密码:postgres/Aa@123
3. docker 相关的命令
# 在公共仓库中下载
docker pull bitnami/postgresql:12.8.0
# 查看镜像
docker images |grep postgresql
# 打tag推送到本地仓库
docker tag postgresql:12.8.0 docker.公司域名.com/library/postgresql:12.8.0
# 推送到本地仓库
docker push docker.公司域名com/library/postgresql:12.8.0
# 镜像导出,在没有网络的情况下转移
docker save postgresql:12.8.0 > postgresql-12.8.0.tar
# 镜像加载
docker load < postgresql-12.8.0.tar
# 查询服务的ID
docker ps |grep postgresql 运行中的容器
docker ps -a |grep postgresql 全部的容器
#根据id查 日志
docker logs -f f8911198f0d3 --tail=100
# 查看该镜像的元信息
docker inspect f8911198f0d3
# 重启镜像服务
docker restart f8911198f0d3
# 停止镜像服务
docker stop f8911198f0d3
#启动镜像服务
docker stop f8911198f0d3
#删除镜像服务
docker rm f8911198f0d3
#删除镜像
docker rmi postgresql:12.8.0
#进入容器
docker exec -it f8911198f0d3 bash
容器中的数据库目录
cd /bitnami/postgresql/data
宿主机中的的目录
4. PostgreSql 数据相关的命令
# 进入容器
docker exec -it f8911198f0d3 bash
# 进入postgresql客户端
psql -h localhost -U postgres -p 5432
#查看所有数据库
\l
# 创建数据库
create database 数据库名字(cp_user);
#进入某个数据库
\c 数据库名字(cp_user)
# 创建表
drop table if exists "public"."t_user";
create table "public"."t_user" (
"id" int4 not null,
"name" varchar(255) collate "pg_catalog"."default"
);
comment on column "public"."t_user"."id" is '编号';
comment on column "public"."t_user"."name" is '名称';
alter table "public"."t_user" add constraint "t_user_pkey" primary key ("id");
# 查看数据库中的表
\dt 表名 : user
# 插入数据
insert into "public"."t_user"("id", "name") values (1001, 'lisa');
insert into "public"."t_user"("id", "name") values (1002, 'jack');
#查看某个表的所有数据
select * from 表名
select * from t_user;
如果表名是user,因user是保留此,查询需要 select * from public.user;
# 修改某条数据
update "public"."t_user" set "name" = 'jack' where "id" = 1002;
# 删除某条数据
delete from t_user where id =1001
# 添加字段
alter table t_user add age varchar(32);
# 修改字段的注释
comment on column t_user.age is '年龄';
# 导出数据库
pg_dump -U 用户名 数据库名 > 导出文件名
# 导入数据库
psql -U 用户名 数据库名 < 导入文件名 :
#退出数据库
\q 或 ctrl + z
# 查询特定模式下的所有表名
select tablename from pg_tables where schemaname = 'public'`
# 备份数据库。
使用命令`pg_dump -U 'username' -p 'port number' -d 'database' > 'dump file name'`
5. 扩展知识-用户组描述
用户账户的信息存放在/etc/passwd文件中;
超级用户root(0)
程序用户(1~499)
普通用户(500~65535)
用户名 密码 uid gid 用户说明 家目录 shell解释器
python : x : 1001 : 1001 : : /home /python : /bin/sh