是否可以使用 R 绘制 postgresql 数据库中的表及其关系,如下所示?
最佳答案
对的,这是可能的。
至于怎么可能,请看下面的步骤
步骤
步骤 1
对于从 R 连接到 PostgreSQL 数据库,有多种机制可以这样做,包括
RPostgreSQL 中第 1 步的示例如下:
library(RPostgreSQL)
## loads the PostgreSQL driver
drv <- dbDriver("PostgreSQL")
## Open a connection
con <- dbConnect(drv, dbname="databasename")
步骤 2
这可以通过多种方式完成。可以直接在SQL中完成,也可以使用
RPostgreSQL 的 dbListTables 和 dbListFields 或两者的组合。
例如 SQL 查询数据库中的所有表,或表中的所有字段/列或表中的所有约束,请参阅以下 StackOverflow 答案
总之,您只需查询 information_schema.tables、information_schema.columns 和 information_schema.table_constraints 即可获得您需要的信息。如果速度是一个问题(它们在上面的链接答案中提到),您可以使用 PostgreSQL 特定表而不是 ANSI SQL 标准表,但它们可能会随着时间的推移而改变。
这里的步骤是
RPostgreSQL 中第 2 步的示例如下:
调整您的 SQL 以适应。
第 1 部分
用于获取表列表
使用内置函数
tables1 <- dbListTables(con)
使用 SQL
tables2 <- dbGetQuery(con, "select table_name from information_schema.tables")
第 2 部分
使用内置函数
您将使用 dbListFields(con,"TableName"),并应用于表格的前一个数据框。见 how to apply a function to every row of a matrix (or a data frame) in R或 Apply a function to each row in a data frame in R并将结果保存到变量中。
使用 SQL
columns2 <- dbGetQuery(con, "select table_name,column_name from information_schema.columns")
第 3 部分
使用 SQL
constraints <- dbGetQuery(con, "select table_name,constraint_name, constraint_type from information_schema.table_constraints")
步骤 3
从第 2 步开始,您应该有表格列表、表格列表及其相关字段/列,以及表格列表及其相关约束。
您需要为 CityPlot 输出 csv 文件以供使用,或为 GraphViz 输出点文件,或 igraph 的图形格式或数据框或 hash为了使用绘制表格的函数进行处理,并使用网格或图表绘制它们之间的连接。
如果您将它们组合成单个数据帧,子集和合并将很有用。
第 4 步
这一步也可以通过许多不同的方式来完成。这些包括但不限于
如果使用图表、形状或网格包,您将遍历表列表、哈希或其他数据结构,并对每个表应用绘制函数,然后为每个约束应用单独的函数进行绘制线条。
引用文献
关于sql - 从 Postgresql 表中绘制表和关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19446393/