PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Gerar séries de datas - usando o tipo de data como entrada


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. e significa apenas como uma conversão explícita (usando CAST ou :: sintaxe). a significa atribuição implícita a uma coluna de destino, bem como explicitamente. i significa implicitamente em expressões, assim como nos demais casos.

Minha ênfase em negrito.