【问题标题】:Adding a custom column data type in Active Record在 Active Record 中添加自定义列数据类型
【发布时间】:2011-02-11 01:21:05
【问题描述】:

在我的本地机器上,我使用 MySQL 开发我的 Rails 应用程序,但在部署时我使用的是使用 PostgreSQL 的 Heroku。我需要创建一个新的数据类型,特别是我希望将其称为长文本,并且它需要映射到任一数据库中的单独列类型。

我一直在寻找这个。我的基本想法是我将需要覆盖 ActiveRecord::ConnectionAdapters::*SQL 适配器中的一些哈希,但我想我会在这里查阅丰富的知识,看看这是否是一个好方法(并且,如果可能的话,请指点如何做到这一点)或者是否有另一种快速获胜的方式。

现在数据类型是“字符串”,由于数据类型太长,插入失败。我希望在 MySQL 和 PgSQL 上具有相同的功能,但看起来没有通用数据类型可以为我提供无限的文本 blob 列类型?

我的想法是让这个应用程序在两种数据库技术上都能正常工作(通过迁移)。

非常感谢。

【问题讨论】:

    标签: mysql ruby-on-rails-3 postgresql activerecord rails-migrations


    【解决方案1】:

    为什么不在你的开发机器上安装 PostgreSQL?下载它,单击“确定”几次,即可启动并运行。这不是火箭科学:-)

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

    PostgreSQL 对数据类型没有限制,你可以创建任何你想要的东西,这取决于你的想象:

    CREATE DOMAIN(仅限简单的东西)

    CREATE TYPE(无限制)

    【讨论】:

    • 我想确保数据库技术之间的兼容性。由于我在生产环境中运行 PGSQL,因此如果需要,我希望能够回退到某些东西。 MySQL 恰好是我最了解的。
    • 另外,我没有能力(除非我弄错了)通过 Heroku(免费)在 PostgreSQL 控制台中执行命令。
    • 您可能没有对 Heroku 的 PostgreSQL 控制台访问权限,但您可以将任何您想要的 SQL 放入迁移中。
    • 有没有办法只在 PostgreSQL 中执行迁移?
    【解决方案2】:

    Frank 提到的 SQL 实际上就是答案,但我确实在寻找一种更具体的方法来进行 RDBMS 特定的 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
    

    这正是我一直在寻找的。​​p>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 2016-04-07
      • 2023-03-27
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      相关资源
      最近更新 更多