Grâce à la résolution de type de fonction on peut aussi passer date
valeurs à generate_series()
car il y a un implicite diffuser à partir de date
à timestamp
ainsi qu'à partir de date
à timestamptz
. Serait ambigu, mais timestamptz
est "préféré" parmi "Types de date/heure". Explication détaillée :
- Génération de séries chronologiques entre deux dates dans PostgreSQL
Pour une date
nue l'heure locale 00:00
est assumé dans le casting. Sachez que le paramètre de fuseau horaire actuel affecte directement le résultat si vous utilisez date
comme entrée puisque, évidemment, '2014-01-10 00:00' représente un moment différent à Tokio qu'à New York.
Comment Postgres décide-t-il quels types sont acceptables ?
Postgres fait essentiellement la distinction entre trois types de distribution :
Explicit casts
.. lors de l'utilisation de CAST
ou ::
syntaxe.Assignment cast
.. cast implicite lorsqu'une valeur est assignée à une colonne cible.Implicit cast
.. casts implicites dans toutes les autres expressions.
Il doit y avoir un implicite cast enregistré dans le système du type d'entrée au type attendu pour qu'une fonction accepte (et convertisse) silencieusement une valeur d'entrée.
Pour voir quelles distributions sont définies pour timestamptz
, vous pouvez interroger la table de catalogue pg_cast
:
SELECT castsource::regtype, casttarget::regtype, castcontext
FROM pg_cast
WHERE casttarget = 'timestamptz'::regtype;
castsource | casttarget | castcontext
-----------------------------+--------------------------+-------------
abstime | timestamp with time zone | i
date | timestamp with time zone | i
timestamp without time zone | timestamp with time zone | i
timestamp with time zone | timestamp with time zone | i
Tous ces casts sont implicites . Par documentation sur castcontext
:
Indique dans quels contextes le cast peut être invoqué.
e
signifie uniquement en tant que distribution explicite (en utilisantCAST
ou::
syntaxe).a
signifie implicitement une inaffectation à une colonne cible, ainsi qu'explicitement.i
signifie implicitement dans les expressions, ainsi que les autres cas.
J'insiste sur moi.