PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

FEHLER:Funktionen im Indexausdruck müssen in Postgres IMMUTABLE markiert sein

Laut diesem Thread in der Hacker-Mailingliste:

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

dies ist beabsichtigtes Verhalten als to_char hängt von der LC_MESSAGES-Einstellung ab

In Ihrem Fall ist dies anscheinend nicht sinnvoll, da das von Ihnen verwendete Format niemals vom Gebietsschema abhängt. Wenn Sie also die Textdarstellung im Index verwenden müssen, können Sie Ihre eigene Funktion to_char() erstellen und als markieren unveränderlich:

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;

Wenn Sie es als Text im Index verwenden müssen (und die von Sam vorgeschlagene Umwandlung in ein Datum nicht verwenden können), müssen Sie Ihre eigene Formatierungsfunktion erstellen, die Sie als unveränderlich markieren können. Das kann dann im Index verwendet werden.

Aber um Postgres zu verwenden den Index müssen Sie my_to_char() aufrufen auch in Ihren SQL-Anweisungen. Es wird es nicht erkennen, wenn Sie das eingebaute to_char() verwenden

Aber ich denke, Sams Vorschlag, ein direktes Datum im Index zu verwenden, ist wahrscheinlich besser