PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

permesso negato nel tentativo di leggere un file CSV utilizzando JDBC per il database postgres

Hai eseguito l'istruzione come superutente in psql e come altro utente tramite JDBC?
Il manuale ci dice :

puoi aggirare questa restrizione racchiudendo l'istruzione in una funzione con SECURITY DEFINER di proprietà di un superutente. Tieni presente i rischi per la sicurezza . Potresti anche voler REVOCA tutti i diritti pubblici e solo GRANT agli utenti selezionati. Potrebbe assomigliare a questo:

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;

Inoltre, tieni presente che la sintassi corretta per le stringhe di escape è:

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

Nota il E'...' .
A partire dalla versione 9.1, l'impostazione standard_conforming_strings è attivo per impostazione predefinita, applicandolo.