Ответ 1
Настройте свой файл database.yml следующим образом: бит ключа является хэшем переменных:
defaults: &default
adapter: postgresql
encoding: unicode
pool: 5
min_messages: warning
variables:
statement_timeout: 5000
Я использую heroku и heroku postgresql. Как установить время ожидания команды db, чтобы получить исключение, когда команда sql занимает больше 10 секунд?
Настройте свой файл database.yml следующим образом: бит ключа является хэшем переменных:
defaults: &default
adapter: postgresql
encoding: unicode
pool: 5
min_messages: warning
variables:
statement_timeout: 5000
Я нашел решение здесь: Ruby on Rails: как установить тайм-аут базы данных в конфигурации приложения?
Добавить
ActiveRecord::Base.connection.execute('set statement_timeout to 10000')
в конце файла environment.rb
.
Кто-нибудь видит лучший способ?
Я не знаю ruby, но в PostgreSQL вы можете просто запустить это:
SET statement_timeout = '10s'
а затем все запросы в этом соединении (сеансе) будут иметь строгое ограничение на время выполнения.
Вы также можете изменить его в postgresql.conf как глобальный по умолчанию или даже сделать его по умолчанию в данной базе данных или для данного пользователя, например:
ALTER DATABASE web SET statement_timeout = '10s';
ALTER USER bad_user SET statement_timeout = '10s';
Добавление
ActiveRecord::Base.connection.execute('set statement_timeout to 10000')
до конца файла environment.rb
не работает для меня.
Что работало, добавляя
ActiveRecord::Base.connection.execute("SET statement_timeout = '10s'")
для файла инициализации.