2014-02-06 5 views
13

Im пытается соединиться Postgres с функциями dplyrЯ не могу подключиться PostGreSQL schema.table с dplyr пакета

my_db <- src_postgres(dbname = 'mdb1252', user = "diego", password = "pass") 
my_db 
src: postgres 9.2.5 [[email protected]:5432/mdb1252] 
tbls: alf, alturas, asociad, atenmed, base, bfa_boys_p_exp, bfa_boys_z_exp, 
    bfa_girls_p_exp, bfa_girls_z_exp, bres, c21200012012, c212000392011, c212000532011, 
    c21200062012, c212006222012, c212007352012, c212012112013, c212012242012, 
    c212012452012, c2222012242012, calles, cap, cap0110, casos_tbc_tr09, casos_tbctr09, 
    casosvadela, catpo, cbcvl, cie09, cie10, cie103d, cie103dantigua, cie10c, cie9a, 
    cie9mc, clasiarc, coalc, coddepto, codedades, codest, codlocaerbio, codprov, coheb, 
    cohec, cohep, cohiv, coho09_20110909_m, coign, combl, comet, comp, comport, conev, 
    conymad, copri, corci3cod, corci910, cores, corin, cotab, cutoi, cutto, def0307,...... 

, но когда я пытаюсь для подключения TBL

my_tbl <- tbl(my_db, 'def0307') 

Error in postgresqlExecStatement(conn, statement, ...) : 
    RS-DBI driver: (could not Retrieve the result : ERROR: no existe la relación «def0307» 
LINE 1: SELECT * FROM "def0307" WHERE 0=1; 
        ^
) 

Я думаю, что проблема является схемой проблема, потому что SQL должен быть:

SELECT * FROM mortalidad.def0307 

Я сделал my_tbl < - tbl(my_db, 'mortalidad.def0307');

my_tbl <- tbl(my_db, c('mortalidad','def0307')) без решения проблемы.

Мне очень весело работать с dplyr Im от SQL, но я хочу решить эту проблему и попробовать навыки dplyr.

Заранее спасибо.

+1

Я смутно помню, думая об этом. Используется ли 'tbl (my_db, sql ('mortalidad.def0307'))? – hadley

+0

Или, может быть, 'tbl (my_db, ident ('mortalidad.def0307'))' – hadley

+0

Спасибо, что ответили быстро. Я попробовал варианты, на которые вы ссылаетесь, но ошибка продолжается. Теперь с обоими параметрами .... Ошибка в postgresqlExecStatement (conn, statement, ...): Драйвер RS-DBI: (не удалось получить результат: ERROR: error de sintaxis en o cerca de «)» LINE 1 : SELECT * FROM (mortalidad.def0307) AS "_W2" WHERE 0 = 1; ^ ) – Diego

ответ

6

Наконец, у dplyr есть решение этой проблемы благодаря последней версии 0.7, недавно объявленной Хэдли Викхэмом. Библиотеки DBI и dbplyr значительно упростили связь между dplyr и PostgreSQL.

con <- DBI::dbConnect(RPostgreSQL::PostgreSQL(), 
host = "database.rstudio.com", 
user = "hadley", 
password = rstudioapi::askForPassword("Database password")) 
tbl <- dplyr::tbl(con, dbplyr::in_schema('mortalidad','def0307')) 
+1

В случае, если кто-то приходит сюда, альтернатива заключается в том, что мне пришлось включить схему в двойные кавычки, поэтому этот вариант работал для меня: 'tbl <- dplyr :: tbl (con, dbplyr :: in_schema ('" mortalidad "',' def0307 '))' – mpettis

+0

Спасибо @Diego. Интересно, где живет документация по этой теме? – Dan

7

Вы можете захотеть этого,

db=src_postgres(dbname = 'mdb1252', 
       user = "diego", password = "pass", options="-c search_path=mortalidad") 
+0

Это работает !. Я хотел бы просто 'my_tbl <- tbl (my_db, 'mortalidad.def0307')'. Я думаю, что @hadley работает над этим усовершенствованием. Большое спасибо – Diego

3

Если кто-нибудь заканчивается здесь с той же проблемой, вот то, что работает для меня: (взято из @ комментарий Диего с февраля 6'14)

postgre_table <- function (src, schema, table) { 
    paste('SELECT * FROM', paste(schema, table, sep = '.')) %>% 
    sql() %>% tbl(src = src) 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^