Postgres将列从无时区的时间更改为int

问题描述

| 我无法将表列TYPE从无时区的时间转换为整数。 那可能吗? 其中,整数将等于秒。 我正在使用ALTER表exampleTableALTER COLUMN time TYPE整数。     

解决方法

应该这样做:
 ALTER TABLE your_table 
     ALTER COLUMN time TYPE integer USING 0;
通常仅在要保留该列中的数据时才使用ALTER COLUMN。在您的情况下,上面的方法应该有效,但不会为您带来任何好处。删除该列,然后添加类型为“ 1”且默认值为0的新列将同样有效。 (顺便说一句:您不应使用诸如“ 2”之类的保留字作为列名) 编辑 如果确实要转换现有数据,则可以使用以下方法:
 ALTER TABLE your_table 
     ALTER COLUMN time_column TYPE integer USING extract(epoch from time_column);
    ,遵循马的答案,您还可以在使用部分添加一个表达式,例如:
ALTER TABLE your_table 
ALTER COLUMN time TYPE integer USING (
  extract(\'hours\' from time) * 3600 +
  extract(\'minutes\' from time) * 60 +
  extract(\'seconds\' from time)
);
http://www.postgresql.org/docs/current/static/sql-altertable.html