PostgreSQL 12的新功能

发布于:2020-12-19 18:01:30

0

235

0

PostgreSQL 开源数据库 SQL

2019年10月3日,发布了世界上最先进的开源数据库的新版本。PostgreSQL 12现在可用,对查询性能(特别是在较大的数据集和整体空间利用率方面)进行了显着改进,还有其他重要功能。 

在此博客中,我们将介绍这些新功能,并向您展示如何获取和安装此新PostgreSQL 12版本。我们还将探讨升级时要考虑的一些注意事项。PostgreSQL 12功能和改进,让我们开始提及这个新PostgreSQL版本的一些最重要的功能和改进。

索引编制

  • 对B树索引的空间利用率和读/写性能进行了优化。

  • 减少创建GiST,GIN和SP-GiST索引的WAL开销。

  • 您可以使用SP-GiST索引通过距离运算符(<->)执行K近邻查询。

  • 重建索引时不会通过REINDEX CONCURRENTLY命令阻止对索引的写操作,从而使用户可以避免因长时间重建索引而导致停机的情况。

分区

  • 对分区表的查询有了改进,尤其是对于具有数千个分区的表,这些表只需要从有限的子集中检索数据。

  • 使用INSERT和COPY向分区表添加数据的性能提高。

  • 您将能够在不阻止查询的情况下将新分区附加到表。

SQL

  • 现在,您可以使用SQL / JSON标准中定义的JSON路径表达式对JSON文档运行查询,并且它们可以利用现有的索引机制对以JSONB格式存储的文档进行有效检索。

  • PostgreSQL 12现在可以自动内联WITH查询(如果它不是递归的,没有任何副作用,并且在查询的后面部分仅被引用一次),这反过来又可以帮助提高许多现有查询的性能查询。

  • 引入“生成的列”。这种类型的列根据同一表中其他列的内容计算其值。还支持在此存储此计算值。 

国际化

  • PostgreSQL 12通过允许用户定义“不确定性归类”来扩展其对ICU归类的支持,例如,可以允许不区分大小写或不区分重音的比较。

认证方式

  • 引入了客户端和服务器端加密,以通过GSSAPI接口进行身份验证。

  • 如果PostgreSQL服务是使用OpenLDAP编译的,则它能够发现LDAP服务器。

  • 使用clientcert = verify-full选项和在pg_hba.conf文件中配置的其他身份验证方法进行多因素身份验证。

如果要利用这些新功能和改进,可以转到下载页面并获取最新的PostgreSQL版本。如果您需要HA设置,这里是一个博客,向您展示如何为HA安装和配置PostgreSQL。

如何安装PostgreSQL 12

在此示例中,我们将使用CentOS7作为操作系统。因此,我们需要转到基于RedHat的OS下载站点并安装相应的版本。

1个

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

它将安装带有稳定,测试和源代码包的PostgreSQL存储库。

1个

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

$ head /etc/yum.repos.d/pgdg-redhat-all.repo<font></font>

<font></font>

# PGDG Red Hat Enterprise Linux / CentOS stable repositories:<font></font>

<font></font>

[pgdg12]<font></font>

<font></font>

name=PostgreSQL 12 for RHEL/CentOS $releasever - $basearch<font></font>

<font></font>

baseurl=https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-$releasever-$basearch<font></font>

<font></font>

enabled=1<font></font>

<font></font>

gpgcheck=1<font></font>

<font></font>

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG<font></font>

<font></font>

...

然后,安装客户端和服务器PostgreSQL12软件包。它将安装一些python依赖项。

1个

$ yum install postgresql12 postgresql12-server

现在,您可以初始化新的PostgreSQL 12数据库。

1个

2

3

$ /usr/pgsql-12/bin/postgresql-12-setup initdb<font></font>

<font></font>

Initializing database ... OK

并启用/启动PostgreSQL服务。

1个

2

3

4

5

$ systemctl enable postgresql-12<font></font>

<font></font>

Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-12.service to /usr/lib/systemd/system/postgresql-12.service.<font></font>

<font></font>

$ systemctl start postgresql-12

就是这样。您已启动并运行新的PostgreSQL版本。

1个

2

3

4

5

6

7

8

9

10

11

12

13

14

15

$ psql<font></font>

<font></font>

psql (12.0)<font></font>

<font></font>

Type "help" for help.<font></font>

<font></font>

postgres=# select version();<font></font>

<font></font>

                                                 version<font></font>

<font></font>

---------------------------------------------------------------------------------------------------------<font></font>

<font></font>

 PostgreSQL 12.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit<font></font>

<font></font>

(1 row)

现在,您已经安装了最新的PostgreSQL版本,您可以将数据迁移到这个新的数据库节点中。

升级到PostgreSQL 12

如果要将当前的PostgreSQL版本升级到这个新版本,则有三个主要选项可以执行此任务。

  • pg_dump:这是一个逻辑备份工具,可让您转储数据并将其还原到新的PostgreSQL版本中。在这里,您将有一个停机时间,该停机时间将根据您的数据大小而变化。.您需要停止系统或避免在主节点中使用新数据,运行pg_dump,将生成的转储移至新的数据库节点并进行还原。在这段时间内,您无法写入PostgreSQL主数据库,以避免数据不一致。

  • Pg_upgrade:这是一个PostgreSQL工具,用于就地升级PostgreSQL版本。在生产环境中可能很危险,因此在这种情况下我们不建议使用此方法。使用这种方法也会有停机时间,但是可能比使用以前的pg_dump方法要少得多。

  • 逻辑复制:从PostgreSQL 10开始,您就可以使用这种复制方法,该方法允许您以零(或几乎零)的停机时间执行主要版本升级。这样,您可以在最新的PostgreSQL版本中添加一个备用节点,并且当复制是最新的时,您可以执行故障转移过程来升级新的PostgreSQL节点。

升级到PostgreSQL 12之前的注意事项

通常,对于所有升级过程以及所有技术,都需要考虑以下几点。让我们看一些主要的。

  • 删除了数据类型abstime,reltime和tinterval。

  • recovery.conf设置已包含在postgresql.conf文件中,并且不再使用。如果创建了此文件,则服务器将无法启动。文件recovery.signal和standby.signal文件现在用于切换到非主要模式。将trigger_file设置重命名为promove_trigger_file,并且删除了standby_mode设置。

  • 不允许使用多个冲突的recovery_target规范。

  • pg_restore中需要指定“ -f”以将转储内容发送到标准输出。

  • B树索引中的最大索引条目长度减少了八个字节,以改善重复条目的处理。对先前版本的索引pg_upgrade执行的REINDEX操作可能会失败。

  • 如果没有提供参数列表并且有多个匹配的对象,则DRIF IF EXISTS FUNCTION / PROCEDURE / AGGREGATE / ROUTINE会产生错误。

有关新的PostgreSQL 12功能和迁移之前的注意事项的更多详细信息,您可以参考官方发行说明网页。