0

我正在将 Rails 应用程序表单 sqlite 转换为 postgres,以便我可以使用 heroku 进行部署。我安装了 postgres 并运行了迁移,但是当我尝试运行查询以查找与房屋关联的所有室友时,出现以下错误

PG::Error: ERROR:  operator does not exist: character varying = integer
LINE 1: SELECT COUNT(*) FROM "mates"  WHERE "mates"."house_id" = 1
                                                           ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT COUNT(*) FROM "mates"  WHERE "mates"."house_id" = 1

此错误源于您在添加房屋后被重定向到创建和管理员的注册视图。这是查看代码:

Extracted source (around line #4):

1: <div class="container">
2:  <div class="row">
3:      <div class="span5 offset3">
4:          <% if current_house.mates.empty? %>
5:              <h2>Add an Administrator</h2>
6:          <% else %>
7:              <h2>Add a New Housemate</h2>

感谢所有的帮助!

4

2 回答 2

0

您已将表 mates 中的 house_id 列定义为字符类型,它应该是一个整数。一些 RDBMS 可以容忍这一点,但 PostgreSQL 则不然。

您应该通过迁移来纠正此问题,并检查数据库架构是否有其他此类错误。

因为字符列可能包含非数字值,所以迁移时必须发出 SQL 语句:

alter table  mates
alter column house_id
type integer using cast(house_id as integer);
于 2013-07-14T21:00:38.217 回答
0

转到add_house_id_to_mates迁移并将第 3 行从字符串更改为整数。在此之后,删除20130628212206_change_type_of_house_id_in_house.rb迁移。

从零开始运行迁移:

rake db:drop db:create db:migrate

于 2013-07-14T21:20:42.187 回答