27

我正在使用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放在 schema 中myschema。我还尝试在连接中命名模式:dbname="mydatabase.myschema"并尝试schemaname我在早期错误中看到的参数。

这些方法都不起作用,所以我想知道是否有另一种方法可以使用。

4

3 回答 3

54

用这个:

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

于 2012-08-17T07:19:41.000 回答
6

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

SET search_path = myschema, public;

我引用手册

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

您还可以将此设置为角色的默认值,以便为该角色建立的每个连接自动设置它。更多的:

于 2012-04-05T17:15:31.693 回答
3

如果读者使用较新的包RPostgres来执行此操作,则指定模式的代码是:

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

于 2020-11-10T03:52:14.987 回答