• PostgreSQL 17即将发布,新功能Top 3


    按照计划,PostgreSQL 17 即将在 2024 年 9 月 26 日发布,目前已经发布了第一个 RC 版本,新版本的功能增强可以参考 Release Notes

    本文给大家分享其中 3 个重大的新增功能。

    MERGE 语句增强

    MERGE 语句是 PostgreSQL 15 增加的一个新功能,它可以在单个语句中实现 INSERT、UPDATE 以及 DELETE 操作,非常适合数据仓库中的 ETL 流程。

    PostgreSQL 17 进一步增强了 MERGE 语句的功能,首先就是它支持 RETURNING 子句,可以返回新增、更新或者删除的数据行。例如:

    CREATE TABLE hero (
        id SERIAL PRIMARY KEY,
        first_name text,
        last_name text,
        hero_name text UNIQUE
    );
    
    -- 插入或者更新数据
    MERGE INTO hero h
    USING (VALUES ('Wade', 'Wilson', 'Deadpool')) v(first_name, last_name, hero_name)
    ON h.hero_name = v.hero_name
    WHEN MATCHED THEN
      UPDATE SET first_name = v.first_name, last_name = v.last_name
    WHEN NOT MATCHED THEN
      INSERT (first_name, last_name, hero_name)
      VALUES (v.first_name, v.last_name, v.hero_name)
    RETURNING merge_action(), *;
    
    merge_action|first_name|last_name|hero_name|id|first_name|last_name|hero_name|
    ------------+----------+---------+---------+--+----------+---------+---------+
    INSERT      |Wade      |Wilson   |Deadpool | 1|Wade      |Wilson   |Deadpool |
    

    第一次执行语句时返回了插入的数据,其中 merge_action() 函数用于返回 MERGE 操作类型,返回值包括 INSERT、UPDATE 以及 DELETE。

    MERGE 语句另一个增强是一个新的操作选项:WHEN NOT MATCHED BY SOURCE。该选项可以针对目标表中存在、但是源表中不存在的数据行进行操作,允许的操作包括 UPDATE、DELETE 或者 DO NOTHING。

    MERGE INTO hero h
    USING (VALUES ('Wade', 'Wilson', 'Deadpool')) v(first_name, last_name, hero_name)
    ON h.hero_name = v.hero_name
    WHEN MATCHED THEN
      UPDATE SET first_name = v.first_name, last_name = v.last_name
    WHEN NOT MATCHED THEN
      INSERT (first_name, last_name, hero_name)
      VALUES (v.first_name, v.last_name, v.hero_name)
    WHEN NOT MATCHED BY SOURCE THEN
      DELETE;
    

    JSON 函数

    PostgreSQL 对于 JSON 数据类型和函数的支持比很多数据库都早,PostgreSQL 17 继续实现 SQL/JSON 标准,增加了 JSON_TABLE 函数,可以将 JSON 数据转换为 PostgreSQL 二维表。例如:

    select * from json_table(
        '[{"a":10,"b":20},{"a":30,"b":40}]'::jsonb,
        '$[*]'
        COLUMNS (
            column_a int4 path '$.a',
            column_b int4 path '$.b'
        )
    );
     column_a | column_b 
    ----------+----------
           10 |       20
           30 |       40
    

    PostgreSQL 17 还增加了 SQL/JSON 构造函数(JSON、JSON_SCALAR、JSON_SERIALIZE)以及查询函数(JSON_EXISTS、JSON_QUERY、JSON_VALUE)。同时还为 jsonpath 实现增加了更多功能,以及将 JSON 数据转换为其他类型的功能,

    性能改进

    PostgreSQL 17 在查询性能以及维护效率方面提供了许多改进,包括并行查询,VACUMM 进程,B-树索引维护等。

    PostgreSQL 17 支持 pg_basebackup 增量备份,同时引入了一个新的工具 pg_combinebackup,用于还原备份时合并多个备份。

    除了以上内容,PostgreSQL 17 还增加了大量的新功能和改进,完整的新特性列表可以参考官方的发行说明。

    https://www.postgresql.org/docs/17/release-17.html

  • 相关阅读:
    linux系统中三个重要的结构体
    13、Callable介绍(Thread如何启动Callable)
    突破编程_C++_设计模式(简单工厂模式)
    隐私计算助力数据的安全流通与共享
    【牛客 - 剑指offer】JZ31 栈的压入、弹出序列 两种方案 Java实现
    nginx部署问题集合
    GO sync.Map Store、Delete 、Load 、Range等方法使用举例
    QT(9.4)tcp通信,数据库,opencv,
    软考高级系统架构设计师系列论文九:论企业集成平台的技术与应用
    【C++】---模拟实现string
  • 原文地址:https://blog.csdn.net/horses/article/details/141915901