我试图创建以下索引;
CREATE INDEX idx_concat_paostartno_paostartsuff ON
dmv_os_addbase_residential (concat(pao_start_number || pao_start_suffix));
我得到错误;
错误:索引表达式中的函数必须标记为IMMUTABLE`
我认为这是类型的混合,因为pao_start_number
是类型bigint
而pao_start_suffix
是varchar
。我试图解决;
CREATE INDEX idx_concat_paostartno_paostartsuff ON
dmv_os_addbase_residential (concat((pao_start_number :: text) || pao_start_suffix))
但同样的错误。
我是否正确识别错误原因以及如何解决? 我正在使用Postgres 9.6
答案 0 :(得分:2)
你可能想要
if (requestCode == REQUEST_PERMISSION_SETTING) {
if (ActivityCompat.checkSelfPermission(TestActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
proceedAfterPermission();
}
}
此索引只能用于
等查询CREATE INDEX idx_concat_paostartno_paostartsuff
ON dmv_os_addbase_residential ((pao_start_number || pao_start_suffix));
其中SELECT *
FROM dmv_os_addbase_residential
WHERE pao_start_number || pao_start_suffix <operator> <constant>;
是<operator>
,=
,<
,<=
或>
之一。
答案 1 :(得分:1)
Postgres认为时区感知时间戳是可变的。所以这就是失败的原因。我发现以下GIST为我解决了这个问题: https://gist.github.com/cobusc/5875282
GIST内容的快捷方式(谢谢cobusc):
CREATE INDEX my_index_name_idx ON my_table (date(created_ts at TIME ZONE 'UTC'));
为我工作