gpt4 book ai didi

r - 在 CentOS 6.5 而非 Windows 7 上使用 RPostgreSQL 和 RJDBC 进行 dbSendQuery 时出错

转载 作者:行者123 更新时间:2023-12-01 18:57:05 26 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,该问题出现在 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 端,几乎立即创建表,因此查询花费太多时间(并且超时......?)没有问题

谢谢!

最佳答案

这听起来可能与您的网络接口(interface)的 MTU 有关。您能否尝试将 MTU 调整为 1500:在 CentOS 上设置 MTU 的示例:ip link set dev eth0 mtu 1500

将 MTU=1500 添加到/etc/sysconfig/network-scripts/ifcfg-eth0 的末尾

关于r - 在 CentOS 6.5 而非 Windows 7 上使用 RPostgreSQL 和 RJDBC 进行 dbSendQuery 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28078307/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com