Si consideri la seguente tabella:PostgreSQL: indice la parte giorno di un timestamp
Column | Type |
--------------------+--------------------------+
id | bigint |
creation_time | timestamp with time zone |
...
query come le seguenti (per non parlare più complessi unisce) prende un po 'di tempo, perché deve calcolare CREATION_TIME :: DATA per ogni voce:
SELECT creation_time::DATE, COUNT(*) FROM items GROUP BY 1;
Come faccio a creare un indice sulla parte giorno del timestamp - creation_time::DATE
?
ho provato:
CREATE INDEX items_day_of_creation_idx ON items (creation_time)::date;
CREATE INDEX items_day_of_creation_idx ON items (creation_time::date);
Ma sia venuto a mancare con:
ERROR: syntax error at or near "::"
Grazie. Ora ricevo 'ERRORE: le funzioni nell'espressione dell'indice devono essere contrassegnate come IMMUTABILI'. Divertente, perché la parte del giorno di una data è immutabile come diventa. –
@AdamMatan: ah, ho trascurato il tipo di dati. La conversione di un 'timestamp con fuso orario' in un' date' non è "immutabile" (perché dipende dal fuso orario). Ciò funzionerebbe solo se si stesse utilizzando il 'timestamp senza fuso orario ' –
Qualunque modo di effettuare la conversione nell'indice? –