Como converter um horário unix para o carimbo de data / hora do PostgreSQL 'sem fuso horário?

17

Eu tenho um banco de dados PostgreSQL em execução em um servidor cujo fuso horário está definido como fuso horário da Índia (ou seja, UTC +5: 30)

Eu tenho alguns dados em uma tabela que é criada assim:

CREATE TABLE "CLOUDDATA"
(
  "CD_Tm_Obs" timestamp without time zone,
  "CD_Avg_Cloud" double precision
)

Quero consultar os dados e obter os valores por um tempo específico. Minha entrada será um carimbo de data / hora Unix (ou seja, segundos de 1 a janeiro de 1970)

A única maneira de converter o tempo de unix para Timestamp eu encontrei é este: select to_timestamp(TRUNC(CAST(1395036000 AS bigint))). Mas isso cria um carimbo de data / hora com o fuso horário. Meus dados estão inseridos timestamp without time zone, então não recebo nenhum resultado.

Como converter um horário unix para o carimbo de data / hora do PostgreSQL sem fuso horário?

Devdatta Tengshe
fonte

Respostas:

36

Aqui estão algumas abordagens:

Simplifiquei sua consulta, pois você não deve precisar TRUNC()nem CAST().

SELECT to_timestamp(1395036000) AT TIME ZONE 'UTC';

SELECT timestamp '1970-01-01 00:00:00' + interval '1395036000 second';

Para referência, mais informações podem ser encontradas nos seguintes links:

AbuAbdoh
fonte
O segundo trecho também funciona no RedShift.
Gianluca Casati