PostgreSQL - противоречивые ошибки разрешений COPY - PullRequest
3 голосов
/ 13 февраля 2012

Я использую EnterpriseDB pgAdmin III (v. 1.12.1) на 32-битной машине с Windows 7 для работы с базами данных PostgreSQL на удаленном сервере Linux.Я вошел в систему как пользователь postgres, что позволяет мне получить доступ к каталогу $ PGDATA (в данном случае он находится здесь: / var / lib / pgsql / data /)

Если я войду на серверчерез терминал запустите psql и используйте команду \copy для импорта данных из CSV-файлов во вновь созданные таблицы, у меня нет проблем.

Однако, если я нахожусь в pgAdmin, я использую команду COPYимпортировать данные из CSV-файлов во вновь созданные таблицы.

COPY table_name FROM '/var/lib/pgsql/data/file.csv' 
WITH DELIMITER AS ',' csv header

Иногда это работает нормально, в других случаях я получаю ошибку прав доступа:

ОШИБКА: не удается открыть файл '/var/lib/pgsql/data/file.csv"для чтения: В состоянии« Отказано в доступе SQL »: 42501

Меня смущает ошибка, связанная с ошибкой. Когда возникает ошибка, я меняю разрешение на файл с 644 до 777 сбез эффекта. Я также пытаюсь переместить файл в другие папки, например, var / tmp /, также без эффекта.

Есть идеи?

Ответы [ 3 ]

5 голосов
/ 20 июля 2012

Проблема в правах доступа через каталоги к файлу.Например, у пользователя Postgres нет доступа к вашей домашней папке.Ответ заключается в том, чтобы использовать папку, к которой у всех пользователей есть доступ, например / tmp, или создать папку с правильными разрешениями, чтобы любой пользователь мог получить к ней доступ / чтение / запись, своего рода общая папка пользователей.

0 голосов
/ 29 ноября 2012
Try \COPY table_name FROM '/var/lib/pgsql/data/file.csv' 
WITH DELIMITER AS ',' csv header

Обратите внимание на обратную косую черту перед копированием, когда вы запускаете ее с обратной косой чертой, она запускается с пользовательскими разрешениями, в противном случае она просто запускается как postmaster , что в документации равно не рекомендуется для последних версий pg : | , в любом случае это может помочь вам.

0 голосов
/ 14 февраля 2012

Я думаю, что ваш пользователь postgres все еще не имеет доступа к вашему файлу.

Вы пробовали следующие команды?

chown postgres / var / lib / pgsql / data / file.csv

chmod u + r /var/lib/pgsql/data/file.csv

...