1. PostgreSQL简介
PostgreSQL is a powerful, open source object-relational database system with over 30 years of active development that has earned it a strong reputation for reliability, feature robustness, and performance.
本文中,我们会学习PostgreSQL的安装和使用方法。
参考文档:
2. 安装pg
2.1. Docker安装Postgres
1、登录dockerhub查看需要的postgres版本。
2、下载postgres镜像(以postgres12.2为例)
1 | docker pull postgres:12.2 |
3、启动postgres服务
1 | docker run --name vk-pg -d \ |
以上命令:
- 命名容器为vk-pg,后台运行
- 映射宿主机5432端口到容器5432端口
- 设置pg数据库密码和数据存放目录
- 映射宿主机/opt/postgresql/data目录(不需要提前创建目录)到容器/var/lib/postgresql/data目录
更高级的启动命令参考How to use this image。
4、验证安装
1 | docker ps |
postgres启动正常的话就可以看到vk-pg容器。
如果启动失败,可以使用docker logs vk-pg
查看失败原因并进行解决。
使用nc命令验证:
1 | yum install nc |
5、登录postgres
1 | docker exec -it vk-pg /bin/bash |
直接能登录进去,不需要密码。这是因为,pg镜像在本地设置了信任身份验证,因此从容器内连接时不需要密码。
但是,如果从其他主机/容器进行连接,则需要输入密码。
比如在宿主机(系统为centos7)上登录postgres:
1 | yum list | grep postgresql |
这次必须输入正确的密码才能登录。
以上,postgres安装配置完成。
2.2. K8S安装Postgres
参考文档:PostgreSQL packaged by Bitnami
1、添加helm chart仓库
1 | helm repo add bitnami https://charts.bitnami.com/bitnami |
2、获取postgres chart
这里选择chart版本11.6.6,对应app版本14.3.0
1 | helm search repo bitnami/postgresql -l |
3、values.yaml 修改配置
- global.storageClass 修改为期望的 storageclass
- global.postgresql.auth.postgresPassword 修改admin用户的密码(覆盖auth.postgresPassword)
- global.postgresql.auth.username 自定义用户名(覆盖auth.username)
- global.postgresql.auth.password 自定义用户密码(覆盖auth.password)
- global.postgresql.auth.database 自定义数据库(覆盖auth.database)
4、安装postgres
1 | helm install postgres ./postgresql \ |
5、查看安装
1 | kubectl get all -n postgres |
3. Postgres启动报错问题
3.1. 问题描述
使用bitnami chart安装的postgres,pod重建后无法启动,一直重启,看日志报错:
1 | LOG: database system was interrupted; last known up at xxxx-xx-xx xx:xx:xx GMT |
3.2. 解决办法
修改探活,增加 initialDelaySeconds 或者增加 failureThreshold 。
问题原因:如果服务器突然停止,或者突然失去对文件系统的访问权限,那么内存中的所有内容都会丢失,下次启动它时,它需要重新播放日志,以使表恢复到正确的状态(这可能需要相当长的时间,具体取决于自上次检查点以来发生了多少)。在完成之前,任何使用服务器的尝试都将导致 FATAL: the database system is starting up
参考文档:Postgresql fatal the database system is starting up - windows 10
4. Harbor中的Postgres
1、进入postgres容器
1 | docker exec -it harbor-db /bin/bash |
2、登录postgres
1 | psql -U postgres -h postgresql -p 5432 |
默认密码为 root123 ,实际密码查看harbor.yml中的配置。
3、查看帮助
1 | \help |
4、查看数据库,切换数据库,查看表
1 | \l |
5、查看表结构
1 | \d registry; |
6、查看表数据
1 | select * from registry; |
可以看到,查看表数据的方法和mysql完全相同。
实际上,postgres支持标准的sql语法,因此增删查改的语法可以参考《MySQL常用命令》即可。