PostgreSQL + Rails citext - PullRequest
       9

PostgreSQL + Rails citext

2 голосов
/ 12 апреля 2010

Я пытаюсь перейти на heroku, который использует PostgreSQL 8.4, который имеет тип столбца citext, что хорошо, поскольку приложение было написано для MySQL.

Есть ли способ использовать: citext с rails (чтобы при выполнении миграции на MySQL citext просто использовал строку / текст?

Я нашел этот билет, но, похоже, какое-то время он не будет частью рельсов: https://rails.lighthouseapp.com/projects/8994/tickets/3174-add-support-for-postgresql-citext-column-type

Ответы [ 4 ]

3 голосов
/ 03 сентября 2014

Рельсы 4.2 +

Rails 4.2 имеет встроенную поддержку типа столбца citext.

Рельсы <4.2 </h3> Если вы используете Rails <4.2, вы можете попробовать использовать <a href="https://github.com/braintree/activerecord-postgresql-citext" rel="nofollow"> activerecord-postgresql-citext gem. Это позволяет вам писать миграции следующим образом: def up enable_extension("citext") create_table :models, :force => true do |t| t.citext :name t.timestamps end end

1 голос
/ 17 апреля 2015

Только для записи.Похоже, что rails 4.2 имеет встроенную поддержку для этого.

Добавлена ​​поддержка типа столбца citext в адаптере PostgreSQL.

http://guides.rubyonrails.org/4_2_release_notes.html

0 голосов
/ 29 мая 2019

Как уже упоминалось, в Rails теперь есть встроенная поддержка типа столбца citext (начиная с 4.2).

Для переноса существующих столбцов необходимо включить расширение citext, а затем change_column. Изменение столбца необратимо, поэтому вам понадобятся отдельные методы up и down.

class ConvertUserNameToCaseInsensitive < ActiveRecord::Migration[6.0]
  def up
    enable_extension 'citext' # only the first migration you add a citext column
    change_column :user, :name, :citext
  end

  def down
    change_column :user, :name, :string
    disable_extension 'citext' # reverse order, only the first migration you add a citext column (this will be the last time you remove one in a rollback)
  end
end

Отключение расширения требуется только при последнем удалении столбца citext при откате, поэтому вместо добавления некрасивых комментариев было бы лучше иметь отдельные миграции и объяснить причину, по которой в вашем сообщении фиксации:

# migration 1.rb
class EnableCitext < ActiveRecord::Migration[6.0]
  def change
    enable_extension 'citext'
  end
end


# migration 2.rb
class ConvertUserNameToCaseInsensitive < ActiveRecord::Migration[6.0]
  def up
    change_column :user, :name, :citext
  end

  def down
    change_column :user, :name, :string
  end
end
0 голосов
/ 16 апреля 2010

Я почти уверен, что Rails имеет ограниченный словарный запас типов данных. Вам, вероятно, придется использовать старый добрый SQL для работы с любыми другими типами.

...