Dzięki rozdzielczości typu funkcji możemy również przekazać date wartości do generate_series() ponieważ istnieje ukryta rzutuj od date do timestamp jak również od date do timestamp . Byłoby niejednoznaczne, ale timestamptz jest "preferowany" wśród „Typy daty/godziny”. Szczegółowe wyjaśnienie:
- Generowanie szeregów czasowych między dwiema datami w PostgreSQL
Dla czystej date czas lokalny 00:00 zakłada się w obsadzie. Pamiętaj, że bieżące ustawienie strefy czasowej ma bezpośredni wpływ na wynik, jeśli użyjesz date jako dane wejściowe, ponieważ oczywiście „2014-01-10 00:00” reprezentuje inny moment w Tokio niż w Nowym Jorku.
W jaki sposób Postgres decyduje, jakie typy są akceptowalne?
Postgres zasadniczo rozróżnia trzy typy rzutów:
Explicit casts .. podczas korzystania z CAST lub :: składnia.Assignment cast .. niejawne rzutowanie, gdy wartość jest przypisana do kolumny docelowej.Implicit cast .. niejawne rzutowania we wszystkich innych wyrażeniach.
Musi być ukryta rzutowanie zarejestrowane w systemie z typu wejściowego na typ oczekiwany, aby funkcja po cichu zaakceptowała (i przekonwertowała) wartość wejściową.
Aby zobaczyć, które rzuty są zdefiniowane do timestamptz , możesz wysłać zapytanie do tabeli 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
Wszystkie te obsady są ukryte . Zgodnie z dokumentacją dotyczącą castcontext :
Wskazuje, w jakich kontekstach można wywoływać rzutowanie. e oznacza tylko jako jawne rzutowanie (za pomocą CAST lub :: składnia). a oznacza niejawnie przypisanie do kolumny docelowej, a także jawnie. i oznacza domyślnie w wyrażeniach, jak również w innych przypadkach.
Pogrubiony nacisk na moje.