MySQL和PostgreSQL之间的结果不同

时间:2012-01-14 09:40:13

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

本地我使用MySQL和远程我使用PostgreSQL(在Heroku上),我得到的结果不同。

控制器

 @customer = current_customer
 @shows = @customer.shows
 @musicals = Musical.find(:all, :conditions =>['show_id in (?)', @shows])

 @musicals.each do |musical|
   @musical_activities = Activity.where('musical_id in (?)', musical.id).count(:group => "activity_type_id")
 end

视图

<table>
  <tr>
<th>Activity</th>
<th>Number</th>     
  </tr>

<% @activities.each do |activity_id, count| %>
  <tr>
<td><%= activity_description(activity_id) %></td>
<td><%= count %></td>
  </tr>  
<% end %>
</table>

以前,我使用过=而不是in,但是我改变了它,因为我得到了一个PGError,说WHERE的参数必须是boolean类型,而不是类型记录。无论我使用=还是IN,我都会在本地得到正确的结果。

当我在Heroku上运行它,并用IN替换=时,错误消失,但结果是错误的。我只得到第一列(activity_description)为空的一行,而不是按活动类型显示计数,计数是聚合的,或者只显示一个activity_type。即,即使我有很多activity_types并且一行没有返回activity_id,也只会出现一行。

2 个答案:

答案 0 :(得分:1)

当您将数据库迁移到Heroku时,Heroku在内部使用taps gem将您的本地数据库导入Heroku。
但是,它有一些限制(外键和Postgres Bigint)。

Taps gem constraints when importing local DB to Postgres

如果,这对您没有帮助,这里有一些很棒的链接可以帮助您进行转换。

  1. Converting Rails application data from MySQL to PostgreSQL
  2. Rake task to transfer a Rails database, say from MySQL to Postgres and back again

答案 1 :(得分:0)

或者,使用ClearDB mySQL插件(http://addons.heroku.com/cleardb)并保留在mySQL上。