时间戳将sqlite3导入到postgresql

时间:2013-06-20 21:14:56

标签: ruby-on-rails ruby postgresql sqlite taps

我有一个rails应用程序,我使用Sqlite3作为db,但我现在正在切换到使用Postgresql。

Per this excellent post,我已经设置了postgresql数据库,现在使用taps gem将sqlite3数据库导入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架构?此外,由于这仅适用于我的dev db,因此完全删除db值并重新开始并不是一个问题 - 所以如果有一个简单的方法也可以这样做,我将很高兴知道这一点。

1 个答案:

答案 0 :(得分:1)

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

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

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