Добавление пользовательского типа данных столбца в Active Record - PullRequest
1 голос
/ 11 февраля 2011

На моей локальной машине я разрабатываю свое Rails-приложение с использованием MySQL, но при развертывании я использую Heroku, которая использует PostgreSQL.Мне нужно создать новый тип данных, в частности, я хочу назвать его longtext, и ему нужно будет сопоставить отдельные типы столбцов в любой базе данных.

Я искал это.Моя основная идея заключается в том, что мне нужно переопределить некоторый хеш внутри SQL-адаптера ActiveRecord :: ConnectionAdapters :: *, но я подумал, что я бы ознакомился здесь со множеством знаний, чтобы убедиться, что это хороший подход, если возможно, указатели на то, как это сделать) или если есть быстрый выигрыш другим способом.

В данный момент тип данных - "строка", и я получаю неудачные вставки, потому что тип данных слишком длинный.Мне нужна одинаковая функциональность как в MySQL, так и в PgSQL, но похоже, что нет общего типа данных, который дает мне неограниченный тип столбца текстового блоба?

Идея состоит в том, что я хочу, чтобы это приложение работало корректно (с миграциями) для обеих технологий баз данных.

Очень ценится.

Ответы [ 2 ]

3 голосов
/ 11 февраля 2011

Почему бы вам не установить PostgreSQL на свой компьютер? Загрузите его, нажмите «ОК» несколько раз, и все готово. Это не ракетостроение: -)

http://www.postgresql.org/download/

PostgreSQL не имеет ограничений на типы данных, вы можете создавать все что угодно, это ваше воображение:

CREATE DOMAIN (только простые вещи)

CREATE TYPE (неограниченно)

0 голосов
/ 18 февраля 2011

SQL, который упомянул Фрэнк, на самом деле является ответом, но я действительно искал более конкретный способ выполнения специфичных для СУБД миграций Rails.Причина в том, что я хочу сохранить тот факт, что мое приложение может работать как на PostgreSQL, так и на MySQL.

class AddLongtextToPostgresql < ActiveRecord::Migration
  def self.up
    case ActiveRecord::Base.connection.adapter_name
    when 'PostgreSQL'
      execute "CREATE DOMAIN longtext as text"
      execute "ALTER TABLE chapters ALTER COLUMN html TYPE longtext"
      execute "ALTER TABLE chapters ALTER COLUMN body TYPE longtext"
    else
      puts "This migration is not supported on this platform."
    end
  end

  def self.down
  end
end

Именно это я и искал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...