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

这是我第一次使用PostgreSQL试用Rails。 我对代码中timestamp with timezone使用timestamp with timezone的缺乏感到困惑,我通常会看到关于存储绝对时间的列。 一个主要的例子是设计 ,它将列存储为datetime列,该列转换为PostgreSQL中timestamp with out timezonetimestamp with out timezone

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

有没有办法让我在PostgreSQL的ActiveRecord迁移/模式中创建timestamp with time zonetimestamp with time zone ? 是否会与当前的Rails框架代码产生不兼容问题?

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

我建议看看这个答案(非常好的解释): 在Rails和PostgreSQL中完全忽略时区


UPDATE

根据ActiveRecord文档,上面的链接和我自己的测试 – 我得出结论,模式迁移中的默认ActiveRecord datetime timestamptimestamp列类型无法修改,以强制PostgreSQL使用timestamp with time zone

PostgreSQL文档:

注意:SQL标准要求只写时间戳等同于没有时区的时间戳,PostgreSQL会尊重这种行为。 (7.3之前的版本将其视为带时区的时间戳。)timestamptz被接受为带时区的时间戳的缩写; 这是一个PostgreSQL扩展。

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

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