我正在使用 R 和RPostgreSQL包连接到 PostgreSQL 数据库。数据库有许多模式,我想知道哪些表与特定模式相关联。
到目前为止,我已经尝试过:
dbListTables(db, schema="sch2014")
dbGetQuery(db, "dt sch2014.*")
dbGetQuery(db, "\dt sch2014.*")
dbGetQuery(db, "\\dt sch2014.*")
Run Code Online (Sandbox Code Playgroud)
这些都没有奏效。
这个相关的问题也存在:使用 R 在 postgres 中设置模式名称,这将通过在连接处定义模式来解决问题。然而,它还没有得到答复!
Dan*_*ega 12
以下应该有效(使用DBI_v1.1.1)
DBI::dbListObjects(conn, DBI::Id(schema = 'schema_name'))
Run Code Online (Sandbox Code Playgroud)
虽然它包含您想要的所有信息,但很难访问且难以阅读。
我会推荐一些可以生成数据框的东西:
# 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))
Run Code Online (Sandbox Code Playgroud)
或者在一行中:
d = as.data.frame(do.call(rbind, lapply(DBI::dbListObjects(conn, DBI::Id(schema = 'schema_name'))$table, function(x) slot(x, 'name'))))
Run Code Online (Sandbox Code Playgroud)
或者以更“整洁”的方式:
conn %>%
DBI::dbListObjects(DBI::Id(schema = 'schema_name')) %>%
dplyr::pull(table) %>%
purrr::map(~slot(.x, 'name')) %>%
dplyr::bind_rows()
Run Code Online (Sandbox Code Playgroud)
输出是这样的
> d
schema table
1 schema_name mtcars
Run Code Online (Sandbox Code Playgroud)
阅读此答案/sf/answers/1095110481/有所帮助。我可以使用以下内容来获取与特定架构关联的表:
dbGetQuery(db,
"SELECT table_name FROM information_schema.tables
WHERE table_schema='sch2014'")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5407 次 |
| 最近记录: |