PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 01/04/2015 21:46:30

Jiff
Membre

indexation fonctionnelle impossible sur timestamptz

Salut Forumers,
.
Dans la plupart de mes tables, je garde trace de l'ID des utilisateurs de création et de modification, ainsi que des dates d'insertion et d'update - jusque-là, rien que de très classique.
Le hic, c'est qu'après différents tests, je ne peux bien évidemment pas faire une requête du style:

SELECT a,b,c,date_upd FROM matable WHERE date_upd = '2015-04-01';

donc, je me renseigne et j'essaie:

CREATE INDEX test_ix ON matable(DATE(date_upd)); - OU BIEN (d°): …matable((date_upd::DATE));

et je me retrouve avec un splendide:   ERROR:  functions in index expression must be marked IMMUTABLE sad
.
La page de doc des functions-datetime ne rapporte aucune possibilité de conversion directe de timestamptz en date, et je ne vois que celle (un peu débile) d'extraire AN, MOIS et JOUR, puis de re-créer une date et de l'indexer; existe-t-il une façon plus simple de faire?
.
.
EDIT: Après une recherche exhaustive, je ne vois qu'une seule solution (mais qui laisse la gym mentale à l'utilisateur:(:

CREATE INDEX test_ix ON matable(TIMEZONE('UTC', date_upd));

Quelqu'un aurait-il mieux?
.
Y'a des jours comme ça où je ferais mieux de tourner sept fois ma langue dans la bouche de ma voisine avant d'écrire… Évidemment que c'est la bonne solution, ainsi que de passer également le svr en UTC.

Dernière modification par Jiff (02/04/2015 00:29:32)

Hors ligne

Pied de page des forums