【问题标题】:how to set postgresql command timeout in rails如何在rails中设置postgresql命令超时
【发布时间】:2013-02-07 00:43:16
【问题描述】:

我正在使用 heroku 和 heroku postgresql。如何设置 db 命令超时,以便在 sql 命令耗时超过 10 秒时出现异常?

【问题讨论】:

    标签: ruby-on-rails postgresql heroku


    【解决方案1】:

    像这样配置你的 database.yml,关键位是变量哈希:

    defaults: &default
      adapter: postgresql
      encoding: unicode
      pool: 5
      min_messages: warning
      variables:
        statement_timeout: 5000
    

    【讨论】:

    • 你也可以SET每个会话的其他参数:github.com/rails/rails/blob/4-2-stable/activerecord/lib/…
    • 如果我运行 rails dbconsole 然后 SHOW statement_timeout; 它说我没有任何语句超时。如果这有效,有没有办法验证它是否有效?
    • 我看到rails db 的行为相同。验证它的最简单方法是使用 rails 控制台中的 User.select('pg_sleep(10)') 并验证它是否在 5 秒后超时或您配置的任何内容。
    • 有没有办法只将它添加到前端而不是后台工作人员(Sidekiq)?
    • 当然。 database.yml 可以包含 ERB(ruby 逻辑),因此您可以执行诸如传递命令行标志或为该进程类型设置环境变量之类的操作,然后在超时配置上执行 if。
    【解决方案2】:

    我在这里找到了解决方案:Ruby on Rails: How to set a database timeout in application configuration?

    添加

    ActiveRecord::Base.connection.execute('set statement_timeout to 10000')
    

    environment.rb 文件的末尾。

    有没有人看到更好的方法?

    【讨论】:

    • 此命令通过 ActiveRecord 连接从另一个答案运行 SQL 命令,以便在连接期间保持正确。应该是有效的。
    • 这可以在heroku中工作吗?即 Heroku 在 30 秒后切断您的工作人员连接?
    【解决方案3】:

    我不知道 ruby​​,但是在 PostgreSQL 中你可以简单地运行这个:

    SET statement_timeout = '10s'
    

    之后,此连接(会话)中的所有查询将在运行时受到严格限制。

    您也可以在 postgresql.conf 中将其更改为全局默认值,甚至可以在给定数据库或给定用户中将其设为默认值,例如:

    ALTER DATABASE web SET statement_timeout = '10s';
    ALTER USER bad_user SET statement_timeout = '10s';
    

    【讨论】:

      【解决方案4】:

      添加

      ActiveRecord::Base.connection.execute('set statement_timeout to 10000')
      

      environment.rb 文件的末尾对我不起作用。

      有效的是添加

      ActiveRecord::Base.connection.execute("SET statement_timeout = '10s'")
      

      到一个初始化文件。

      【讨论】:

        猜你喜欢
        • 2012-05-17
        • 2014-08-13
        • 1970-01-01
        • 2016-12-27
        • 2012-01-16
        • 2019-09-20
        • 2023-03-22
        • 2016-08-26
        • 1970-01-01
        相关资源
        最近更新 更多