升级至R 4.2.1后使用DBI操作PostgreSQL时R/RStudio崩溃求助
R 4.2.1连接PostgreSQL时
dbGetQuery/dbWriteTable(append=TRUE)导致崩溃 问题描述
本地部署PostgreSQL 12数据库,此前通过R连接进行数据读写、追加操作均正常。升级至R 4.2.1后出现以下异常:
- 使用
DBI::dbGetQuery()读取数据时,RStudio崩溃(但直接用R运行无问题) - 使用
DBI::dbWriteTable(append = TRUE)追加数据时,RStudio和R均崩溃
复现代码
library(DBI) library(RPostgreSQL) pg <- dbDriver("PostgreSQL") db_connection <- dbConnect(pg, dbname = "williampetti", user = "williampetti", password = "", host = "localhost", port = 5432) data(mtcars) # 创建新表无问题 DBI::dbWriteTable(db_connection , name = 'mtcars_test' , value = mtcars , overwrite = TRUE) # 查看字段无报错 DBI::dbListFields(db_connection, 'mtcars_test') # 此操作导致RStudio崩溃(纯R环境正常) DBI::dbGetQuery(db_connection , 'select * from mtcars_test') # 此操作导致RStudio和R均崩溃 DBI::dbWriteTable(db_connection , name = 'mtcars_test' , value = mtcars , append = TRUE)
环境信息
PostgreSQL 12 RStudio 2022.07.1(版本号554) R version 4.2.1 (2022-06-23) Platform: x86_64-apple-darwin17.0 (64-bit) Running under: macOS Monterey 12.5.1 attached packages: [1] RPostgres_1.4.4 DBI_1.1.3 loaded packages(关键冲突项): [13] RPostgreSQL_0.7-3
解决方案
1. 替换旧驱动包,使用RPostgres替代RPostgreSQL
RPostgreSQL是停更已久的维护包,对R 4.2+版本兼容性不足;RPostgres是官方维护的新一代PostgreSQL驱动,适配性更强。操作步骤:
- 卸载
RPostgreSQL:remove.packages("RPostgreSQL") - 使用
RPostgres重建连接并测试:library(DBI) library(RPostgres) db_connection <- dbConnect(RPostgres::Postgres(), dbname = "williampetti", user = "williampetti", password = "", host = "localhost", port = 5432) # 测试读取 DBI::dbGetQuery(db_connection, 'select * from mtcars_test') # 测试追加 DBI::dbWriteTable(db_connection, name = 'mtcars_test', value = mtcars, append = TRUE)
2. 清理包冲突
环境中同时加载RPostgres和RPostgreSQL会引发底层驱动冲突,确保仅保留一个PostgreSQL驱动包,重启R/RStudio后再测试。
3. 更新RStudio至最新版本
旧版RStudio(2022.07.1)与R 4.2.1存在交互bug,升级到最新版RStudio可解决部分兼容性问题。
4. 测试RStudio安全模式
按住Ctrl+Shift启动RStudio进入安全模式(禁用所有插件),测试读写操作是否正常,排查是否由第三方插件导致崩溃。
内容的提问来源于stack exchange,提问作者BillPetti
相关产品推荐
相关产品推荐

