sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur skriver jag data från R till PostgreSQL-tabeller med en autoinkrementerande primärnyckel?

Från tråden i hrbrmstrs kommentar hittade jag ett hack för att få detta att fungera.

I postgresqlWriteTable i RPostgreSQL paket måste du byta ut linjen

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

med

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

Observera att citering av variabler (som inte ingår i det ursprungliga hacket) är nödvändig för att skicka skiftlägeskänsliga kolumnnamn.

Här är ett skript för att göra det:

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")


  1. Hur ringer man lagrad procedur i en vy?

  2. De fem bästa fördelarna med att migrera till Azure SQL Database

  3. Lägger till främmande nyckel till en rälsmodell

  4. Hur schemalägger man ett jobb i Oracle SQL Developer?