Почему я получаю это сообщение об ошибке: Предупреждение в postgresqlQuickSQL - PullRequest
0 голосов
/ 24 мая 2018

Я использую пакет pool для Shiny-приложения, которое устанавливает соединение с моей PostgreSQL-БД.Время от времени я получаю сообщение об ошибке ниже без запуска приложения.Также, когда я запускаю код локально, появляется та же ошибка, а иногда и несколько раз.

Предупреждение в postgresqlQuickSQL (conn, Statement, ...): Не удалось создать execute: SELECT 1 Ошибка в postgresqlExecStatement (conn, Statement, ...): Драйвер RS-DBI: (не удалось выполнить оператор: нет соединения с сервером)

Это потому, что пул создает соединение с БД и через некоторое времяБД (или сервер) отключается из-за истечения времени ожидания?

Во всяком случае, нигде в моем коде я не делаю SQL-запрос с SELECT 1 внутри.

  • запрос приходит из самого пула (validateQuery())?
  • Как я могу предотвратить эту ошибку?

В моем ShinyApp также имеется следующий код для завершения подключения к пулу после закрытия приложения:

  session$onSessionEnded(function() {
    pool::poolClose(pool)
  })

Кроме того, при запуске ShinyApp приложение работает нормально и ведет себя как положено.Но когда я закрываю приложение, RStudio часто дает сбой , и мне приходится снова открывать его и перезагружать проект.

  • Почему это так?
  • Как узнать, что вызвало сбой?

1 Ответ

0 голосов
/ 01 июня 2018

Вы не хотите ничего делать с pool внутри сервера .R, кроме CRUD.Вы должны только создавать / уничтожать пул внутри global.R.Другими словами, пул создается один раз при запуске приложения и распределяется между сеансами всех пользователей.Он закрывается только тогда, когда он больше не нужен, то есть когда приложение закрывается.

global.R

pool <- dbPool(...)

onStop(function() {
  poolClose(pool)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...