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;
虚拟生成列与存储生成列有什么区别?
虚拟生成列在读取时计算并节省存储空间,而存储生成列在写入时计算并占用存储空间。
虚拟生成列的使用场景有哪些?
虚拟生成列可以简化查询和节省存储空间,适用于需要计算但不想存储数据的场景。
➡️