我可以将 CITEXT 列更改为 VARCHAR 而不会遇到任何意外困难吗?

AKW*_*KWF 5 postgresql postgresql-10 citext

我在应用程序中的一个特别大的表上过度使用了 CITEXT 列。我想支持其中一些,因为如何触发所需索引的查找令人困惑。

我的问题是,我可以在不遇到任何重大困难的情况下做到这一点吗?如果我更改此设置,我是否需要重建这些字段上的任何索引?

朝这个方向发展会带来空间收益吗?

这些列不需要不区分大小写的查询。

我对该表进行了基于 2 列的计数,这些计数需要一个多小时。该表有 60 列。

我正在使用 Postgres 10.6。

我主要感兴趣的是,如果索引包含已从 CITEXT 更改为 VARCHAR 的列,是否需要重建索引。

Erw*_*ter 4

朝这个方向发展会带来空间收益吗?

citexttext(或varchar)在磁盘和 RAM 中占用相同的空间。

这些列不需要不区分大小写的查询。

那么就没有使用的意义了citext

我对该表进行了基于 2 列的计数,这些计数需要一个多小时。该表有 60 列。

count()根本不受citextvs. text(或) 的影响。varchar“60 列”可能值得研究。如果您确实需要所有这些,那没问题 - 但您需要吗?您是否使用了正确的数据类型等?

我主要感兴趣的是,如果索引包含已从 CITEXT 更改为 VARCHAR 的列,是否需要重建索引。

涉及该列的索引会自动转换。(这可能意味着重建索引。)手册ALTER TABLE

SET DATA TYPE

这种形式改变表的列的类型。通过重新分析最初提供的表达式,涉及该列的索引和简单表约束将自动转换为使用新的列类型。

当涉及不适用于新类型(对于表达式或部分索引)的表达式时,它可能会失败。您必须删除此类索引,并在更改后以适当的形式重新创建它们。

就我个人而言,在经历了复杂的经历后,我会远离它citext。考虑手册中讨论的限制