Từ chủ đề trong nhận xét của hrbrmstr, tôi đã tìm thấy một thủ thuật để làm cho điều này hoạt động.
Trong postgresqlWriteTable
trong RPostgreSQL
gói, bạn cần thay thế dòng
sql4 <- paste("COPY", postgresqlTableRef(name), "FROM STDIN")
với
sql4 <- paste(
"COPY ",
postgresqlTableRef(name),
"(",
paste(postgresqlQuoteId(names(value)), collapse = ","),
") FROM STDIN"
)
Lưu ý rằng việc trích dẫn các biến (không có trong bản hack gốc) là cần thiết để chuyển các tên cột phân biệt chữ hoa chữ thường.
Đây là một tập lệnh để thực hiện điều đó:
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")