I'm using RPostgreSQL to read and write data. Reading from any schema works perfectly, but I'm not able to write to non-public schemas. For example, the following code places a table in the public
schema, with the name 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)
What I want to do, is to place the table tablex
in the schema myschema
. I've also tried to name the schema in the connection: dbname="mydatabase.myschema"
and trying the argument schemaname
which I saw referred to in an earlier bug.
None of these approaches work, so I'm wondering if there is another method that I can use.
The default schema where objects are created is defined by the search_path
. One way would be to set it accordingly. For instance:
SET search_path = myschema, public;
I quote the manual:
When objects are created without specifying a particular target schema, they will be placed in the first schema listed in the search path. An error is reported if the search path is empty.
You can also make this the default for a role, so it is set automatically for every connection made by this role. More:
search_path
that your current role can access will be used for object creation. All of them will be searched in order for objects until they are found. Ohter schemas are invisible. Special rules apply for system schemas. Much like a search path in a file system. The manual tells it all - Erwin Brandstetter 2012-04-05 17:50
create schema test; create table test.abc (i int); \d test.ab - Scott Marlowe 2012-04-06 16:21
Use this:
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)
More details: https://stat.ethz.ch/pipermail/r-sig-db/2011q1/001043.html
R
to use - djq 2012-04-05 17:41