dbplyr :: in_schema с учетом регистра

Функция dbplyr :: in_schema () не может подключаться к таблицам с прописными буквами.

Когда я создаю таблицу в PostgreSQL.

CREATE TABLE public."OCLOC"
(
  cod_ocloc double precision NOT NULL,
  lab_ocloc character varying(255),
  CONSTRAINT pk_ocloc PRIMARY KEY (cod_ocloc)
);

INSERT INTO public."OCLOC"(
            cod_ocloc, lab_ocloc)
    VALUES (1, 'example');

Затем я пытаюсь подключиться к таблице с помощью in_schema из R:

 con <- DBI::dbConnect(RPostgreSQL::PostgreSQL(), 
                  dbname = 'dbname', 
                  user = 'user', 
                  host = 'host', 
                  password = 'password')

 tbl(con, dbplyr::in_schema('public','OCLOC'))

Предупреждает о следующей ошибке

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

Но когда я пытаюсь без подключения in_schema, работает:

tbl(con, 'OCLOC')

Похоже на проблему без учета регистра. Это создает проблему, когда я использую базу данных с другими схемами, кроме общедоступных, и есть имена таблиц с заглавными буквами.


person Diego    schedule 20.07.2017    source источник
comment
Я не уверен, связана ли ваша проблема с in_schema, поскольку, похоже, нет проблем с поддержкой использования заглавных букв: > dbplyr::in_schema('public','OCLOC') <IDENT> public.OCLOC Может ли проблема быть связана с драйвером? Вы пытались выполнить созданный запрос напрямую? DBI::dbGetQuery(con, 'SELECT * FROM public.OCLOC AS "zzz3" WHERE 0=1')   -  person JAD    schedule 23.08.2017
comment
У меня также были проблемы с чувствительностью к регистру при подключении к Oracle. В конце концов, я перезаписал DBI::dbWriteTable и DBI::dbReadTable, чтобы они преобразовали все запросы и имена таблиц в верхний регистр перед запуском. dbplyr потрясающий, но совершенно новый и полный сюрпризов, поэтому я обнаружил (после полдня попыток и безуспешной попытки rbind) безопаснее максимально стандартизировать (и минимизировать) использование.   -  person Moody_Mudskipper    schedule 19.09.2017


Ответы (1)


Я нашел решение следующим образом: добавление "" внутрь ''

tbl(con, '"OCLOC"')
person Diego    schedule 04.02.2018