sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo escribo datos de R a tablas de PostgreSQL con una clave principal de incremento automático?

Del hilo en el comentario de hrbrmstr, encontré un truco para hacer que esto funcione.

En el postgresqlWriteTable en el RPostgreSQL paquete, debe reemplazar la línea

sql4 <- paste("COPY", postgresqlTableRef(name), "FROM STDIN")

con

sql4 <- paste(
  "COPY ", 
  postgresqlTableRef(name), 
  "(", 
  paste(postgresqlQuoteId(names(value)), collapse = ","), 
  ") FROM STDIN"
)

Tenga en cuenta que las comillas de variables (no incluidas en el truco original) son necesarias para pasar nombres de columnas que distinguen entre mayúsculas y minúsculas.

Aquí hay un script para hacer eso:

body_lines <- deparse(body(RPostgreSQL::postgresqlWriteTable))
new_body_lines <- sub(
  'postgresqlTableRef(name), "FROM STDIN")', 
  'postgresqlTableRef(name), "(", paste(shQuote(names(value)), collapse = ","), ") FROM STDIN")', 
  body_lines,
  fixed = TRUE
)
fn <- RPostgreSQL::postgresqlWriteTable
body(fn) <- parse(text = new_body_lines)
while("RPostgreSQL" %in% search()) detach("package:RPostgreSQL")
assignInNamespace("postgresqlWriteTable", fn, "RPostgreSQL")