sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan skriver jeg data fra R til PostgreSQL-tabeller med en autoinkrementerende primærnøgle?

Fra tråden i hrbrmstrs kommentar fandt jeg et hack til at få dette til at fungere.

I postgresqlWriteTable i RPostgreSQL pakke, skal du erstatte linjen

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

med

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

Bemærk, at det er nødvendigt at citere variabler (ikke inkluderet i det oprindelige hack) for at videregive kolonnenavne, der skelner mellem store og små bogstaver.

Her er et script til at gøre 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. Beregn punkt 50 miles væk (nord, 45% NØ, 45% SV)

  2. Hvert GROUP BY-udtryk skal indeholde mindst én kolonne, der ikke er en ydre reference

  3. dvale dialekt for oracle 12c

  4. På opgraderingsmetoden bliver ikke kaldt i android sqlite