отказано в разрешении на чтение файла CSV с использованием JDBC для базы данных postgres - PullRequest
2 голосов
/ 15 января 2012

Я пытаюсь создать программу, которая рассчитывает время, затраченное на выполнение запроса в postgres. Я использую JDBC для этой цели.Я массово загружаю файл data.csv, используя оператор

copy 

.Когда я пытаюсь выполнить команду

copy data_1 from 'C:\\Users\\Abhishek\\Desktop\\data1.csv' using delimiters ','"

, используя приглашение cmd, она выполняется.Но когда я пытаюсь выполнить n ту же команду, используя java и JDBC .., это выдает ошибку:

org.postgresql.util.PSQLException: ERROR: could not open file for reading: Permission denied

Как я могу изменить разрешение для файла, чтобы я мог помочь моей jre использовать этофайл.

1 Ответ

1 голос
/ 15 января 2012

Вы выполняли оператор как суперпользователь в psql и как другой пользователь через JDBC?
В руководстве нам сообщается :

COPY namingфайл разрешен только суперпользователям базы данных, поскольку он позволяет читать или записывать любой файл, к которому у сервера есть права доступа.

Вы можете обойти это ограничение, заключив оператор вфункция с SECURITY DEFINER, принадлежащая суперпользователю.Помните о угрозах безопасности .Вы также можете REVOKE все права от общего доступа и только GRANT для выбранных пользователей.Может выглядеть так:

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;

Также имейте в виду, что правильный синтаксис для escape-строк :

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

Обратите внимание на E'...'.
Начиная с версии 9.1, настройка standard_conforming_strings включена по умолчанию, применяя это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...