Díky rozlišení typu funkce můžeme také předat date hodnoty do generate_series() protože existuje implicitní obsazení od date na timestamp stejně jako od date na timestamptz . Bylo by to nejednoznačné, ale timestamptz je "preferováno" mezi "Typy data/času". Podrobné vysvětlení:
- Generování časových řad mezi dvěma daty v PostgreSQL
Pro holé date místní čas 00:00 se předpokládá v obsazení. Uvědomte si, že aktuální nastavení časového pásma přímo ovlivňuje výsledek, pokud použijete date jako vstup, protože '2014-01-10 00:00' samozřejmě představuje jiný časový okamžik v Tokiu než v New Yorku.
Jak Postgres rozhoduje, jaké typy jsou přijatelné?
Postgres v zásadě rozlišuje tři typy obsazení:
Explicit casts .. při použití CAST nebo :: syntaxe.Assignment cast .. implicitní přetypování, když je hodnota přiřazena k cílovému sloupci.Implicit cast .. implicitní přetypování ve všech ostatních výrazech.
Musí existovat implicitní cast zaregistrovaná v systému z typu vstupu na očekávaný typ, aby funkce tiše přijala (a převedla) vstupní hodnotu.
Chcete-li zjistit, která obsazení jsou definována pro timestamptz , můžete se dotazovat na tabulku katalogu 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
Všechna tato obsazení jsou implicitní . Podle dokumentace na castcontext :
Označuje, v jakých kontextech lze přetypování vyvolat.
eznamená pouze jako explicitní přetypování (pomocíCASTnebo::syntax).aznamená implicitní přiřazení k cílovému sloupci i explicitně.iznamená implicitně ve výrazech, stejně jako v ostatních případech.
Tučné zdůraznění moje.