Hubert 'depesz' Lubaczewski:等待 PostgreSQL 18 - 在 DML 查询的 RETURNING 中添加对 OLD/NEW 的支持

💡 原文英文,约600词,阅读约需2分钟。
📝

内容提要

2025年1月16日,Dean Rasheed 提交补丁,支持在 DML 查询的 RETURNING 中使用 OLD/NEW,允许显式返回插入、更新和删除的旧值与新值,增强查询灵活性与兼容性。

🎯

关键要点

  • 2025年1月16日,Dean Rasheed 提交补丁,支持在 DML 查询的 RETURNING 中使用 OLD/NEW。
  • 允许显式返回插入、更新和删除的旧值与新值,增强查询灵活性与兼容性。
  • RETURNING 列表中可以使用特殊别名 'old' 和 'new',并支持用户自定义别名。
  • 在 INSERT 操作中,旧值通常为 NULL;在 DELETE 操作中,新值通常为 NULL。
  • 此补丁解决了以往无法直接返回更新前值的问题,简化了查询过程。
  • 用户可以直接在 UPDATE 查询中使用 OLD 和 NEW,提升了查询的可读性和效率。

延伸问答

PostgreSQL 18 中的 RETURNING 功能有什么新变化?

PostgreSQL 18 中的 RETURNING 功能新增了对 OLD/NEW 的支持,允许在 DML 查询中显式返回插入、更新和删除的旧值与新值。

如何在 DML 查询中使用 OLD 和 NEW?

在 DML 查询中,可以使用特殊别名 'old' 和 'new',并支持用户自定义别名来返回旧值和新值。

这个补丁解决了什么问题?

这个补丁解决了以往无法直接返回更新前值的问题,简化了查询过程,提高了查询的可读性和效率。

在 INSERT 和 DELETE 操作中,OLD 和 NEW 的值是什么?

在 INSERT 操作中,旧值通常为 NULL;在 DELETE 操作中,新值通常为 NULL。

如何自定义 RETURNING 列表中的别名?

可以使用新语法,例如 RETURNING WITH (OLD AS o, NEW AS n) 来自定义 RETURNING 列表中的别名。

这个补丁对现有查询有什么影响?

补丁保持了向后兼容性,现有查询的解释不会改变,即使它们已经使用了 'old' 或 'new' 作为别名。

➡️

继续阅读