Postgres epoch日期为varchar

时间:2015-03-19 19:37:54

标签: sql postgresql timestamp epoch alter

所以我给了一个可爱的小数据库。数据库中的一个表(数百万行)包含此列:

time_in character varying(255)

存储有一个纪元时间戳。什么是最理智的方式我可以将其转换为适当的纪元时间戳列而不会丢失数据?

2 个答案:

答案 0 :(得分:1)

首先,没有单独的epoch timestamp数据类型,因此您要转换为的类型只是常规时间戳。在PostgreSQL Documentation - ALTER TABLE中有一个几乎完美适合您案例的示例(我刚刚向integer添加了一个演员):

ALTER TABLE foo
    ALTER COLUMN time_in SET DATA TYPE timestamp with time zone
    USING
        timestamp with time zone 'epoch' + time_in::integer * interval '1 second';

请注意,转换可能需要一些时间,如果所有行都不是有效的纪元时间,则会产生错误。

答案 1 :(得分:0)

或者,quoting the manual here

  

单参数to_timestamp功能也可用;它接受   一个double precision参数并从Unix纪元转换(秒   自1970-01-01 00:00:00 + 00)至timestamp with time zone。 (Integer   Unix时期隐式转换为double precision。)

ALTER TABLE foo ALTER COLUMN time_in
  SET DATA TYPE timestamptz USING to_timestamp(time_in::float8);

但首先,请确定timestamptimestamp without time zone)或timestamptztimestamp with time zone)是否适合您: