当前位置: 首页 > 知识库问答 >
问题:

使用R在Postgres模式中列出表

邵赞
2023-03-14

我正在使用R和RPostgreSQL包连接到PostgreSQL数据库。db有许多模式,我想知道哪些表与特定的模式相关联。

到目前为止,我已经尝试:

dbListTables(db, schema="sch2014")
dbGetQuery(db, "dt sch2014.*")
dbGetQuery(db, "\dt sch2014.*")
dbGetQuery(db, "\\dt sch2014.*")

这些都不起作用。

这个相关的问题也存在:使用R在postgres中设置模式名称,这将通过在连接处定义模式来解决这个问题。然而,它还没有得到回答!

共有3个答案

滕弘新
2023-03-14

您可以使用table_schema选项而不仅仅是模式来查看特定模式中的表列表。因此,与上面的示例代码片段保持一致,下面的行应该可以工作:

dbListTables(db, table_schema="sch2014")
白志勇
2023-03-14

以下内容应该可以使用(使用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
长孙和悦
2023-03-14

阅读这个答案https://stackoverflow.com/a/15644435/2773500帮助。我可以使用以下方法获取与特定模式关联的表:

dbGetQuery(db,
           "SELECT table_name FROM information_schema.tables
                   WHERE table_schema='sch2014'")
 类似资料:
  • 在我们可以阅读: 这应该包括视图和临时对象 的确如此。 但是,如何仅查看表,而不查看视图? 如果有必要,我正在使用驱动程序

  • 我有一个具有多个模式的postgres数据库。当我使用从shell连接到数据库并运行时,它使用默认的连接模式,这是公共的。是否有可以指定的标志,或者如何更改架构?

  • 问题内容: 我试图从postgres映像创建一个Dockerfile。该仓库说应该通过在/docker-entrypoint- initdb.d/中放置一个shell脚本来处理初始化。我根据在网上找到的示例放置了以下脚本: 反斜杠似乎是必需的,因为否则会出现解析错误。该脚本运行无误,除CREATE TABLE命令外的所有命令似乎都起作用。 单用户模式不支持表创建吗?如果是这样,是否有更好的方法让d

  • 我使用JPA/Hibernate和postgres作为我的数据库 我在postgres中创建了这样一个序列: 我希望Hibernate使用上面的序列作为主键。 实体的id部分为: 当我创建一个新播放器并试图通过方法我得到以下错误: Hibernate:从更新组织的播放器序列中选择下一个值作为id值。冬眠增强型。表结构$1$1执行错误:无法读取高值组织。postgresql。util。异常“下一列”

  • Postgres 9.1数据库包含表yksus1。。公共模式中的ykssu9。pgAdmin在下面的代码中显示了这些定义。如何将这些表移动到firma1模式? firma1模式中的其他表具有对这些表的外键引用。对这些表的外键引用仅来自firma1模式中的表。 其中一些表包含数据。如果表移动到firma1模式,外键引用也应更新到firma1。YKSUS表格。无法更改表结构。 看起来主键序列已经在fi

  • 问题内容: Windows(7)如何在R(统计语言)中使用MySQL? 然后使用linux没问题: 但是我没有找到用于CRAN上Windows的此类软件包。关于这一事实,只有一点说明。我发现版本2.10的软件包,但在2.12.1中不可用。 也试过了 但出现错误: 有什么方法可以从Windows中的R连接到MySQL数据库吗? 问题答案: 在 ran2的 帮助下找到了解决方案, ran2 给了我常见