首页 > 解决方案 > 在 Rails 中,如何在暂存/生产 PG 数据库中存在列限制,但对于新创建的开发 PG 数据库却没有?

问题描述

我正在调查用户在给定字段中输入超过 255 个字符的错误。当我在本地做同样的事情时,我没有收到错误,因为本地没有为我设置该字段的限制。我不明白为什么我有这种差异。我的本地 pg 实例和暂存/生产之间的限制有何不同?

例如本地:

pry(main)> Resume::Education.columns_hash['honors'].limit
=> nil
pry(main)> Resume::Education.columns_hash['honors'].sql_type
=> "character varying"

然后在舞台上:

pry(main)> Resume::Education.columns_hash['honors'].limit
=> 255
pry(main)> Resume::Education.columns_hash['honors'].sql_type
=> "character varying(255)"

Rails 是否随着时间的推移改变了 :string 列在 Postgres 中的表示方式,并且由于我在本地新创建了数据库,所以我得到了character varying版本,而在生产中它有一个旧的character varying(255)? 还有什么可以解释这一点?

标签: ruby-on-railspostgresql

解决方案


我想我找到了。 https://guides.rubyonrails.org/4_2_release_notes.html#active-record

“PostgreSQL 和 SQLite 适配器不再在字符串列上添加 255 个字符的默认限制。”

由于该表是在 Rails 4.2 之前创建的(在 4.1.4 上),因此它的列有 255 个字符的限制。我们已经通过 Rails 版本向上迁移,当我在 Rails 5.2 上创建我的开发数据库实例时,这个限制对我来说是不存在的。


推荐阅读