Rails特定于数据库的数据类型

时间:2012-07-29 23:15:44

标签: ruby-on-rails activerecord rails-postgresql

这是我第一次尝试使用PostgreSQL创建Rails。我感到困惑的是我在通常看到的关于存储绝对时间的列的代码中缺少timestamp with timezone用法。一个主要的例子是devise,它在列中存储了一个datetime列,该列转换为PostgreSQL中的timestamp with out timezone

我认为这是一种不好的做法,因为timestamp with out timezone可能意味着任何时区。如果您从另一个应用程序访问数据库,那么在没有查看Rails的情况下,您将不知道时间戳引用的时区。它只是一个分散的混乱。

我有什么方法可以在PostgreSQL的ActiveRecord迁移/架构中创建timestamp with time zone吗?是否会与当前的Rails框架代码产生不兼容问题?

我理解ActiveRecord试图与数据库无关,但这只是一个我不能忽视的宠儿。

2 个答案:

答案 0 :(得分:2)

我建议看看这个答案(非常好的解释):Ignoring timezones altogether in Rails and PostgreSQL


<强>更新

根据ActiveRecord文档,上面的链接和我自己的测试 - 我得出结论,模式迁移中的默认ActiveRecord datetimetimestamp列类型无法修改以强制PostgreSQL使用{{ 1}}。

PostgreSQL文档:

  

注意:SQL标准要求只写时间戳   相当于没有时区的时间戳,PostgreSQL也是如此   行为。 (7.3之前的版本将其视为时间戳的时间戳   zone。)timestamptz被接受为timestamp的缩写   时区;这是一个PostgreSQL扩展。

http://www.postgresql.org/docs/9.1/static/datatype-datetime.html

答案 1 :(得分:0)

我们可以使用this gem覆盖配置并使用特定于Adapter的数据类型。