sql >> Databáze >  >> RDS >> PostgreSQL

Jak zapíšu data z R do tabulek PostgreSQL s automaticky se zvyšujícím primárním klíčem?

Z vlákna v komentáři hrbrmstr jsem našel hack, aby to fungovalo.

V postgresqlWriteTable v RPostgreSQL balíček, musíte vyměnit řádek

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

s

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

Všimněte si, že citace proměnných (nezahrnuté v původním hacku) je nezbytná pro předání názvů sloupců, u kterých se rozlišují velká a malá písmena.

Zde je skript, jak to udělat:

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. Porovnání výkonu a cen PostgreSQL DigitalOcean – ScaleGrid vs. DigitalOcean Managed Databases

  2. Vysvětlení SQL Server Příkaz ALTER TABLE ADD COLUMN

  3. Jak mohu vložit komentáře ke sloupcům v PostgreSQL přes Python?

  4. Pomalé hromadné vkládání pro tabulku s mnoha indexy