PostgreSQL:在 Rails 迁移中使用 add_column "after" 选项

Posted

技术标签:

【中文标题】PostgreSQL:在 Rails 迁移中使用 add_column "after" 选项【英文标题】:PostgreSQL: add_column "after" option usage in Rails migration 【发布时间】:2015-01-28 14:58:08 【问题描述】:

我正在尝试在现有 Postgres 表的“位置”列之后添加一个新列“纬度”。

使用此语法将列放置在正确的位置:

add_column :table, :column, :decimal, :after => :existing_column

并且使用这种语法可以确保字段是正确的数据类型

add_column :table, :column, :decimal, :precision => 10, :scale => 6

但是当我尝试将两者结合起来时:

add_column :table, :column, :decimal, :precision => 10, :scale => 6, :after => :existing_column

我得到“ArgumentError:参数数量错误(3..4 为 5)”

“别担心”,我想,“我将把争论结合起来!”:

add_column :table, :column, :decimal, :precision => 10, :scale => 6, :after => :existing_column

但随后列出现在表格的末尾。我做错了什么?

谢谢:)

【问题讨论】:

The order of the columns is totally irrelevant in relational databases 是的,我知道这一点,但从理智的角度来看,我有点喜欢将相关的东西放在一起...... add_column 方法中没有这样的选项:after => :existing_column。您可以在 documentation for this method 中找到允许的选项 @Зелёный 有这样的选项。我在带有 mysql 的 Rails 3.1 项目中使用了它,它运行良好。 @RustamA.Gasanov 请向我展示此选项的文档。 【参考方案1】:

你最后的定义是正确的。但是这里的问题不在于 Rails,而在于 PostgreSQL,它不允许在特定位置添加列。阅读更多:How can I specify the position for a new column in PostgreSQL?

【讨论】:

啊,我真傻,自从从 MYSQL 迁移到 Postgres 后,我没有测试 :after 选项。很好,谢谢:)

以上是关于PostgreSQL:在 Rails 迁移中使用 add_column "after" 选项的主要内容,如果未能解决你的问题,请参考以下文章

在 postgresql 应用程序的 rails 中运行迁移后的顺序注意事项

如何从 SQLite 迁移到 PostgreSQL (Rails)

在 Postgresql 中使用 UUID 的 Rails 5.2 活动存储

如何在 Rails 3 中迁移数据?

Rails 3.2 中的 PostgreSQL DATALINK 类型

Rails 迁移:检查存在并继续?