ruby-on-rails - 在 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)
? 还有什么可以解释这一点?
解决方案
我想我找到了。 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 上创建我的开发数据库实例时,这个限制对我来说是不存在的。
推荐阅读
- node.js - 我应该使用集群而不是异步来处理 Nodejs 中的并行任务吗?
- xml - 我该怎么做才能使用 xslt 获得 5 个最高值?
- python - 如何在 QWebEngineView 中设置背景图片
- ios - 在 ios 中接收通知时禁用应用程序徽章图标
- ubuntu - (Ubuntu, apache2, ufw) https 不可达
- html - 导航栏崩溃未按预期工作
- java - J3D 的材质设置会导致无纹理的对象
- .net - 如何在 Kubernetes 中部署 .net core?
- python - 使用 pandas 删除 csv 文件中的特定行
- javascript - 根据当前 viewZoom 设置可变 XYZ 源和缩放增量