Postgresql实战
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第27天,点击查看活动详情。
认识pgsql
来源:起源于一个开源的社区,名字就叫做Postgre,最初由于15年图灵奖获得者michael stonebracker 。早期由两位UC大学生建立sql解释器 这时候叫做Postgre95,后面经过改名叫做现在名字。
截止写文日期的最新版本为14,Postgre是十分值得进行数据库底层编写的技术人员参考和学习的,对于提升自我的业务或者技术开发人员也有不少的提升。
特点
- 完全开源和免费,只要声明版权就可以对外商用。也支持公开版权并行不需要担心版权费用问题
- 跨平台运行,当然基本操作
- 支持丰富数据类型,包含原生json数据格式存储
- 支持多种编程语言,同时支持大部分都sql规范和标准,也包含窗口函数,物化视图等等比较有用的高级特性
- 支持并行查询和mvcc多版本并发控制,同样支持同步半同步异步复制
- 支出跨数据库多数据源兼容,比如其他rmdbs的数据源MySQL,oracle等,
- 天生支持集群,即使是单节点也能自己组一个集群
postgresql安装
本数据库的一大特点是支持window原生兼容,当然更多情况是使用Linux版本,可以通过yum或者rpm进行安装。
安装支持指定下面的相关参数
- 安装目录
- 端口号
- 数据页大小,在也叫做数据文件大小,默认8KB,如果是OLAP可以调到32KB,但是最大只能32KB,oltp使用8KB够用,当然也是历史原因导致
- 数据文件大小:1G
- wal文件块大小,默认8KB,这个文件比较重要,这里先留个印象
- wal单文件大小:默认为16M
如果使用源码编译安装,这里只要记住使用命令'gmake world'一劳永逸,此命令可以安装文档和数据库本身,算是最为完整的安装方式。
目录结构
Postgre的目录结构包含bin share ,分贝存储应用程序和头文件内容,注意因为这个数据库本身就是cs应用所以包含客户端和服务端两个部分
客户端程序和工具
pg_dump以及pg_dumpall:注意是物理备份工具 pg_restore:pg_dump的物理数据备份恢复工具。注意逻辑备份不能用此命令 pg_basebackup:热备份工具
实验??
其他工具: pg_bench:内置的基准测试工具,可以用于简单基准测试 pg_isready oid2name:解析数据目录oid以及文件节点,具体细节在后文讲述。
服务器程序,服务器程序通常指的是bin目录下面的工具 包含一些启动和初始化程序命令,或者包含一些升级程序个一些帮助开发者观察日志的日志转化工具
部署步骤
创建实例: postgre支持天然集群,所以整个实例组成由数据库实例配置文件,监听端口的数据集合组成,意味着一个实例可以启很多个端口组成集群
创建超级用户: 和大多数数据库一样,Postgre也包含超管用户,超管用户比较建议在安装的时候创建,因为如果初次使用数据库如果发现没有创建超管用户,系统会自动为用户创建名为Postgre的用户,密码也是类似。
另外对于启动Postgre的用户建议不要使用超管root的角色,因为一旦存在bug或者黑客攻击,可能直接导致运行操作系统污染。
创建数据目录: 顾名思义就是来放数据的地方,通常会放到安装目录的/data下面。
但是之前说过我们的实例并不是单节点而是可以天然多节点组成集群的,所以在数据目录组织上建议按照特定规则划分。
比如出现版本号的划分10.x,或者实例放在一个版本/data/10等这样的写法。
特别注意Postgre的数据目录访问权限,虽然可以使用initdb的服务端命令初始化数据库的时候默认是700的权限,但是还是建议分配数据目录的时候手动设置权限。
初始化数据目录命令如下: --auth-local=method,通过Unix套接字连接本地用户在pghba.conf配置文件指定 -D 指定目录位置 -E 指定数据库编码,默认utf8 --local 设置区域 -T 本文搜索配置 -U 超管用户用户名 -W 配置过程为超级用户设置密码 -X wal预写日志的存储目录
安装过程中指定相关选项的情况会出现相关的文本提示。 另外如果被安装的数据目录不是空系统也会有相关提示,防止安装数据库把旧数据覆盖的二次确认操作
启动和停止数据库
service postgre-10 start service postgre-10 stiop Postgre提供了pg_ctl来提供更好的数据库支持,针对启动和关闭数据库做了更多丰富的,选项。 以关闭威力,数据库支持三种关闭模式
- smart模式:等待用户断开连接并且事务完全提交之后关闭
- fast:立刻回滚事务 并且强制点开客户端连接,主要用于非常紧急的情况会考虑
- immdiate:立刻停止所有服务端进程,不推荐使用
配置开机启动
如果是yum方式,官方会自动安装开机启动的脚本,但是如果是源码方式需要自己配置。
- 把名称linux脚本拷贝到/etc/init.d 中,并且重命名为postgre-10
- 设置开机启动,chkconfig -list查看当前服务是否开机启动,同时此命令可以配置启动或者关闭。
数据库基础配置
Postgre有两个重要配置:postgre.conf以及pg_hba.conf,以及postgre.auto.conf,以及pg_ident.conf,其中第一个配置是主要配置。
hba是防火墙的配置文件。 连接配置有下面几种: type表示连接方式,有四种连接方式可以选择,比如local,host,hostssl。 其中hostssl的区别是只支持ssl连接方式,但是配置需要在安装时候进行如下处理:
- 客户端服务端都有ssl
- 编译时候必须指定参数--with-openssl,
- 主配置文件ssl设置为on
认证方法配置: trust,reject,md5,password方式处理等, md5加password为双重加密方式,但是不能暴露密码原文,否则很容易破解 另外在pg-sql10中新增了sha256加密方式。
配置修改方式: Postgre支持命令修改的方式修改全局参数配置,比如下面的内容 mydb=# alter system set 参数 = 覆盖参数
。
非全局参数配置如下:
- alter databsase name set configparamter to = value alter database name reset configuration
修改器全局参数的案例如下
- 设置和重置session级别配置
- 通过set命令设置当前session的配置
- 更新pg_setting视图
- set_config函数更新视图
- 设置和重置role级别配置
- 如何查看配置 查询pg_setting系统表
通过show all命令进行查看。
- 配置生效办法 如果是不需要重启的参数,reload一次可以生效。
允许远程访问: 通常情况下默认端口不允许远程连接,这和大多数的数据库设计一样。 主要的办法是修改监听地址,主要配置文件为postgresql.conf的监听地址配置,默认情况只会监听回环网卡也就是localhost请求。
在配置文件中预置了几个参数:
- what ip address to listen on 允许ip地址
- comma-separated list of address
最后只要把配置为星号,就可以开放所有端口访问。
最后通过pg ctl命令工具测试连接。