Guest User

Untitled

a guest
Nov 11th, 2018
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. Error in postgresqlpqExec(new.con, sql4) : RS-DBI driver: (could not Retrieve the result : ERROR: syntax error at or near "STDIN" LINE 1: COPY "table_1" FROM STDIN
  2.  
  3. body_lines <- deparse(body(RPostgreSQL::postgresqlWriteTable))
  4. new_body_lines <- sub(
  5. 'postgresqlTableRef(name), "FROM STDIN")',
  6. 'postgresqlTableRef(name), "(", paste(shQuote(names(value)), collapse = ","), ") FROM STDIN")',
  7. body_lines,
  8. fixed = TRUE
  9. )
  10. fn <- RPostgreSQL::postgresqlWriteTable
  11. body(fn) <- parse(text = new_body_lines)
  12. while("RPostgreSQL" %in% search()) detach("package:RPostgreSQL")
  13. assignInNamespace("postgresqlWriteTable", fn, "RPostgreSQL")
  14.  
  15. Error in postgresqlExecStatement(conn, statement, ...) :
  16. RS-DBI driver: (could not Retrieve the result : ERROR: column "id" does not exist in table_1
  17. )
  18. creating NAs/NULLs for for fields of table that are missing in your df
  19. Error in postgresqlExecStatement(conn, statement, ...) :
  20. RS-DBI driver: (could not Retrieve the result : ERROR: column "id" does not exist in table_1
  21. )
  22.  
  23. ## connect to the DB
  24. library('RPostgreSQL'); ## loads DBI automatically
  25. drv <- dbDriver('PostgreSQL');
  26. con <- dbConnect(drv,host=...,port=...,dbname=...,user=...,password=...);
  27.  
  28. ## define helper functions
  29. createEmptyTable <- function(con,tn,df) {
  30. sql <- paste0("create table "",tn,"" (",paste0(collapse=',','"',names(df),'" ',sapply(df[0,],postgresqlDataType)),");");
  31. dbSendQuery(con,sql);
  32. invisible();
  33. };
  34.  
  35. insertBatch <- function(con,tn,df,size=100L) {
  36. if (nrow(df)==0L) return(invisible());
  37. cnt <- (nrow(df)-1L)%/%size+1L;
  38. for (i in seq(0L,len=cnt)) {
  39. sql <- paste0("insert into "",tn,"" values (",do.call(paste,c(sep=',',collapse='),(',lapply(df[seq(i*size+1L,min(nrow(df),(i+1L)*size)),],shQuote))),");");
  40. dbSendQuery(con,sql);
  41. };
  42. invisible();
  43. };
  44.  
  45. ## generate test data
  46. NC <- 1e2L; NR <- 1e3L; df <- as.data.frame(replicate(NC,runif(NR)));
  47.  
  48. ## run it
  49. tn <- 't1';
  50. dbRemoveTable(con,tn);
  51. createEmptyTable(con,tn,df);
  52. insertBatch(con,tn,df);
  53. res <- dbReadTable(con,tn);
  54. all.equal(df,res);
  55. ## [1] TRUE
  56.  
  57. insertBatch <- function(con,tn,df,size=100L) {
  58. if (nrow(df)==0L) return(invisible());
  59. cnt <- (nrow(df)-1L)%/%size+1L;
  60. for (i in seq(0L,len=cnt)) {
  61. sql <- paste0("insert into "",tn,"" values (",do.call(paste,c(sep=',',collapse='),(',lapply(df[seq(i*size+1L,min(nrow(df),(i+1L)*size)),],shQuote))),");");
  62. dbSendQuery(con,sql);
  63. };
  64. invisible();
Add Comment
Please, Sign In to add comment