У меня возникла странная проблема, которая возникает на моем ящике CentOS 6.5, размещенном на AWS, который не возникает на моей машине Windows.Ошибка в dbSendQuery с RPostgreSQL и RJDBC на CentOS 6.5, а не на Windows 7
При отправке большого dbSendQuery (строка с 15 000 + байтами/символами), я получаю сообщения об ошибках. С меньшими запросами он работает нормально.
Первоначально, я думал, что это проблема с моей установкой Postgres, поэтому я обновился до 9.4, но все же получил ту же ошибку с RPostgreSQL. Моя следующая мысль заключалась в том, что это проблема SSL, поэтому я попытался с RJDBC с флагом sslmode = disable, но это тоже не сработало.
Это сообщение об ошибке с RPostgreSQL:
> library(RPostgreSQL)
Loading required package: DBI
> rsdrv <- dbDriver("PostgreSQL")
> rscon <- dbConnect(rsdrv, dbname="dbname",host="redshift.connection.string",port=5439,user="username",password="password")
> dbSendQuery(rscon,query)
Error in postgresqlExecStatement(conn, statement, ...) : RS-DBI driver: (SSL SYSCALL error: Connection timed out)
Это ошибка с RJDBC:
> library(RJDBC)
> pgsql <- JDBC("org.postgresql.Driver", "/postgresql-9.3-1102.jdbc41.jar", "`")
> con <- dbConnect(pgsql, "jdbc:postgresql://redshift.connection.string:5439/dev?sslmode=disable", "username", "password")
> dbSendQuery(con,query)
Error in .jcall(s, "Ljava/sql/ResultSet;", "executeQuery", as.character(statement)[1], : ignoring SIGPIPE signal
Вот sessioninfo() на моем CentOS 6,5
> sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-redhat-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RPostgreSQL_0.4 DBI_0.3.1
Вот sessionInfo() в Windows 7:
> sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RPostgreSQL_0.4 DBI_0.3.1
loaded via a namespace (and not attached):
[1] tools_3.1.2
Я бы приложил пример dbSendQuery() запроса, который вызывает эти ошибки, но поскольку они составляют 15 000 символов, я не уверен, что это хорошая идея. Для этого используется автоматическое создание оператора CREATE TABLE, в моем случае столбцы 500 ++. На моей машине с Windows он отправляет запрос через полсекунды, а на стороне Redshift создает таблицу почти мгновенно, поэтому нет проблемы с тем, что запрос занимает слишком много времени (и тайм-аут ..?)
Благодаря!
http://pastebin.com/1h2dKMGs Это ссылка на запрос, который я тестирую. –