Rails 3.2模式转储将所有UUID列转换为文本,并使用postgres_ext gem搞乱数组声明

5
使用Ruby 2.0.0-p195和Rails 3.2.13以及v0.3.1的 postgres_ext gem
看起来我在使用Rails时经常遇到模式转储的问题(不是SQL结构转储),其中模式转储器将UUID列转换为文本列,并将数组转换为默认值为"{}"的文本列。 常规操作,如rake db:schema:dump会导致以下破坏性差异:
-    t.string   "dbas",         :default => [],                 :array => true
-    t.string   "industries",   :default => [],                 :array => true
+    t.text     "dbas",         :default => "{}"
+    t.text     "industries",   :default => "{}"
-    t.uuid     "uuid"
+    t.text     "uuid"

如果我手动检查数据库的结构或者询问Rails一个属性的列类型,一切看起来都很正常。这个问题自然会带来各种混乱。除了切换到SQL结构转储,我如何获取正确的模式转储呢?

这个问题的 GitHub 问题链接:https://github.com/dockyard/postgres_ext/issues/83 - Dan McClain
1个回答

1
使用Rails 3.2,您需要使用rake db:structure:dump来转储模式的SQL版本,而不是Ruby版本。
当使用rake db:schema:dump时,Rails 4处理更多类型,这正是您要寻找的。

Postgres_ext为本地PostgreSQL类型提供模式转储支持。问题在于另一个宝石似乎正在与postgres_ext交互。请参见此处的问题:https://github.com/dockyard/postgres_ext/issues/83 - Dan McClain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接