He estado tratando de enviar los datos creados en un espacio de trabajo en el servidor R a Redshift. Usando dbWriteTable(), puedo crear la tabla con éxito, pero los datos no se escriben en esta tabla recién creada y se produce el siguiente error:
> 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 ^ )Notas sobre el código:
'con' se refiere a la conexión Redshift, el código para eso en forma genérica es el siguiente:
con <- dbConnect(drv, host="host_name", port="port_id", dbname="db_name", user="username", password="password")No puedo dar ejemplos completos con datos debido a restricciones en los datos.
Originalmente, pensé que podría ser un problema de permisos dentro del espacio de trabajo. Pero encontré una solución extremadamente lenta al crear la tabla usando dbSendQuery() y luego recorrer cada fila del marco de datos que deseo insertar en Redshift a través de otra llamada a dbSendQuery(). Esto me dice que el problema debe estar relacionado con algo más que los permisos, ya que puedo completar la tarea de manera ineficiente.
Cualquier comentario o propuesta relacionada con este error es muy apreciada, gracias.
Parece que su aplicación cliente "R" está tratando de usar la sintaxis COPY ... FROM STDIN de Postgres. "FROM STDIN" no es una sintaxis compatible con el comando COPY de Redshift, consulte COPY de Redshift .
Las opciones que podría considerar son insertar fila por fila (como lo estaba haciendo con dbSendQuery()), pero esto será lento, o enviar sus datos a un archivo CSV que se puede cargar en Amazon S3 y desde allí cargar usando COPY con S3 como una fuente de datos (rápido).