2017-07-20 4 views
3

La fonction dbplyr :: in_schema() ne peut pas se connecter aux tables avec des majuscules.dbplyr :: in_schema sensible à la casse

Lorsque je crée une table dans 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'); 

Ensuite, j'essaie de se connecter à la table en utilisant in_schema de R:

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

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

met en garde contre l'erreur suivante

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 
       ^
) 

Mais lorsque je tente sans connexion fonctionne de in_schema:

tbl(con, 'OCLOC') 

Cela ressemble à un problème insensible à la casse, Cela génère un problème lorsque j'utilise la base de données avec d'autres schémas à côté du public et il existe des noms de table avec des majuscules.

+0

Je ne sais pas si le problème que vous rencontrez est lié à 'in_schema ', comme cela semble ne pas avoir de problème à supporter la capitalisation:'> dbplyr :: in_schema ('public', 'OCLOC') public.OCLOC' Le problème pourrait-il être avec le pilote à la place? Avez-vous essayé d'exécuter la requête produite directement? 'DBI :: dbGetQuery (con, 'SELECT * FROM public.OCLOC AS" zzz3 "OERE 0 = 1')' – JAD

+0

J'ai également eu des problèmes avec la sensibilité à la casse, la connexion à Oracle. À la fin, j'ai remplacé 'DBI :: dbWriteTable' et' DBI :: dbReadTable' afin qu'ils convertissent toutes les requêtes et tous les noms de tables en majuscules avant de s'exécuter. 'dbplyr' est incroyable mais assez nouveau et plein de surprises, donc j'ai trouvé (après une demi-journée d'essai et de ne pas réussir à se reconnecter) il est plus sûr d'uniformiser (et de minimiser) l'utilisation autant que possible. –

Répondre

0

J'ai trouvé la solution comme suit: ajouter « » à l'intérieur « »

TBL (con, ' « OCLOC »)