所以我给了一个可爱的小数据库。数据库中的一个表(数百万行)包含此列:
time_in character varying(255)
存储有一个纪元时间戳。什么是最理智的方式我可以将其转换为适当的纪元时间戳列而不会丢失数据?
答案 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)
单参数
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);
但首先,请确定timestamp
(timestamp without time zone
)或timestamptz
(timestamp with time zone
)是否适合您: