【问题标题】:PostgreSQL string(255) limit - Rails, Ruby and HerokuPostgreSQL 字符串(255) 限制 - Rails、Ruby 和 Heroku
【发布时间】:2012-04-04 18:59:40
【问题描述】:

所以我有一个comments 表,其结构如下:

# == Schema Information
#
# Table name: comments
#
#  id         :integer         not null, primary key
#  body       :string(255)
#  notified   :boolean
#  user_id    :integer
#  stage_id   :integer
#  created_at :datetime
#  updated_at :datetime
#  client_id  :integer
#  author     :string(255)

这是我收到的错误消息:

ActiveRecord::StatementInvalid (PGError: ERROR:  value too long for type character varying(255)

如何使用 Rails 3.x 和 Heroku 在 PG 列中存储长文本?

迁移会如何解决此问题?

谢谢。

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-3 postgresql heroku


【解决方案1】:

您需要使用文本而不是字符串。

迁移大致如下:

change_column :comments, :body, :text, :limit => nil

【讨论】:

  • 我要做的一个改变是,确保指定:limit => nil,否则255的limit将被添加到Rails 3.x中的模式中。
  • limit:nil 不再需要。使用 rails 3.2.11,将 type 设置为 :text 会将 Postgres 列类型设置为 'text'。没有隐式限制:255。
  • Rails 3.2.8 , :limit => nil 是必需的。
  • 前几天我使用 4.0.3 运行了这个迁移并且需要限制 => nil。
  • 如果有什么安慰的话,我只是在 rails 4.0.3(托管在 heroku 上)中做到了这一点,并且不需要将其设置为 nil 以使其工作。奇怪的是,有些人似乎需要这样做,而有些人则不需要。
【解决方案2】:

我一直通过这种类型的查询来解决这个问题
ALTER TABLE your_table_name ALTER COLUMN your_column_name TYPE text;


字符变化有长度限制,你不能通过这个长度。
文本是一个没有限制的变量。
因此,您可以将列类型从字符变化(有长度)转换为
文本(没有限制)。

【讨论】:

    猜你喜欢
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 2016-09-04
    • 1970-01-01
    相关资源
    最近更新 更多