【发布时间】:2017-07-20 23:14:46
【问题描述】:
函数 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');
然后我尝试使用 R 中的 in_schema 连接到表:
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')
看起来像一个不区分大小写的问题,当我将数据库与除公共以外的其他模式一起使用并且有大写字母的表名时,这会产生问题。
【问题讨论】:
-
我不确定您遇到的问题是否与
in_schema有关,因为这似乎支持大写没有问题:> dbplyr::in_schema('public','OCLOC') <IDENT> public.OCLOC问题可能出在驱动程序上吗?您是否尝试直接执行生成的查询?DBI::dbGetQuery(con, 'SELECT * FROM public.OCLOC AS "zzz3" WHERE 0=1') -
我在连接到 Oracle 时也遇到了区分大小写的问题。最后,我覆盖了
DBI::dbWriteTable和DBI::dbReadTable,因此它们在运行之前将所有查询和表名转换为大写。dbplyr很神奇,但很新,充满惊喜,所以我发现(在尝试了半天但没有成功 rbind 后)尽可能标准化(并最小化)使用会更安全。
标签: r postgresql dplyr dbplyr