
在旧版本的PostgreSQL中,这是一个已知的问题-
但它似乎已由8.4解决。实际上,针对8.0的文档有一些警告,但针对8.1的文档则没有。
因此,至少由于这个原因,您不需要升级主要版本。但是,您应该升级到当前的8.4系列版本8.4.16,因为您缺少数 年 的错误修复和调整价值。
真正的问题在于,您正在使用
max表达式,而不是简单的值,并且该表达式没有功能索引。
您可以尝试在表达式上创建索引
kuupaev||kellaaeg…但是我怀疑您有数据模型问题,并且通过修复数据模型还有更好的解决方案。
看起来
kuupaev是kuup盲ev或日期,而kellaaeg可能是时间。如果是这样:永远不要使用concatenation(
||)运算符组合日期和时间;使用间隔加法,例如
kuupaev+kellaaeg。取而代之的是,
char您应该使用数据类型
time或
interval使用的
CHECK约束
kellaaeg,具体取决于数据类型的含义以及是否限制为24小时。或者,更好的是,使用单个类型的字段
timestamp(对于本地时间)或
timestampwith time zone(对于全球时间)来存储组合的日期和时间。
如果你这样做,你可以创建组合的列一个简单的索引取代了
kellaaeg,并
kuupaev和使用,对于
min和
max等等。如果你只需要日期部分或只是一些事情的时间部分,使用
date_trunc,
extract和
date_part功能;
您仍然应该计划升级到9.2。从8.4升级到9.2的升级路径并不是很粗糙,您实际上只需要注意
standard_conforming_strings默认情况下on的设置以及
bytea_outputfrom
escape到to的更改
hex。在过渡和移植过程中,两者都可以设置回8.4的默认值。8.4将不再受支持。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)