我遇到了一个奇怪的问题,这个问题发生在我托管在AWS上的我的CentOS 6.5盒子上,而这些问题在我的Windows机器上都没有。
发送大型dbSendQuery(字符串为15,000+字节/字符)时,会收到错误消息。使用较小的查询,它运行正常。
最初,我认为这是我的Postgres安装的一个问题,所以我更新到9.4但仍然与RPostgreSQL有相同的错误。我的下一个想法是这是一个SSL问题,所以我尝试使用带有sslmode = disable标志的RJDBC,但这也不起作用。
这是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
这是我的CentOS 6.5上的sessioninfo()
> 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
这是Windows 7上的sessionInfo():
> 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端,几乎立即创建表,所以查询花费太多时间(并超时......?)没有问题。
谢谢!
答案 0 :(得分:3)
这听起来可能与您的网络接口的MTU有关。您可以尝试将MTU调整为1500:示例在CentOS上设置MTU:ip link set dev eth0 mtu 1500
将MTU = 1500添加到/ etc / sysconfig / network-scripts / ifcfg-eth0
的末尾