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

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官网PostgreSQL Documentation

Harbor中使用的数据库就是PostgreSQL,因此本文对PostgreSQL(pg)进行一个简单的学习,主要参考PostgreSQL 菜鸟教程

2. Harbor中的pg

1、进入pg容器
docker exec -it harbor-db /bin/bash

2、登录pg
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完全相同。
实际上,pg支持标准的sql语法,因此增删查改的语法参考《MySQL常用命令》即可。

3. 安装pg

如果单独使用pg,该怎样安装?下面学习使用docker安装pg的方法。

1、登录dockerhub查看需要的pg版本

2、下载pg镜像(以pg12.2为例)
docker pull postgres:12.2

3、启动pg服务

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、验证安装
docker ps
gp启动正常的话就可以看到vk-pg容器。
如果启动失败,可以使用docker logs vk-pg查看失败原因并进行解决。

使用nc命令验证:

1
2
yum install nc
nc -v localhost 5432

5、登录pg

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

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

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

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

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

以上,pg安装配置完成。

4. Postgresql启动报错问题

4.1. 问题描述

bitnami安装的postgresql,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

4.2. 解决办法

修改探活,增加 initialDelaySeconds 或者增加 failureThreshold 。

问题原因:如果服务器突然停止,或者突然失去对文件系统的访问权限,那么内存中的所有内容都会丢失,下次启动它时,它需要重新播放日志,以使表恢复到正确的状态(这可能需要相当长的时间,具体取决于自上次检查点以来发生了多少)。在完成之前,任何使用服务器的尝试都将导致 FATAL: the database system is starting up

参考文档:Postgresql fatal the database system is starting up - windows 10