В настоящее время выполняется простое приложение для синатра, использующее пассажира, и использование pgbouncer для объединения пулов в базу данных на том же сервере, что и приложение. В настоящее время я периодически получаю ошибку PG, что подготовленный оператор «a \ d» не существует.Подготовленное заявление не существует
A PG::Error occurred in #: ERROR: prepared statement "a2" does not exist
код рубин, который выполняется перед ошибкой
def self.get_ownership_record(id, key) self.where("user_id=? AND key=?", id, key).first end
pgbouncer конфигурации
; ######################################################### ; ############# SECTION HEADER [DATABASES] ################ ; ######################################################### [databases] fakedatabase=fake [pgbouncer] ; ----- Generic Settings -------------------------- ; ------------------------------------------------- logfile=/opt/local/var/log/pgbouncer/pgbouncer.log pidfile=/opt/local/var/run/pgbouncer/pgbouncer.pid listen_addr=* listen_port=5444 ; unix_socket_dir=/tmp user=_webuser auth_file=/Users/Shared/data/global/pg_auth auth_type=trust pool_mode=transaction ; max_client_conn=100 ; default_pool_size=20 ; reserve_pool_size=0 ; reserve_pool_timeout=5 ; server_round_robin=0 ; ----- Log Settings ------------------------------ ; ------------------------------------------------- ; syslog=0 ; syslog_ident=pgbouncer ; syslog_facility=daemon ; log_connections=1 ; log_disconnections=1 ; log_pooler_errors=1 ; ----- Console Access Control -------------------- ; ------------------------------------------------- admin_users=admin,nagios ; ------------------------------------------------- ; server_reset_query=DISCARD ALL; server_check_delay=0 server_check_query=SELECT 1; ; server_lifetime=3600 ; server_idle_timeout=600 ; server_connect_timeout=600 ; server_login_retry=15
Это мое единственное решение, чтобы отключить подготовленные заявления?
database.yml
production: adapter: postgresql database: fakedatabase username: admin host: localhost port: 5444 reconnect: true prepared_statements: false
EDIT
Я обновил pgbouncer.ini использовать сессии пулинговой
pool_mode=session
и раскомментировать
server_reset_query=DISCARD ALL;
и я до сих пор, казалось бы, случайно получать ошибки с подготовленными заявлениями, но на этот раз
An ActiveRecord::StatementInvalid occurred in #: PG::Error: ERROR: bind message supplies 2 parameters, but prepared statement "a1" requires 0
Я поворачивал на протоколирования уровня заявления в моих журналах PostGreSQL и доложу более подробно, если это возможно.
Я имел эту проблему под рельсы консоли. Решение было простым, мне нужно перезапустить консоль;) – MC2DX