2017-07-19 4 views
1

J'essaye d'accéder et de lire des tables et des vues de la base de données de Postgres dans R. Je peux obtenir les tables utilisant la fonction dbListTables utilisant le paquet RPostgres mais rencontrant des problèmes avec views.Comment accéder et lire les vues Postgres dans R

comme ayant une connaissance naïve de Postgres, la recherche de moyens d'accès et de lecture des vues aussi bien dans R.

library(RPostgres) 
library(DBI) 
library(dplyr) 
library(sqldf) 

pw<- { 
"password" 
} 

conn <- dbConnect(RPostgres::Postgres() 
      , host="host-name" 
      , port='5432' 
      , dbname="database-name" 
      , user="username" 
      , password=pw) 

dbExistsTable(conn, "Test_Table") 
#TRUE 
dbListTables(conn) 

mydf <- dbReadTable(conn, "Test_Table") # To Read the table in R 

J'ai aussi essayé la commande ci-dessous selon ce lien: https://github.com/tidyverse/dplyr/issues/1007 mais sans succès.

SELECT table_name 
FROM INFORMATION_SCHEMA.tables 
WHERE table_schema = ANY (current_schemas(false)); 

Répondre

0

Il semble que dbExistsTable et dbListTables ne peut pas voir des vues Postgres.

Mais vous devriez être en mesure de les trouver avec une requête comme celle-ci:

SELECT table_schema, table_name 
FROM information_schema.tables 
WHERE table_schema not in ('pg_catalog', 'information_schema') and table_type = 'VIEW' 

Une fois que vous connaissez le nom de la vue que vous cherchez, dbReadTable(conn, "myview") œuvres.

Note: si elle ne fonctionne toujours pas, assurez-vous de définir le schéma à droite en utilisant

SET search_path to myschema 
+0

Merci pour la réponse. J'ai essayé la requête sql que vous avez suggérée. Étonnamment, ce n'est pas le cas. Juste la question idiote, la question que vous avez suggérée vient de R Side? De plus, dbReadTable (conn, "vw_activeIngredient") pour View donne aussi une erreur: Erreur dans result_create (conn @ ptr, instruction): ERREUR: la relation "vw_activeIngredientBeta" n'existe pas LINE 1: SELECT * FROM "vw_activeIngredient" – string

+1

Vous pouvez soit utilisez la requête ci-dessus dans un outil comme pgAdmin, ou à partir de R en utilisant 'dbGetQuery (conn," texte de la requête ")'. Si cela ne fonctionne toujours pas, quel est le message d'erreur que vous obtenez? – Scarabee

+0

La partie dbGetQuery a fonctionné parfaitement mais la lecture de la vue donne toujours l'erreur dbReadTable (conn, "vw_country") Erreur dans result_create (conn @ ptr, déclaration): ERREUR: relation "vw_country" n'existe pas LIGNE 1: SELECT * FROM "vw_country " – string