我一直在尝试将在R服务器上的工作空间中创建的数据推送回Redshift。使用dbWriteTable(),我可以成功创建表,但数据没有写入这个新创建的表,并产生以下错误:
> dbWriteTable(con, c("schema", "table"), value = df,append=TRUE,
row.names=FALSE)
Error in postgresqlpqExec(new.con, sql4) :
RS-DBI driver: (could not Retrieve the result : ERROR: syntax error at or
near "STDIN"
LINE 1: COPY "schema"."table" FROM STDIN
^
)
关于代码的说明:
'con'指的是Redshift连接,通用形式的代码如下:
con <- dbConnect(drv, host="host_name",
port="port_id",
dbname="db_name",
user="username",
password="password")
由于数据限制,我无法提供完整的数据示例。
最初,我认为这可能是工作空间中的权限问题。但是,通过使用dbSendQuery()创建表,然后循环遍历数据帧的每一行,我希望通过另一个对dbSendQuery()的调用插入到Redshift中,我找到了一个非常慢的解决方案。这告诉我问题必须与其他权限相关,因为我可以无效地完成任务。
非常感谢您对此错误提出的任何意见或建议,谢谢。
答案 0 :(得分:1)
看起来像你的客户&#34; R&#34;应用程序正在尝试使用Postgres COPY ... FROM STDIN
语法。 &#34;来自STDIN&#34; Redshift COPY命令不支持语法,请参阅Redshift COPY。
您可能考虑的选项是逐行插入(就像您使用dbSendQuery()一样),但这会很慢,或者将您的数据输出到CSV文件,该文件可以上传到Amazon S3并从那里加载{ {3}}(快)。