Graças à resolução do tipo de função também podemos passar
date valores para generate_series() porque há um implícito transmitir a partir de date para timestamp bem como a partir de date para timestamptz . Seria ambíguo, mas timestamptz é "preferido" entre "Tipos de data/hora". Explicação detalhada:- Gerando séries temporais entre duas datas no PostgreSQL
Para uma
date simples a hora local 00:00 é assumido no elenco. Esteja ciente de que a configuração de fuso horário atual afeta diretamente o resultado se você usar date como entrada já que, obviamente, '2014-01-10 00:00' representa um momento diferente em Tóquio do que em Nova York. Como o Postgres decide quais tipos são aceitáveis?
Postgres basicamente distingue entre três tipos de elencos:
Explicit casts .. ao usar CAST ou :: sintaxe.Assignment cast .. conversão implícita quando um valor é atribuído a uma coluna de destino.Implicit cast .. lançamentos implícitos em todas as outras expressões. Tem que haver um implícito cast registrado no sistema do tipo de entrada para o tipo esperado para fazer uma função aceitar (e converter) silenciosamente um valor de entrada.
Para ver quais casts estão definidos para
timestamptz , você pode consultar a tabela de catálogo 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
Todos esses elencos são implícitos . Por documentação em
castcontext :
Indica em quais contextos a conversão pode ser invocada.esignifica apenas como uma conversão explícita (usandoCASTou::sintaxe).asignifica atribuição implícita a uma coluna de destino, bem como explicitamente.isignifica implicitamente em expressões, assim como nos demais casos.
Minha ênfase em negrito.