Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用RPostgreSQL写入特定架构_R_Postgresql - Fatal编程技术网

使用RPostgreSQL写入特定架构

使用RPostgreSQL写入特定架构,r,postgresql,R,Postgresql,我用它来读写数据。从任何模式中读取都可以完美地工作,但我无法编写非公共模式。例如,下面的代码在public模式中放置了一个名为myschema.tablex # write dataframe to postgres drv <- dbDriver("PostgreSQL") con <- dbConnect(drv, host="localhost", user="postgres", password="zzzz", dbname="mydatabase", port="543

我用它来读写数据。从任何模式中读取都可以完美地工作,但我无法编写非公共模式。例如,下面的代码在
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)
#将数据帧写入postgres

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

SET search_path = myschema, public;
我引述:

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

您还可以将其设置为,因此它会自动为该角色建立的每个连接设置。更多:

使用以下方法:

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)
库(RPostgreSQL)

drv如果读卡器使用较新的包
RPostgres
执行此操作,则指定架构的代码为:


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

谢谢@Erwin。如果我有五个模式,我是否需要按我喜欢的顺序列出它们,还是只列出我想使用的模式?@celenius:你不必全部列出。当前角色可以访问的
搜索路径中的第一个架构将用于对象创建。将按顺序搜索所有对象,直到找到为止。Ohter模式是不可见的。特殊规则适用于系统架构。很像文件系统中的搜索路径。这本手册说明了一切。但是请注意,在create上以表格名作为前缀的模式也应该起作用。i、 e:创建模式测试;创建test.abc表(i int)\d测试。abc@celenius:如Scott所说:搜索路径只提供默认值。架构限定名称始终会覆盖默认名称。非常类似于文件系统中的完全限定路径。您可以将@erwinbrandsetter解决方案放入事务中,例如,
RPostgres::dbWithTransaction
,因此设置搜索路径是事务的一部分,之后它将返回到普通搜索路径。也可与
dbReadTable
一起使用,应该是可接受的答案。请参阅DBI包中的
help(Id)
,Id类引用“嵌套在层次结构中的表(例如在架构中)”。这也可用作
dbWriteTable
中的name参数。