PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

autorisation refusée en essayant de lire un fichier csv à l'aide de JDBC pour la base de données postgres

Avez-vous exécuté l'instruction en tant que superutilisateur en psql et en tant qu'autre utilisateur via JDBC ?
Le manuel nous dit :

Vous pouvez contourner cette restriction en enveloppant l'instruction dans une fonction avec SECURITY DEFINER appartenant à un superutilisateur. Soyez conscient des risques de sécurité . Vous pouvez également vouloir REVOKE tous les droits du public et uniquement GRANT aux utilisateurs sélectionnés. Pourrait ressembler à ceci :

CREATE OR REPLACE FUNCTION foo()
  RETURNS void AS
$BODY$
    COPY data_1
    FROM E'C:\\Users\\Abhishek\\Desktop\\data1.csv'
    USING delimiters ',';
$BODY$
  LANGUAGE sql VOLATILE SECURITY DEFINER
  SET search_path = public, pg_temp;  -- or whatever schema the table is in

REVOKE ALL ON FUNCTION foo() FROM public;
GRANT SELECT ON FUNCTION foo() TO my_user;

Sachez également que la bonne syntaxe pour les chaînes d'échappement est :

E'C:\\Users\\Abhishek\\Desktop\\data1.csv'

Notez le E'...' .
Depuis la version 9.1, le paramètre standard_conforming_strings est activé par défaut, ce qui l'applique.