【问题标题】:Using raw sql in rails raising PG::InFailedSqlTransaction在提高 PG::InFailedSqlTransaction 的 Rails 中使用原始 sql
【发布时间】:2014-01-11 22:16:36
【问题描述】:

我有以下 sql 查询(从 article 中挑选:

SELECT
  date,
  coalesce(count,0) AS count
FROM
  generate_series(
      '2013-01-01 00:00'::timestamp,
      '2013-12-31 00:00'::timestamp,
      '1 day') AS date
  LEFT OUTER JOIN
  (SELECT
     date_trunc('day', users.created_at) as day,
     count(users.id) as count
   FROM users
   WHERE
     created_at >= '2013-01-01 00:00'
     AND created_at < '2013-12-31 00:00'
   GROUP BY day) results
    ON (date = results.day) ;

我想在 Rails 中使用它,我想让时间显示为 unix 时间戳

以前我使用这种方法导致我的操作系统冻结:

  def yearly_chart
    start_year = Time.now.beginning_of_year.to_i*1000
    end_year = Time.now.to_i*1000
    all_tickets = Ticket.all

    count_for_year = (start_year..end_year).map do |year|
      [ year, all_tickets.select{|t| t.created_at.to_time.to_i*1000 == year }.count ]
    end
    @yearly_complaints = count_for_year
  end

我已经尝试过Find_by_sql,但它无法正常工作和提升:

PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block

我还在控制台中测试了ActiveRecord::Base.connection.execute,但也无法正常工作

【问题讨论】:

  • 我没有投反对票,但这可能是因为您并没有真正提出问题。你想弄清楚你的机器为什么会死机吗?你有什么问题?
  • 不,我的问题是:我想在 Rails 中使用上面的 sql 查询,我想让时间显示为 unix 时间戳
  • StackOverflow 是为了解决特定的错误或问题,而不是告诉你如何编码。见meta.stackexchange.com/questions/156810/…
  • 我不是在问如何编码,我是在寻求更好的方法,因为我有一个问题,我正在寻找解决方案!这违反stackoverflow规则吗?我在谷歌上尝试和搜索后问
  • 您是否在psql 中尝试过您的 SQL 以确保它按照您的预期执行?

标签: sql ruby-on-rails postgresql


【解决方案1】:

使用find_by_sql

ActiveRecord 用于从模式中组装冗余且平淡无奇的 SQL 查询。您的查询既不冗余也不简单,因此只需发送您已经发明的原始查询即可。

【讨论】:

  • 经过测试但无法正常工作,引发PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block
  • 我尝试将它用于单个查询,但没有显示任何结果:ActiveRecord::Base.connection.execute('Select * From users') (2.3ms) Select * From users =&gt; #&lt;PG::Result:0xac3b9f0&gt;
  • 立即查看如何从 PG::Result 中获取记录
  • 即使它适用于 select * users ,它也不适用于我的问题中的查询
猜你喜欢
  • 2018-03-08
  • 1970-01-01
  • 2014-02-03
  • 2018-06-15
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 2016-09-10
  • 1970-01-01
相关资源
最近更新 更多