从Postgresql表中绘制表和关系

WAF*_*WAF 8 sql database schema plot r

是否可以在postgresql数据库中绘制表格,并使用R如下所示关系?

在此输入图像描述

App*_*234 7

对的,这是可能的.

至于如何实现,请参阅以下步骤

脚步

  1. 连接到PostgreSQL数据库
  2. 获取数据库的架构信息
  3. 将架构信息存储在数据结构中/将数据帧中的数据重新排列为数据结构.
  4. 从数据结构生成图表

步骤1

对于从R连接到PostgreSQL数据库,有各种机制,包括

  1. RPostgreSQL(R到PostgreSQL,持久连接)
  2. sqldf(R到PostgreSQL,临时连接自动执行第3步的一部分),它有RPostgreSQL作为依赖.
  3. PL/R(PostgreSQL到R)
  4. db.r(R到PostgreSQL,具有内置的基本数据库可视化,例如部分步骤2,3,4,)

RPostgreSQL中的步骤1的示例如下:

library(RPostgreSQL)

## loads the PostgreSQL driver
drv <- dbDriver("PostgreSQL")

## Open a connection
con <- dbConnect(drv, dbname="databasename")
Run Code Online (Sandbox Code Playgroud)

第2步

这可以通过几种方式完成.它可以直接在SQL中完成,也可以使用

RPostgreSQL的dbListTables和dbListFields或两者的组合.

例如,SQL用于查询数据库中的所有表,或表中的所有字段/列或表中的所有约束,请参阅以下StackOverflow答案

总之,您只需查询information_schema.tables,information_schema.columns和information_schema.table_constraints即可获得所需信息.如果速度是一个问题(在上面的链接答案中提到它们),您可以使用PostgreSQL特定表而不是ANSI SQL标准表,但它们可能会随时间而变化.

这里的步骤是

  1. 获取表格列表
  2. 迭代表列表并获取每个表的列(或者只查询包含结果集中表名和列名的查询的所有列)
  3. 迭代表列表并交替获取每个表的约束只需查询包含结果集中表名和约束名的查询的所有列

RPostgreSQL中的步骤2的示例如下:

调整您的SQL以适应.

第1部分

获取表格列表

使用内置功能

tables1 <- dbListTables(con)
Run Code Online (Sandbox Code Playgroud)

使用SQL

tables2 <- dbGetQuery(con, "select table_name from information_schema.tables")
Run Code Online (Sandbox Code Playgroud)

第2部分

使用内置功能

您将使用dbListFields(con,"TableName"),并应用于表的先前数据帧.了解如何将函数应用于R中矩阵(或数据帧)的每一行将函数应用于R 中数据框中的每一行,并将结果保存到变量中.

使用SQL

columns2 <- dbGetQuery(con, "select table_name,column_name from information_schema.columns")
Run Code Online (Sandbox Code Playgroud)

第3部分

使用SQL

constraints <- dbGetQuery(con, "select table_name,constraint_name, constraint_type from information_schema.table_constraints")
Run Code Online (Sandbox Code Playgroud)

第3步

从步骤2开始,您应该有表列表,表列表及其关联的字段/列,表列表及其相关约束.

您需要输出要使用的CityPlot的csv文件,或GraphViz的点文件,或者igraph的图形格式或数据框或散列,以便使用使用网格或图表绘制表格和它们之间的连接的函数进行处理.

如果要将它们组合到单个数据帧中,则子集和合并将非常有用.

第4步

该步骤也可以以许多不同方式完成.这些包括但不限于

  1. grid-package(参见参考文献中的pdf,例如与您请求的用例匹配的文章),Low Level Graphics原语
  2. 图包形状包(参见参考资料中的pdf用法示例)略高一级的图形基元
  3. Rgraphviz包(Graphviz,基本上是生成点文件的第3步,或者参考参考文献中的pdf以获取更多信息)
  4. igraph包(只会为每个列和表组合生成扁平的圆圈)
  5. CityPlot包(生成实体关系图而不是数据库表图,但可能满足您的需求,需要步骤3从数据框生成csv文件)

如果使用图表,形状或网格包,您将迭代表列表,或散列或其他数据结构,并在每个表上应用绘图函数,然后有一个单独的函数,应用于每个约束绘制线条.

参考