sql >> Databáze >  >> RDS >> PostgreSQL

CHYBA:funkce ve výrazu indexu musí být v Postgresu označeny IMMUTABLE

Podle tohoto vlákna v mailing listu hackerů:

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

toto je zamýšlené chování jako to_char závisí na nastavení LC_MESSAGES

Ve vašem případě to zjevně nedává smysl, protože formát, který používáte, nebude nikdy záviset na národním prostředí, takže pokud potřebujete použít textovou reprezentaci v indexu, můžete si vytvořit vlastní funkci to_char() a označit ji jako neměnný:

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;

Pokud jej musíte použít jako text v rejstříku (a nemůžete použít obsazení k datu, jak navrhl Sam), budete si muset vytvořit vlastní funkci formátování, kterou můžete označit jako neměnnou. To pak lze použít v indexu.

Ale aby Postgres využil index, který budete muset volat my_to_char() také ve vašich příkazech SQL. Při použití vestavěného to_char() to nerozpozná

Ale myslím si, že Samův návrh použít v indexu rovné datum je pravděpodobně lepší



  1. Chyba systému Android:Tuto operaci nelze provést, protože fond připojení byl uzavřen

  2. Metoda SqlDataAdapter.Fill je pomalá

  3. Používání pokročilých funkcí Oracle JDeveloper pro databáze MySQL

  4. Trendy v roce 2020, kterých by si správci databází měli být vědomi