使用RPostgreSQL写入特定模式

时间:2012-04-05 16:29:27

标签: r postgresql

我正在使用RPostgreSQL来读写数据。从任何模式读取工作都很完美,但我无法写入非公共模式。例如,以下代码将表放在public架构中,名称为myschema.tablex

# write dataframe to postgres 
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, host="localhost", user="postgres", password="zzzz", dbname="mydatabase", port="5436")
if(dbExistsTable(con,"myschema.tablex")) {
  dbRemoveTable(con,"myschema.vkt_tablex")}
dbWriteTable(con,"myschema.tablex", dataframe, row.names=F)

我想要做的是将表tablex放在架构myschema中。我还尝试在连接中命名模式:dbname="mydatabase.myschema"并尝试我在前面的bug中提到的参数schemaname

这些方法都不起作用,所以我想知道是否还有其他方法可以使用。

3 个答案:

答案 0 :(得分:39)

使用此:

library(RPostgreSQL)
drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, dbname = "db", host = "host", port = 5432,
                 user = "user", password = "pwd")
dbWriteTable(con, c("yourschema", "yourtable"), value = yourRdataframe)
dbDisconnect(con)

更多详情:https://stat.ethz.ch/pipermail/r-sig-db/2011q1/001043.html

答案 1 :(得分:5)

创建对象的默认架构由search_path定义。一种方法是相应地设置它。例如:

SET search_path = myschema, public;

我引用manual

  

创建对象时未指定特定目标   架构,它们将被放置在搜索中列出的第一个架构中   路径。如果搜索路径为空,则报告错误。

您也可以将其设为default for a role,因此会为此角色的每个连接自动设置。更多:

答案 2 :(得分:2)

如果读者正在使用较新的软件包RPostgres来执行此操作,则指定架构的代码为:

dbCreateTable(conn = con, name = Id(schema = "yourschema", table = "yourtable"), fields = yourRdataframe)