PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak zapisywać dane z tabel R do PostgreSQL za pomocą autoinkrementacji klucza podstawowego?

Z wątku w komentarzu hrbrmstr znalazłem hack, który sprawi, że to zadziała.

W postgresqlWriteTable w RPostgreSQL pakiet, musisz wymienić linię

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

z

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

Zwróć uwagę, że cytowanie zmiennych (nie uwzględnionych w oryginalnym hacku) jest niezbędne do przekazywania nazw kolumn z rozróżnianiem wielkości liter.

Oto skrypt, który to umożliwia:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Spring + Hibernate:Wykorzystanie pamięci podręcznej planu zapytań

  2. Jak zarządzać bazami danych PostgreSQL z poziomu ClusterControl CLI

  3. Znajdź wartości, które nie zawierają liczb w PostgreSQL

  4. Usuwanie rekordów ze zdalnej bazy postgresql przy użyciu lokalnie dostarczonej listy

  5. PostgreSQL - ustaw domyślną wartość komórki zgodnie z inną wartością komórki