一个计算机技术爱好者与学习者

0%

PostgreSQL入门篇

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
2
3
4
5
6
docker run --name vk-pg -d \
-p 5432:5432 \
-e POSTGRES_PASSWORD=voidking \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v /opt/postgresql/data:/var/lib/postgresql/data \
postgres:12.2

以上命令:

  • 命名容器为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
2
yum install nc
nc -v localhost 5432

5、登录postgres

1
2
3
docker exec -it vk-pg /bin/bash
$ psql -U postgres
$ psql -U postgres -h localhost -p 5432

直接能登录进去,不需要密码。这是因为,pg镜像在本地设置了信任身份验证,因此从容器内连接时不需要密码。

但是,如果从其他主机/容器进行连接,则需要输入密码。
比如在宿主机(系统为centos7)上登录postgres:

1
2
3
yum list | grep postgresql
yum install postgresql.x86_64
psql -U postgres -h localhost -p 5432

这次必须输入正确的密码才能登录。

以上,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
2
3
4
helm search repo bitnami/postgresql -l
helm pull bitnami/postgresql --version 11.6.6
tar -xzvf postgresql-11.6.6.tgz
vim postgresql/values.yaml

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
2
helm install postgres ./postgresql \
-n postgres --create-namespace

5、查看安装

1
kubectl get all -n postgres

3. Postgres启动报错问题

3.1. 问题描述

使用bitnami chart安装的postgres,pod重建后无法启动,一直重启,看日志报错:

1
2
LOG: database system was interrupted; last known up at xxxx-xx-xx xx:xx:xx GMT
FATAL: the database system is starting up

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
2
\help
\help select

4、查看数据库,切换数据库,查看表

1
2
3
4
\l
\c registry;
\d
\dt

5、查看表结构

1
2
\d registry;
\d replication_policy;

6、查看表数据

1
2
select * from registry;
select * from replication_policy;

可以看到,查看表数据的方法和mysql完全相同。
实际上,postgres支持标准的sql语法,因此增删查改的语法可以参考《MySQL常用命令》即可。

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-postgresql-start/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~