Ответ 1
Благодаря разрешение типа функции мы также можем передать значения date
в generate_series()
, потому что есть неявный листинг от date
до timestamp
, а также от date
до timestamptz
. Было бы неоднозначным, но timestamptz
"предпочтительнее" среди "Тип даты/времени". Подробное объяснение:
Для голого date
в акте принимается местное время 00:00
. Имейте в виду, что текущая настройка часового пояса напрямую влияет на результат, если вы используете date
как ввод, так как, очевидно, "2014-01-10 00:00" представляет другой момент времени в Токио, чем в Нью-Йорке.
Как Postgres определяет, какие типы являются приемлемыми?
Postgres в основном различает три типа приведения:
Explicit casts
.. при использовании синтаксиса CAST
или ::
. Assignment cast
.. неявный приведение, когда значение присваивается целевому столбцу. Implicit cast
.. неявные броски во всех других выражениях.
Должен быть неявный листинг, зарегистрированный в системе, от типа ввода до ожидаемого типа, чтобы заставить функцию молча принимать (и преобразовывать) входное значение.
Чтобы узнать, какие роли определены в timestamptz
, вы можете запросить таблицу каталога 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
Все эти приведения неявны. В документации по castcontext
:
Указывает, в каких контекстах может быть задействован приведение.
e
означает только как явное приведение (используя синтаксисCAST
или::
).a
означает неявно в присвоение целевому столбцу, а также явно.i
означает неявно в выражениях, а также в других случаях.
Смелый акцент мой.