Hubert 'depesz' Lubaczewski:等待 PostgreSQL 18 - 虚拟生成列

💡 原文英文,约1100词,阅读约需4分钟。
📝

内容提要

2025年2月7日,Peter Eisentraut提交了虚拟生成列的补丁。这种列在读取时计算,默认虚拟,节省存储空间。尽管无法创建索引和外键约束,但添加虚拟列速度快,无需重写表数据,提升了SQL的灵活性和简便性。

🎯

关键要点

  • 2025年2月7日,Peter Eisentraut提交了虚拟生成列的补丁。

  • 虚拟生成列在读取时计算,默认虚拟,节省存储空间。

  • 虚拟生成列无法创建索引和外键约束,但添加速度快,无需重写表数据。

  • 虚拟生成列的定义语法为... GENERATED ALWAYS AS (...) VIRTUAL,VIRTUAL是默认选项。

  • 虚拟生成列在元组中以null值存储,节省空间。

  • 虚拟生成列的功能和限制与存储生成列大致相同。

  • 目前不支持的功能包括:虚拟列上的索引、唯一约束、扩展统计、外键约束和非空约束。

  • 添加虚拟列非常快速,只需修改元信息,表数据保持不变。

  • 虚拟列的使用场景包括简化查询和节省存储空间。

  • 希望未来能增加对虚拟列的索引支持,以提高其可用性。

🔎

延伸解读

虚拟生成列的优势

虚拟生成列的最大优势在于节省存储空间和提高查询灵活性。由于这些列在读取时计算,而不是存储在表中,用户可以在不增加数据存储负担的情况下,轻松地使用复杂的计算表达式。这对于需要频繁查询但不希望占用额外存储的场景尤为重要。

功能限制与未来展望

尽管虚拟生成列提供了许多便利,但目前仍存在一些限制,例如无法在虚拟列上创建索引和外键约束。这些限制可能会影响其在某些应用场景中的使用效果。未来如果能够增加对虚拟列的索引支持,将大大提升其可用性,尤其是在复杂查询和数据分析中。

快速添加的实用性

添加虚拟生成列的过程非常快速,只需修改元信息,无需重写表数据。这一特性使得开发者可以灵活地调整数据库结构,而不必担心数据迁移带来的时间和资源消耗。这对于需要频繁迭代和优化数据库设计的项目尤为重要。

延伸问答

虚拟生成列的定义是什么?

虚拟生成列的定义语法为... GENERATED ALWAYS AS (...) VIRTUAL,VIRTUAL是默认选项。

虚拟生成列的主要优点是什么?

虚拟生成列在读取时计算,节省存储空间,添加速度快,无需重写表数据。

虚拟生成列有哪些限制?

虚拟生成列无法创建索引、外键约束、唯一约束和非空约束等。

如何添加虚拟生成列?

可以使用ALTER TABLE命令添加虚拟生成列,例如:ALTER TABLE test ADD COLUMN v_text TEXT GENERATED ALWAYS AS (repeat('PgSQL', n)) VIRTUAL;

虚拟生成列与存储生成列有什么区别?

虚拟生成列在读取时计算并节省存储空间,而存储生成列在写入时计算并占用存储空间。

虚拟生成列的使用场景有哪些?

虚拟生成列可以简化查询和节省存储空间,适用于需要计算但不想存储数据的场景。

🏷️

标签

➡️

继续阅读