0

我有一个使用 Sqlite3 作为数据库的 Rails 应用程序,但现在正在切换到使用 Postgresql。

根据这篇优秀的帖子,我已经设置了 postgresql 数据库,现在正在使用 taps gem 将 sqlite3 db 导入 postgres。

问题是:我的 sqlite3 db 有一个列:time,我在其中存储 unix 时间戳(整数)。postgres 架构表示它们是“没有时区的时间戳”,并且拒绝当前值。这是错误:

PG::Error: ERROR:  column "time" is of type timestamp without time zone but expression is of type integer (Sequel::DatabaseError)LINE 1: ..."address_type", "medical") VALUES (2, 2, 0, NULL, 1367688600...

你如何解决这个问题?我是否需要转换我的 sqlite3 数据库中的所有时间条目以匹配 postgres 模式?此外,由于这仅适用于我的开发数据库,​​因此完全删除 db 值并重新开始不是问题——所以如果也有一种简单的方法可以做到这一点,我将不胜感激。

4

1 回答 1

1

要将值转换回来,您需要通过如下查询运行它:

SELECT TIMESTAMP WITH TIME ZONE 'epoch' + timecol * INTERVAL '1 second';

所以我要做的是改变你在 PostgreSQL 中的模式,使这些列成为整数。然后我将通过一个添加新时间戳列的作业运行它们,并在其上运行上述查询(其中 timecol 是旧时间戳的列名)。然后,一旦您抽查了数据,您就可以删除旧列并将新列重命名为旧名称。

于 2013-10-27T02:44:58.823 回答