克里斯托夫·希斯尔:自定义 `ENUM` 类型列与 `ORDER BY`

克里斯托夫·希斯尔:自定义 `ENUM` 类型列与 `ORDER BY`

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

内容提要

PostgreSQL的自定义ENUM类型是强制数据库约束的好工具,但在使用SELECT查询并想按这些列排序时要小心。如果按ENUM值的定义顺序排序,会出现错误。为了按字母顺序排序,需要将ENUM值转换为TEXT。但这样会导致索引不再适用。解决方法是创建一个不可变的自定义转换函数,并在SELECT查询中使用它。这样就可以按婚姻状况的字母顺序选择人员并使用索引。

🎯

关键要点

  • PostgreSQL的自定义ENUM类型可以强制数据库约束,但在使用SELECT查询时需谨慎。
  • 按ENUM值的定义顺序排序可能会导致错误,需按字母顺序排序时需将ENUM值转换为TEXT。
  • 转换ENUM值为TEXT会导致索引失效,需创建不可变的自定义转换函数以解决此问题。
  • 使用自定义转换函数后,可以按婚姻状况的字母顺序选择人员并使用索引。
  • 简单的类型转换会导致查询计划使用顺序扫描,而自定义函数则能保持索引的有效性。
➡️

继续阅读