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 活动存储