如何在R中使用dm包查看PostgreSQL数据库指定Schema的ERD
如何用dm包在RStudio中仅绘制指定Schema的ERD
当使用dm_from_con()连接PostgreSQL数据库时,它默认会加载所有可见Schema中的表——仅设置search_path无法限制dm对象只包含目标Schema的表。要仅查看survey_data Schema的ERD,你需要在创建dm对象后,筛选出该Schema下的所有表,再调用dm_draw()。
修改后的代码
if (!require(librarian)){ install.packages("librarian") library(librarian) } librarian::shelf(dm, tidyverse, DBI, RPostgres, DiagrammeR) connection <- dbConnect(drv = dbDriver("Postgres"), dbname = Sys.getenv("aws_dbname"), host = Sys.getenv("aws_host"), port = Sys.getenv("aws_port"), user = Sys.getenv("aws_user"), password = Sys.getenv("aws_password")) # 创建完整dm对象后,筛选出survey_data Schema下的表 survey_data <- dm_from_con(connection) %>% filter(tbl_schema == "survey_data") # 绘制目标Schema的ERD survey_data %>% dm_draw(view_type = "all", graph_name = 'survey_data')
关键说明
- dm对象内置元数据列
tbl_schema,直接用filter()筛选该列等于目标Schema名称,就能精准保留需要的表。 - 也可以用
dm_select_tables(tidyselect::starts_with("survey_data."))实现相同效果,原理是PostgreSQL中表的完整标识为schema_name.table_name,通过前缀匹配选中目标Schema的所有表。 - 无需额外设置
search_path,因为我们已经通过筛选明确限定了表的范围,避免其他Schema的表干扰。
内容的提问来源于stack exchange,提问作者Eizy
相关产品推荐
相关产品推荐

