我使用R和RPostgreSQL
包连接到PostgreSQL数据库。 db有许多模式,我想知道哪些表与特定模式相关联。
到目前为止,我已经尝试过:
dbListTables(db, schema="sch2014")
dbGetQuery(db, "dt sch2014.*")
dbGetQuery(db, "\dt sch2014.*")
dbGetQuery(db, "\\dt sch2014.*")
其中没有一个有效。
此相关问题也存在:Setting the schema name in postgres using R,它可以通过在连接处定义架构来解决问题。但是,它还没有得到答复!
答案 0 :(得分:2)
阅读这个答案https://stackoverflow.com/a/15644435/2773500有帮助。我可以使用以下内容来获取与特定模式关联的表:
dbGetQuery(db,
"SELECT table_name FROM information_schema.tables
WHERE table_schema='sch2014'")
答案 1 :(得分:1)
以下应该有效(使用 DBI_v1.1.1
)
DBI::dbListObjects(conn, DBI::Id(schema = 'schema_name'))
虽然它有你想要的所有信息,但很难访问和阅读。
我会推荐一些产生数据框的东西:
# get a hard to read table given some Postgres connection `conn`
x = DBI::dbListObjects(conn, DBI::Id(schema = 'schema_name'))
# - extract column "table" comprising a list of Formal class 'Id' objects then
# - extract the 'name' slot for each S4 object element
# could also do `lapply(d$table, function(x) x@name)`
v = lapply(x$table, function(x) slot(x, 'name'))
# create a dataframe with header 'schema', 'table'
d = as.data.frame(do.call(rbind, v))
或在一行中:
d = as.data.frame(do.call(rbind, lapply(DBI::dbListObjects(conn, DBI::Id(schema = 'schema_name'))$table, function(x) slot(x, 'name'))))
或者以更“整洁”的方式:
conn %>%
DBI::dbListObjects(DBI::Id(schema = 'schema_name')) %>%
dplyr::pull(table) %>%
purrr::map(~slot(.x, 'name')) %>%
dplyr::bind_rows()
输出类似于
> d
schema table
1 schema_name mtcars
答案 2 :(得分:0)
您可以使用table_schema选项而不是仅使用架构来查看特定架构中的表列表。因此,与上面的示例代码段保持一致,以下行应该有效:
dbListTables(db, table_schema="sch2014")