2014-11-30 1 views
10

Я пытаюсь добавить новый столбец «широта» в существующую таблицу Postgres после столбца «location».PostgreSQL: add_column «после» использования параметра в миграции Rails

Используя этот синтаксис помещает колонку в нужном месте:

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: неверное число аргументов (5 для 3..4)"

«Не беспокоить», я подумал: «Я просто объединить заданы параметры!»:

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

Но тогда столбцы появляются в конце таблицы. Что я делаю не так?

Спасибо :)

+1

[Порядок столбцов совершенно не имеет отношения к реляционным базам данных] (http://stackoverflow.com/questions/1243547/how-to-add-a-new-column-in-a-table -after-the-2nd-or-3rd-column-in-the-table-usin) – dax

+1

Да, я знаю об этом, но я вроде как поддерживаю связанные вещи вместе с точки зрения здравомыслия ... –

+0

в методе 'add_column' нет такой опции': after =>: existing_column'. разрешенные параметры, которые вы можете найти в [документации для этого метода] (http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/add_column#637-Options) –

ответ

18

Ваше последнее определение правильное. Но проблема здесь не в Rails, а в PostgreSQL, которая не позволяет добавить столбец в определенную позицию. Подробнее: How can I specify the position for a new column in PostgreSQL?

+0

Ах, глупый я, я бы не тестировал: после опции, начиная с перехода с MYSQL на Postgres. Хороший улов, спасибо :) –

Смежные вопросы