PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Berechtigung verweigert beim Versuch, eine CSV-Datei mit JDBC für die Postgres-Datenbank zu lesen

Haben Sie die Anweisung als Superuser ausgeführt? in psql und als anderer Benutzer über JDBC?
Das Handbuch sagt uns :

Sie können umgehen Sie diese Einschränkung, indem Sie die Anweisung in eine Funktion mit SECURITY DEFINER im Besitz eines Superusers. Seien Sie sich der Sicherheitsrisiken . Sie können auch WIDERRUFEN alle Rechte von der Öffentlichkeit und nur GEWÄHREN an ausgewählte Benutzer. Könnte so aussehen:

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;

Beachten Sie außerdem, dass die richtige Syntax für Escape-Strings ist:

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

Beachten Sie das E'...' .
Ab Version 9.1 ist die Einstellung standard_conforming_strings ist standardmäßig aktiviert, wodurch dies erzwungen wird.