是否可以在postgresql数据库中绘制表格,并使用R表示它们之间的关系如下所示?
答案 0 :(得分:7)
是的,这是可能的。
至于如何实现,请参阅以下步骤
<强>步骤强>
第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步
此步骤也可以通过多种不同方式完成。这些包括但不限于
如果使用图表,形状或网格包,您将遍历表列表或散列或其他数据结构,并在每个表上应用绘图函数,然后为每个表应用一个单独的函数绘制线条的约束。
<强>参考强>