PostgreSQL教程

PostgreSQL

一、含义

PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS)使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

ORDBMS(对象关系数据库系统)是面向对象技术与传统的关系数据库相结合的产物,查询处理是 ORDBMS 的重要组成部分,它的性能优劣将直接影响到DBMS 的性能。

ORDBMS在原来关系数据库的基础上,增加了一些新的特性。

RDBMS 是关系数据库管理系统,是建立实体之间的联系,最后得到的是关系表。

OODBMS 面向对象数据库管理系统,将所有实体都看着对象,并将这些对象类进行封装,对象之间的通信通过消息 OODBMS 对象关系数据库在实质上还是关系数据库 。

二、ORDBMS 术语此处概念与sql相同,可忽略看

在我们开始学习 PostgreSQL 数据库前,让我们先了解下 ORDBMS 的一些术语:

数据库: 数据库是一些关联表的集合。

数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。

列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。

行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。

冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。

主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。

外键:外键用于关联两个表。

复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。

索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。

参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

三、PostgreSQL 特征

函数:通过函数,可以在数据库服务器端执行指令程序。

索引:用户可以自定义索引方法,或使用内置的 B 树,哈希表与 GiST 索引。

触发器:触发器是由SQL语句查询所触发的事件。如:一个INSERT语句可能触发一个检查数据完整性的触发器。触发器通常由INSERT或UPDATE语句触发。 多版本并发控制:PostgreSQL使用多版本并发控制(MVCC,Multiversion concurrency control)系统进行并发控制,该系统向每个用户提供了一个数据库的"快照",用户在事务内所作的每个修改,对于其他的用户都不可见,直到该事务成功提交。

规则:规则(RULE)允许一个查询能被重写,通常用来实现对视图(VIEW)的操作,如插入(INSERT)、更新(UPDATE)、删除(DELETE)。

数据类型:包括文本、任意精度的数值数组、JSON 数据、枚举类型、XML 数据等。

全文检索:通过 Tsearch2 或 OpenFTS,8.3版本中内嵌 Tsearch2。

NoSQL:JSON,JSONB,XML,HStore 原生支持,至 NoSQL 数据库的外部数据包装器。

数据仓库:能平滑迁移至同属 PostgreSQL 生态的 GreenPlum,DeepGreen,HAWK 等,使用 FDW 进行 ETL。

  • 安装postgresql(linux)

1、单机版安装

(1). 安装rmp (软件包管理器)

可首先查看自己的系统是否安装了postgresql数据库命令如下: rpm -qa | grep postgresql

sudo yum install -y

https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

(2).安装pgsql服务:

postgresql11 后面的11是pgsql版本可切换

sudo yum install -y postgresql11-server

(3).安装完毕后执行以下命令:初始化数据库、pgsql服务设为开机启动、启动pgsql

sudo /usr/pgsql-11/bin/postgresql-11-setup initdb   

sudo systemctl enable postgresql-11    

sudo systemctl start postgresql-11     

注:初始化成功后PostgreSQL数据库默认会创建一个postgres的数据库用户作为数据库的管理员,默认密码为空和postgres数据库。

用 netstat -nultp 查看pgsql服务是否启动成功,如果有5432端口的则启动服务成功。

(4).服务器端pgsql操作命令相关:

su postgres   //切换到postgres用户

psql            //进入到pgsql终端模式(postgres=#)

\q   //退出终端模式

\l    //查看所有数据库

还有其他相关命令可百度

(5).修改PostgresSQL数据库配置实现远程访问

修改postgresql.conf文件一般路径在

 /var/lib/pgsql/11/data/postgresql.conf  

如果不是用find . -name postgresql.conf 查配置文件在哪,打开文件后将listen_addresses前的#去掉,并将listen_addresses = 'localhost' 改成listen_addresses = '*',port和max_connections前面的注释也去掉。

修改pg_hba.conf配置文件,将需要远程访问数据库的IP地址或地址段加入该文件。

PostgreSQL教程_第1张图片

修改完毕后重启pgsql服务:  service postgresql-11 restart

想让外网界面化数据库工具连接成功还得关闭5432端口防火墙:

firewall-cmd --query-port=5432/tcp 返回no,说明就是虚拟机的5432端口没有对外开放的原因;

firewall-cmd --add-port=5432/tcp --permanent #永久添加5432端口例外

firewall-cmd --reload #重启防火墙,使修改生效

firewall-cmd --query-port=5432/tcp 返回yes

PostgreSQL教程_第2张图片

 

2、主从安装

主从安装,需要两台服务器,尽量两次单机安装,然后修改配置文件

主服务器配置

    1.首先需要创建一个数据库用户进行主从同步。创建用户replica,并赋予登录和复制的权限。

    输入:su – postgres

    回车,切换至用户。

    输入:psql -U postgres

    回车,登录数据库。

    输入:CREATE ROLE replica login replication encrypted password ‘replica’;

    2.修改pg_hba.conf,允许replica用户来同步。

    输入:vi /var/lib/pgsql/11/data/pg_hba.conf

    回车,进入文档内容。

    按 i 键进入“插入编辑模式”,在IPv4 local connections下方增加两行配置。

    允许200连接到主服务器:

    host all ip/32 trust

    允许200使用replica用户来复制:

    host replication replica ip/32 md5

编辑完成后,按Esc键,输入::wq

回车,“保存退出”文档。

3.修改postgresql.conf

    输入:vi /var/lib/pgsql/11/data/postgresql.conf

    回车,进入文档内容。

    按 i 键进入“插入编辑模式”,修改以下配置。

    监听所有IP:

    listen_addresses = ‘*’

    允许归档:

    archive_mode = on

    用该命令来归档logfile segment:

    archive_command = ‘cp %p /opt/pgsql/pg_archive/%f’

    wal_level = hot_standby

    这个设置了可以最多有几个流复制连接,差不多有几个从,就设置几个:

    max_wal_senders = 2

    设置流复制保留的最多的xlog数目:

    wal_keep_segments = 256

    设置流复制主机发送数据的超时时间:

    wal_sender_timeout = 60s

    这个设置要注意下,从库的max_connections必须要大于主库的:

    max_connections = 100

    编辑完成后,按Esc键,输入::wq

    回车,“保存退出”文档。

    输入:systemctl service postgresql-11 restart

    回车,重启postgressql服务。

    4.测试ip1能否连接ip2数据库。在ip2上运行如下命令:

    输入:psql -h ip -U postgres(此处ip为ip1的IP地址)

    回车,然后输入ip1数据库的密码

    回车,连接上ip1数据库

从服务器配置

1.从主节点拷贝数据到从节点

    输入:su - postgres

    回车,切换至用户

输入:rm -rf /var/lib/pgsql/11/data/*

    回车,将data目录下的数据都清空

    输入:pg_basebackup -h ip2 -U replica –D /var/lib/pgsql/11/data -X stream -P

    回车,从ip2拷贝数据到ip2(基础备份)

    输入:mkdir /opt/pgsql

    回车,创建pgsql文件夹

    输入:mkdir /opt/pgsql/pg_archive

    回车,创建pg_archive文件夹

    2.配置recovery.conf

    输入:

    cp /usr/pgsql-11/share/recovery.conf.sample /var/lib/pgsql-11/9.4/data/recovery.conf

    回车,复制recovery.conf

    输入:vi /var/lib/pgsql/11/data/recovery.conf

    回车,进入文档内容。

    按 i 键进入“插入编辑模式”,修改以下配置。

    表明该节点是从服务器:

    standby_mode = on

    主服务器的信息以及连接的用户:

    primary_conninfo = ‘host=ip2 port=5432 user=replica password=replica’

    recovery_target_timeline = ‘latest’

    编辑完成后,按Esc键,输入::wq

    回车,“保存退出”文档。

    3.配置postgresql.conf

    输入:vi /var/lib/pgsql/11/data/postgresql.conf

    回车,进入文档内容。

    按 i 键进入“插入编辑模式”,修改以下配置。

    wal_level = hot_standby

    一般查多于写的应用从库的最大连接数要比较大:

    max_connections = 1000

    说明这台机器不仅仅是用于数据归档,也用于数据查询:

    hot_standby = on

    数据流备份的最大延迟时间:

    max_standby_streaming_delay = 30s

    多久向主报告一次从的状态,设置最长的间隔时间:

    wal_receiver_status_interval = 10s

    如果有错误的数据复制,是否向主进行反馈:

    hot_standby_feedback = on

    编辑完成后,按Esc键,输入::wq

    回车,“保存退出”文档。

    输入:service postgresql-11 restart

    回车,重启postgressql服务。

    至此,PostgreSQL主从流复制安装部署完成,用可视化工具测试一下吧。

    在主服务器(ip2)上插入数据或删除数据,

    在从服务器(ip1)上能看到相应的变化。

    从服务器(ip1)上只能查询,不能插入或删除。

3、集群版安装

citus

Citus基本上是Postgres,可以进行横向扩展。它是Postgres的扩展,可以在多台计算机的群集中分发数据和查询。作为扩展(而不是分支),Citus支持新的PostgreSQL版本,使用户可以从新功能中受益,同时保持与现有PostgreSQL工具的兼容性。

Citus使用分片和复制功能在多台计算机上水平扩展PostgreSQL。它的查询引擎使这些服务器之间的传入SQL查询并行化,以实现大型数据集上的实时(不到一秒钟)响应。

集群搭建

基于centos安装,在所有节点上执行的步骤

添加资料库

curl https://install.citusdata.com/community/rpm.sh | sudo bash

1

安装PostgreSQL + Citus并初始化数据库

# 安装具有Citus扩展名的PostgreSQL

sudo yum install -y citus94_12

# 初始化系统数据库(必要时使用RHEL 6 vs 7方法)

sudo service postgresql-11 initdb || sudo

 /usr/pgsql-12/bin/postgresql-11-setup initdb

# 预载citus扩展

echo "shared_preload_libraries = 'citus'" | sudo tee -a /var/lib/pgsql/11/data/postgresql.conf

配置连接和身份验证

在启动数据库之前,让我们更改其访问权限。默认情况下,数据库服务器仅侦听localhost上的客户端。修改客户端身份验证文件配置为允许来自本地网络的所有传入连接。

sudo vi /var/lib/pgsql/11/data/postgresql.conf

# 取消注释listen_addresses,以使更改生效

listen_addresses = '*'

sudo vi /var/lib/pgsql/11/data/pg_hba.conf

# 允许局域网内访问

# host    all             all             192.168.1.0/24              trust

# 允许全部ip可以访问

host    all             all             0.0.0.0/0              trust

# 允许本机不受限制的访问

host    all             all             127.0.0.1/32            trust

host    all             all             ::1/128                 trust

启动数据库服务器,创建Citus扩展

# 启动数据库服务器

sudo service postgresql-11 restart

# 并使其在计算机运行时自动启动

sudo chkconfig postgresql-11 on

在协调器(主)节点上要执行的步骤

添加工作节点信息

我们需要将其存储节点告知主节点。要添加此信息,我们调用UDF,它将节点信息添加到pg_dist_node目录表中,协调器使用该表来获取工作节点列表。

sudo -i -u postgres psql -c "SELECT * from master_add_node('ip1', 5432);"

sudo -i -u postgres psql -c "SELECT * from master_add_node('ip2', 5432);"

验证安装是否成功

为了验证安装是否成功,我们检查协调器节点是否已选择所需的工作程序配置。在psql shell中运行时,此命令应输出我们添加到上面pg_dist_node表中的工作程序节点。

  master_get_active_worker_nodes();"

安装postgis扩展

rpm -Uvh https://yum.postgresql.org/11/redhat/rhel-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

 yum install postgis30_11

注意事项

数据库创建

在主节点创建数据库后,在所有存储节点同样需要创建数据库。并且每个数据库都需要创建citus扩展。要配合Citus使用其它扩展,Citus必须是第一个启用的扩展,其次,必须在coordinator和worker节点都安装相应扩展。

创建分布式表

凡是未显式指出的SQL,均在协调节点上执行

新建测试表

create table test_table(id int, name varchar(16));

配置分片原则

SELECT master_create_distributed_table('test_table', 'id', 'hash');

根据分片数和副本数进行分片

-- 创建两个分片和两个副本

SELECT master_create_worker_shards('test_table', 2, 2);

创建完成后,可以在子节点查看到

使用postgis3.0查询mvt数据

  • 管理工具
  1. pgadmin简介

pgAdmin 是一个非常流行、功能强大并且开源的 PostgreSQL 管理与开发平台。pgAdmin 支持 Linux、Unix、Mac OS X 以及 Windows 操作系统,可以管理 PostgreSQL 9.2 以及更高版本。

  1. Pgadmin特性

pgAdmin 提供了大量的功能特性,了解这些特性的最好方法就是下载并进行尝试。以下是一个简单的列表,仅供参考:

跨平台支持

    Microsoft Windows ™
    Linux
    macOS

为各种 PostgreSQL 版本和衍生产品而设计

    PostgreSQL 9.2 以及更高版本
    EDB Postgres Advanced Server 9.2 以及更高版本

丰富的文档

    pgAdmin 使用文档
    PostgreSQL 文档链接

多种部署模式

    桌面应用模式
    服务器模式,支持多用户通过网络进行访问
    容器部署模式

工具

    强大的查询工具,支持语法高亮
    快速响应的数据显示和输入表格
    可视化的查询计划显示
    ACL 权限快速设置向导
    过程语言调试器(支持 pl/pgsql 和 edb-spl)

日常维护

    管理自动清理(Auto-vacuum)
    监控面板
    备份、还原、清理以及统计分析
    SQL/Shell/批处理作业调度代理

创建、查看以及编辑所有常用的 PostgreSQL 对象

对象的显示包括它们的 SQL 语句定义,以及一个用户友好的属性列表。同时还会显示依赖对象和被依赖对象,以及对象的统计信息。

    聚合函数
    类型转换
    字段
    约束
    数据库
    域
    外部表
    外部服务器
    外部数据封装器
    FTS 配置
    FTS 字典
    FTS 解析器
    FTS 模板
    函数
    索引
    语言
    物化视图
    角色
    规则
    过程语言
    模式
    序列
    表
    表空间
    触发器函数
    类型
    视图
    EDB Postgres Advanced Server 对象(例如包、过程和同义词)
    pgAgent 对象(例如作业、计划)

多字节编码支持

pgAdmin 支持大部分的 PostgreSQL 服务器编码:

    SQL_ASCII
    EUC_JP, EUC_CN, EUC_KR, EUC_TW
    JOHAB
    LATIN1, LATIN2, LATIN3, LATIN4, LATIN5, LATIN6, LATIN7, LATIN8, LATIN9, LATIN10
    ISO_8859_5, ISO_8859_6, ISO_8859_7, ISO_8859_8
    UNICODE/UTF-8
    MULE_INTERNAL
    KOI8
    WIN
    ALT
    WIN1256
    TCVN
    WIN874

  1. 下载地址

https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v6.8/windows/pgadmin4-6.8-x64.exe

  1. 安装

PostgreSQL教程_第3张图片

 PostgreSQL教程_第4张图片

 

PostgreSQL教程_第5张图片

 PostgreSQL教程_第6张图片

 PostgreSQL教程_第7张图片

 PostgreSQL教程_第8张图片

 PostgreSQL教程_第9张图片

 PostgreSQL教程_第10张图片

PostgreSQL教程_第11张图片

第一次打开时,需要设置密码,否则后续链接数据库会失败并报错:pgadmin4连接失败 Crypt key missing((10条消息) pgadmin4连接失败 Crypt key missing_大聪的博客-CSDN博客)

PostgreSQL教程_第12张图片

 PostgreSQL教程_第13张图片

  1. 设置中文界面

pgAdmin 支持多语言界面,默认为英语。我们将其改为中文界面,点击“File”下拉菜单,选择“Preferences”;找到左侧列表中的“miscellaneous” -> “User language”,然后在右侧下拉列表中选项“Chinese (Simplified)”。

PostgreSQL教程_第14张图片

PostgreSQL教程_第15张图片 

 PostgreSQL教程_第16张图片

 PostgreSQL教程_第17张图片

PostgreSQL教程_第18张图片

PostgreSQL教程_第19张图片

  1. 连接数据库

在执行数据库的管理和开发之前,先需要创建一个数据库服务器连接。右键点击页面左侧的“Servers”节点,然后选择“创建” -> “服务器…”,弹出“创建-服务器”对话框。

PostgreSQL教程_第20张图片

 PostgreSQL教程_第21张图片

PostgreSQL教程_第22张图片 

PostgreSQL教程_第23张图片 

 PostgreSQL教程_第24张图片

 PostgreSQL教程_第25张图片

 

这的对象浏览器,可以查看和管理各种数据库对象。右侧的各种面板提供了具体的对象信息

PostgreSQL教程_第26张图片

 

查看表信息

PostgreSQL教程_第27张图片

 

查询工具可以用于执行各种 SQL 语句和命令,运行 SQL 脚本,显示查询执行计划,导出查询结果等

PostgreSQL教程_第28张图片

 

六、PostgreSQL手册

PostgreSQL 11.2 手册

你可能感兴趣的:(postgresql,数据库)