sql >> Database >  >> RDS >> PostgreSQL

Hoe schrijf ik gegevens van R naar PostgreSQL-tabellen met een automatisch oplopende primaire sleutel?

In de thread in de opmerking van hrbrmstr heb ik een hack gevonden om dit te laten werken.

In de postgresqlWriteTable in de RPostgreSQL pakket, moet u de regel vervangen

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

met

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

Merk op dat het citeren van variabelen (niet inbegrepen in de originele hack) nodig is om hoofdlettergevoelige kolomnamen door te geven.

Hier is een script om dat te doen:

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. Waarom staat MySQL group by queries toe ZONDER aggregatiefuncties?

  2. Verbinding maken met SQL Server 2012 met behulp van sqlalchemy en pyodbc

  3. MySQL Workbench-alternatieven - Point-and-Click GUI van ClusterControl

  4. Hoe te updaten met inner join in Oracle