sql >> Base de Datos >  >> RDS >> PostgreSQL

ERROR:las funciones en la expresión de índice deben marcarse INMUTABLE en Postgres

Según este hilo en la lista de correo de hackers:

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

este es el comportamiento previsto como to_char depende de la configuración de LC_MESSAGES

En su caso, aparentemente esto no tiene sentido ya que el formato que está usando nunca dependerá de la configuración regional, por lo que si necesita usar la representación de texto en el índice, puede crear su propia función to_char() y marcarla como inmutable:

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;

Si tiene que usarlo como texto en el índice (y no puede usar el molde para una fecha como sugirió Sam), deberá crear su propia función de formato que puede marcar como inmutable. Eso se puede usar en el índice.

Pero para hacer que Postgres use el índice deberá llamar a my_to_char() en sus declaraciones SQL también. No lo reconocerá cuando use el to_char() incorporado

Pero sí creo que la sugerencia de Sam de usar una fecha directa en el índice probablemente sea mejor