Tenho lido a documentação do Postgres sobre timestamps, mas ainda estou um pouco confuso.
Preciso armazenar momentos em tempos, medidos em milissegundos, entre a hora atual e a meia-noite de 1º de janeiro de 1970 UTC (como aqueles definidos em Java , mas não estou usando Java).
Se eu ler a documentação corretamente, acredito que devo usar CURRENT_TIMESTAMP
, porque inclui o fuso horário. Correto?
Alguém pode explicar como criar um procedimento armazenado que irá converter este carimbo de data/hora nos milissegundos que eu quero (e a função reversa também)?
Motivação : Entendo que alguém poderia usar algo como EXTRACT
on CURRENT_TIMESTAMP
ao selecionar linhas, mas essa conversão seria mais cara do que armazenar o tempo em milissegundos. Estou pronto para armazenar meus momentos em um arquivo bigint
. Seria mais rápido comparar momentos ou calcular diferenças de tempo.
Você não precisa
extract
para obter os dados:ficará feliz em usar um índice
moment_in_time
e será muito eficiente - na verdade, não haverá diferença no desempenho em comparação comAgora olhe para as duas declarações e diga-me para qual você entende imediatamente o que a consulta retornará.
Se você precisar desses milissegundos em seu aplicativo, poderá sempre fazer algo assim:
E, novamente, tenho quase 100% de certeza de que você não verá nenhuma diferença de desempenho em:
Mais: se você armazenar os milissegundos e quiser exibir a data real, sempre precisará aplicar uma conversão adicional:
contra
O segundo é mais lento que o primeiro, mas é mais digitado e torna o código mais difícil de ler.
Editar :
Você não precisa escrever sua própria função:
extract(epoch from current_timestamp) * 1000 + extract(milliseconds from current_timestamp)
to_timestamp(1187980443530 / 1000)
Então, para encerrar:
Vá com uma
timestamp
coluna e não se preocupe com o desempenho.