Ich versuche, den folgenden Index zu erstellen;Fehler "Funktionen im Indexausdruck müssen als IMMUTABLE gekennzeichnet sein, nicht als Zeitstempel
CREATE INDEX idx_concat_paostartno_paostartsuff ON
dmv_os_addbase_residential (concat(pao_start_number || pao_start_suffix));
Ich bekomme den Fehler;
ERROR: functions in index expression must be marked IMMUTABLE`
Ich denke, das das Mischen von Arten ist, wie pao_start_number
ist der Typ bigint
und pao_start_suffix
varchar
ist. Ich habe versucht zu lösen als;
CREATE INDEX idx_concat_paostartno_paostartsuff ON
dmv_os_addbase_residential (concat((pao_start_number :: text) || pao_start_suffix))
aber gleicher Fehler.
Bin ich richtig bei der Identifizierung der Fehlerursache und wie kann ich sie beheben? Ich bin mit Postgres 9.6
Ich tat, danke. Ich sehe das "CONCAT" war mein Problem, warum ist das? –
Der Operator '||' ist 'IMMUTABLE', während die Funktion' concat' 'STABLE' ist. Der Grund dafür ist, dass "concat" mit einem "beliebigen" Argumenttyp operieren kann, wobei die Argumente in "text" umgewandelt werden und nicht alle Typcasts in 'text'' 'IMMUTABLE' sind (zB Casting von' Zeitstempel mit Zeitzone' nach ' Text 'hängt vom Parameter' TimeZone' ab. –