PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

ERRORE:le funzioni nell'espressione dell'indice devono essere contrassegnate come IMMUTABLE in Postgres

Secondo questo thread nella mailing list degli hacker:

http://www.mail-archive.com/[email protected]/msg86725.html

questo è un comportamento inteso come to_char dipende dall'impostazione LC_MESSAGES

Nel tuo caso questo apparentemente non ha senso in quanto il formato che stai usando non dipenderà mai dalla locale, quindi se hai bisogno di usare la rappresentazione del testo nell'indice, puoi creare la tua funzione to_char() e contrassegnarla come immutabile:

CREATE OR REPLACE FUNCTION my_to_char(some_time timestamp) 
  RETURNS text
AS
$BODY$
    select to_char($1, 'yyyy-mm-dd');
$BODY$
LANGUAGE sql
IMMUTABLE;

Se devi usarlo come testo nell'indice (e non puoi usare il cast a una data come suggerito da Sam) dovrai creare la tua funzione di formattazione che puoi contrassegnare come immutabile. Questo può quindi essere utilizzato nell'indice.

Ma per far usare Postgres l'indice che dovrai chiamare my_to_char() anche nelle tue istruzioni SQL. Non lo riconoscerà quando usi il built-in to_char()

Ma penso che il suggerimento di Sam di utilizzare una data semplice nell'indice sia probabilmente migliore