PostgreSQL 15:新特性预告

news/2024/11/23 1:36:30/

PostgreSQL 15 版本正在开发中,不远的将来就会与大家见面,所以是时候看看未来的一些新功能吧!

1.删除public 模式的创建权限

直到今天,使用 PostgreSQL 14,每个人都可以默认写入public 模式。使用 PostgreSQL 15,这将不再可能。

public 模式现在由“pg_database_owner”拥有。让我们做一个简短的测试。

postgres=# create user PGer;
CREATE ROLE
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------±-----------------------------------------------------------±----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
PGer | | {}

postgres=# \c postgres PGer
You are now connected to database “postgres” as user “PGer”.
postgres=> create table PGCCC (a int);
ERROR: permission denied for schema public
LINE 1: create table PGCCC (a int);
^
postgres=

如果您希望能够再次写入public模式,必须再次明确授予权限。

2.扩展pg_basebackup压缩

pg_basebackup 有一些扩展。特别是压缩得到改善。首先,–compress 现在能够接受一种压缩方法和一个(可选的)压缩级别,例如 gzip:9。

此外 –compress 接受 client-gzip 和 server-gzip 作为压缩方法来定义压缩备份的位置。另一个优点是压缩现在也可以与 –format=p 一起使用。

这使您有机会在服务器端压缩 pg_basebackup 并在客户端自动再次提取它。特别是对于慢速网络连接,这可能是一个好处。

让我们看一下新的 –compress 语法。

postgres@pgdebian:/u99/backup2/ [PG15] pg_basebackup --help | grep -A 1 compress
-z, --gzip compress tar output
-Z, --compress=[{client|server}-]METHOD[:DETAIL]
compress on client or server as specified
-Z, --compress=none do not compress tar output

要创建备份,它现在看起来像这样。非常简单易用。

postgres@pgdebian:/u99/backup2/ [PG15] pg_basebackup -h localhost -p 5438 -Ft --compress=client-gzip:9 --pgdata=/u99/backup2/ -Xs

postgres@pgdebian:/u99/backup2/ [PG15] ll
total 3136
-rw------- 1 postgres postgres 136487 Mar 25 13:40 backup_manifest
-rw------- 1 postgres postgres 3050084 Mar 25 13:40 base.tar.gz
-rw------- 1 postgres postgres 17649 Mar 25 13:40 pg_wal.tar.gz
postgres@pgdebian:/u99/backup2/ [PG15]

或者使用 lz4(可用于客户端或服务器端压缩):

postgres@pgdebian:/u99/backup2/ [PG15] pg_basebackup -h localhost -p 5438 -Ft --compress=lz4:9 --pgdata=/u99/backup2/ -Xs
postgres@pgdebian:/u99/backup2/ [PG15] ll
total 20096
-rw------- 1 postgres postgres 136487 Mar 25 13:18 backup_manifest
-rw------- 1 postgres postgres 3657232 Mar 25 13:18 base.tar.lz4
-rw------- 1 postgres postgres 16779264 Mar 25 13:18 pg_wal.tar

3.新角色:pg_checkpointer

在 PostgreSQL 14 之前,只允许超级用户执行 CHECKPOINT 命令。从 PostgreSQL 15 开始,有一个名为 pg_checkpointer 的新角色。一旦您将该角色授予用户,它就能够执行 CHECKPOINT 命令。

postgres=# create user PGer;
CREATE ROLE
postgres=# \c postgres PGer
You are now connected to database “postgres” as user “PGer”.
postgres=> checkpoint;
ERROR: must be superuser or have privileges of pg_checkpointer to do CHECKPOINT
postgres=> \c postgres postgres
You are now connected to database “postgres” as user “postgres”.
postgres=# grant pg_checkpointer to PGer;
GRANT ROLE
postgres=# \c postgres PGer
You are now connected to database “postgres” as user “PGer”.
postgres=> checkpoint;
CHECKPOINT
postgres=>

4.合并命令

MERGE 让您有机会在常规表和分区表等中执行一个插入/更新/删除行的 SQL 语句。如果将其用作单个 SQL 命令,则会有一些开销,因为您需要大量的 WHEN / THEN 表达式。

让我们用一个简单的例子来看看这个新特性,两个表相似,但其中一个表还有更多条目。

dvdrental=# select * from PGccc;
category_id | name | last_update
-------------±------------±--------------------
1 | Action | 2006-02-15 09:46:27
2 | Animation | 2006-02-15 09:46:27
3 | Children | 2006-02-15 09:46:27
4 | Classics | 2006-02-15 09:46:27
5 | Comedy | 2006-02-15 09:46:27
6 | Documentary | 2006-02-15 09:46:27
7 | Drama | 2006-02-15 09:46:27
8 | Family | 2006-02-15 09:46:27
9 | Foreign | 2006-02-15 09:46:27
10 | Games | 2006-02-15 09:46:27
11 | Horror | 2006-02-15 09:46:27
12 | Music | 2006-02-15 09:46:27
13 | New | 2006-02-15 09:46:27
14 | Sci-Fi | 2006-02-15 09:46:27
15 | Sports | 2006-02-15 09:46:27
16 | Travel | 2006-02-15 09:46:27
(16 rows)

dvdrental=# select * from PGccc_new;
category_id | name | last_update
-------------±------------±---------------------------
1 | Action | 2006-02-15 09:46:27
2 | Animation | 2006-02-15 09:46:27
3 | Children | 2006-02-15 09:46:27
4 | Classics | 2006-02-15 09:46:27
5 | Comedy | 2006-02-15 09:46:27
6 | Documentary | 2006-02-15 09:46:27
7 | Drama | 2006-02-15 09:46:27
8 | Family | 2006-02-15 09:46:27
9 | Foreign | 2006-02-15 09:46:27
10 | Games | 2006-02-15 09:46:27
11 | Horror | 2006-02-15 09:46:27
12 | Music | 2006-02-15 09:46:27
13 | Biography | 2022-04-12 11:53:34.986878
14 | Sci-Fi | 2006-02-15 09:46:27
15 | Sports | 2006-02-15 09:46:27
16 | Travel | 2006-02-15 09:46:27
17 | Dramedy | 2022-04-12 11:48:49.559058
18 | Love | 2022-04-12 11:49:32.072536
(17 rows)

dvdrental=# MERGE INTO PGccc AS c
USING PGccc_new AS n
ON c.category_id = n.category_id
WHEN MATCHED AND c.name = n.name THEN
DO NOTHING
WHEN MATCHED AND c.name n.name THEN
UPDATE SET name=n.name
WHEN NOT MATCHED THEN
INSERT VALUES (n.category_id, n.name, n.last_update)
;
MERGE 17
dvdrental=#

完成 MERGE 命令后,再次选择原始表,查看它是否按计划添加和更新了所有内容:

dvdrental=# select * from PGccc order by 1;
category_id | name | last_update
-------------±------------±---------------------------
1 | Action | 2006-02-15 09:46:27
2 | Animation | 2006-02-15 09:46:27
3 | Children | 2006-02-15 09:46:27
4 | Classics | 2006-02-15 09:46:27
5 | Comedy | 2006-02-15 09:46:27
6 | Documentary | 2006-02-15 09:46:27
7 | Drama | 2006-02-15 09:46:27
8 | Family | 2006-02-15 09:46:27
9 | Foreign | 2006-02-15 09:46:27
10 | Games | 2006-02-15 09:46:27
11 | Horror | 2006-02-15 09:46:27
12 | Music | 2006-02-15 09:46:27
13 | Biography | 2022-04-12 13:42:26.187381
14 | Sci-Fi | 2006-02-15 09:46:27
15 | Sports | 2006-02-15 09:46:27
16 | Travel | 2006-02-15 09:46:27
17 | Dramedy | 2022-04-12 11:48:49.559058
18 | Love | 2022-04-12 11:49:32.072536
(18 rows)

Merge 不支持外部表或可更新视图。如果需要的话,也许这会在以后出现。但目前还没有计划。

5.结论

这些只是 PostgreSQL 版本 15 附带的一些新功能。还有更多新功能要跟进。尤其是在复制方面,还有很多需要检查的地方,而且在安全性的情况下,PostgreSQL 会随着每个新版本的发布而改进。

原文链接:

https://blog.dbi-services.com/postgresql-15-some-new-features/

在这里插入图片描述

PG考试相关详情:http://www.pgccc.com.cn/


http://www.ppmy.cn/news/371046.html

相关文章

python中文编码与处理详解(个人认为比较全面详细了)

注意:本文只是针对 python 2,在 python 3 中,编码方式与处理技巧有些许变化,具体请参考: Python 2 与 Python 3 的差异对比: http://my.oschina.net/leejun2005/blog/173553 一、使用中文字符 在pytho…

python unicode编码转换中文_python unicode转中文及转换默认编码

原博文 2016-11-16 22:20 − 一、   在爬虫抓取网页信息时常需要将类似"\u4eba\u751f\u82e6\u77ed\uff0cpy\u662f\u5cb8"转换为中文,实际上这是unicode的中文编码。可用以下方法转换: 1、 1 >>> s = u\u4eba\u751f\u82e6\u77ed... 相关推荐 2019-12…

Linux下安装JDK 及 OpenJDK的卸载

今日发现我Linux系统中安装的JDK是1.8的版本,但是在查询时候竟然是1.7的版本,因为我目前从事大数据方向的开发,这对于当前很多流行的技术不是很友好,故解决此问题,也让各位同仁不必再为此烦恼。 1、查询JDK版本 [roo…

centos7 搭建oracle11g rac

一、部分理论 RAC,全称real application clusters, 译为“实时应用集群”,是Oracle新版数据库中采用的一项新技术,是高可用性的一-种,也是Oracle 数据库支持网格计算环境的核心技术。 ●VIP -虚拟IP地址(Virtual IP)。…

移动端页面px布局适配方案(viewport)

通过 <meta name"viewport"> 给视口设置固定的宽度&#xff0c;浏览器对页面自动缩放来实现页面的适配效果 可配合移动端手机网页适配iPad与折叠屏设备实现多平台兼容 简单描述下实现原理&#xff1a; 浏览器的宽度与取决于 <meta name"viewport"…

java jdk 8u111_8u111-jdk-alpine在java开发中的NullPointerException错误解决方案

问题描述 在部署一个验证码服务的容器服务时遇到了一个空指针错误,错误代码为: java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264) at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219) at s…

持续集成(Jenkins部署)

Jenkins通过脚本任务触发&#xff0c;实现代码的自动化分发。 系统环境&#xff1a; [rootqas-jenkins ~]# cat /etc/redhat-release CentOS release 6.8 (Final)Centos防火墙及SELINUX关闭 /etc/init.d/iptables stop chkconfig iptables off sed -i s/SELINUXenforcing/SELI…

苹果cms8.x 命令执行漏洞本地攻击演示

新出道信息安全爱好者&#xff0c;有很多需要学习的地方&#xff0c;愿有一天能追上大佬步伐。 好了&#xff0c;下面进入正题&#xff0c;上半年6月份参加了铁人三项赛&#xff0c;线下web题为Maccms8.x &#xff0c;当时也是通过团队协作以及百度资源成功破解服务器&#xff…