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

FEJL:funktioner i indeksudtryk skal markeres IMMUTABEL i Postgres

Ifølge denne tråd i hackernes mailingliste:

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

dette er tiltænkt adfærd som to_char afhænger af LC_MESSAGES-indstillingen

I dit tilfælde giver dette tilsyneladende ikke mening, da det format, du bruger, aldrig vil afhænge af lokaliteten, så hvis du har brug for at bruge tekstrepræsentationen i indekset, kan du oprette din egen to_char()-funktion og markere den som uforanderlig:

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;

Hvis du skal bruge det som en tekst i indekset (og ikke kan bruge castet til en dato, som Sam foreslog), skal du oprette din egen formateringsfunktion, som du kan markere som uforanderlig. Det kan så bruges i indekset.

Men for at få Postgres til brug det indeks, du skal bruge for at kalde my_to_char() også i dine SQL-sætninger. Det vil ikke genkende det, når du bruger den indbyggede to_char()

Men jeg tror, ​​at Sams forslag om at bruge en lige dato i indekset nok er bedre



  1. MySQL-fejl::'Adgang nægtet for brugeren 'root'@'localhost'

  2. Vent Begivenhed:Ændring af størrelse på asynkronbeskrivelse

  3. Valg af processor til SQL Server 2014 – Del 1

  4. Opdater SQL-tilstand i MySQL