为什么PostgreSQL中的文本字段的字符限制为255?

时间:2012-09-05 14:30:55

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

在找到与字符串与文本字段相关的2个SO问题后,我发现链接字段 已经 文字:

create_table "answers", :force => true do |t|
  t.string   "text"
  t.text     "link"

为什么Postgres会抛出以下错误:

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

我尝试了迁移change_column :answers, :link, :text, :limit => nil,但我认为没有做任何事情。

编辑:所以,问题是架构说该字段是文本,但实际上它是字符串:

Answer.new.column_for_attribute('link').type
=> :string

解决这个问题的最佳方法是什么?通过从架构重建数据库?通过将其更改为字符串然后再返回文本?

Rails 3.2.2,Postgres 9,Heroku。

2 个答案:

答案 0 :(得分:1)

不太确定它是如何发生的,但是下列之一:

  1. 我在运行迁移后检查了架构,实际上它是同步的。
  2. 我运行了迁移,将类型更改为字符串,使架构同步。

答案 1 :(得分:0)

使用发送到Postgres的原始SQL语句编写迁移。只需使用psql控制台中直接运行的任何内容调用execute即可。这是确切知道数据库将处于何种状态的最佳方式。通常,这比让Rails为您定义架构更好。您应该定期查看您的架构,尤其是在运行迁移之后。