Question Ecrire dans des schémas spécifiques avec RPostgreSQL


j'utilise RPostgreSQL pour lire et écrire des données. La lecture de n'importe quel schéma fonctionne parfaitement, mais je ne peux pas écrire dans des schémas non publics. Par exemple, le code suivant place une table dans le public schéma, avec le nom 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)

Ce que je veux faire, c'est placer la table tablex dans le schéma myschema. J'ai aussi essayé de nommer le schéma dans la connexion: dbname="mydatabase.myschema" et essayer l'argument schemaname que j'ai vu mentionné dans un bug antérieur.

Aucune de ces approches ne fonctionne, alors je me demande si je peux utiliser une autre méthode.


17
2018-04-05 16:29


origine


Réponses:


Le schéma par défaut où les objets sont créés est défini par le search_path. Un moyen serait de le définir en conséquence. Par exemple:

SET search_path = myschema, public;

Je cite le Manuel:

Lorsque des objets sont créés sans spécifier de cible particulière   schéma, ils seront placés dans le premier schéma répertorié dans la recherche   chemin. Une erreur est signalée si le chemin de recherche est vide.

Vous pouvez aussi en faire le par défaut pour un rôle, il est donc défini automatiquement pour chaque connexion établie par ce rôle. Plus:


5
2018-04-05 17:15



Utilisez ceci:

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)

Plus de détails: https://stat.ethz.ch/pipermail/r-sig-db/2011q1/001043.html


36
2017-08-17 07:19