使用dplyr从临时postgres表创建和检索数据

时间:2017-03-21 20:50:35

标签: r postgresql

我试图弄清楚如何使用dplyr从Postgres数据库上创建的临时表中检索数据。以下代码有效(我可以使用R创建临时表,并检索这些结果)。

flights.db <- src_postgres(dbname = dbname, host = host, port = port,
                           user = user, password=pwd)
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, host = host, port = port, dbname = dbname, user = user, password = pwd)

## Writes the SQL code to create a temporary table on the Postgres Database
sql_tmp_create <- paste0('create temp table tmptblaa as 
              select * from connections
              where \"Carrier\" = \'AA\' and \"Year\" = \'2015\'   ')

## Executes the code
dbSendQuery(con, sql_tmp_create)

## Return 10 results from temporary table on Postgres
dbGetQuery(con, 'select * from tmptblaa limit 10')

但是,这对我不起作用,并且我收到表不存在的错误:

flights <-tbl(flights.db, "tmptblaa")

任何想法我可能做错了什么?有关更多上下文,这是为了提高我正在为学校项目工作的Shiny应用程序的效率。感谢。

1 个答案:

答案 0 :(得分:0)

临时表的问题在于它们仅存在于使用一个连接对象启动的一个会话中。如果使用上面的代码创建临时表,则只能使用con对象访问临时表。 dplyr并不允许您创建表格,因此我担心您无法做出您想做的事情。

但是,如果要在数据库中预先聚合内容,可以考虑实体化视图。 dplyr可以从物化视图进行查询,因为它是持久的,因此无需使用dplyr创建mv。 您可以使用例如查询物化视图中的数据。 con %>% tbl(sql("select * from my_mv")) %>% collect(n = Inf)。这里重要的细节是sql函数,语法与常规表略有不同。