2015-07-25 3 views
0

Я получаю очень странное поведение формы PostgreSQL 9.4.4 на Fedora 22:Postgresql имеет разрешение на файл, но говорит, что это не

Я пытаюсь запустить этот запрос из psql:

su - postgres 
psql dbName 
COPY sometable FROM '/the/file/location.csv' WITH DELIMITER AS ',' CSV; 

и он дает мне эту ошибку:

could not open file "/the/file/location.csv" for reading: Permission denied 

Однако, если я делаю это:

su - postgres 
nano /the/file/location.csv 

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

Кто-нибудь знает, почему это происходит?

EDIT: Я теперь даже зашли так далеко, пытаясь переместить файлы в /tmp/file.csv, меняя владельца файлов на postgres и отключать SELinux. По-прежнему такая же ошибка.

EDIT 2: Я забыл упомянуть, что это установка «Мастер-ведомый», где я являюсь SSHing в Master с сервера Slave. В противном случае установка работает нормально.

EDIT 3: Я беру обратно то, что я изначально сказал. Исправлена ​​проблема с отключением SELinux. Теперь мне нужно выяснить способ его использования, чтобы исправить это правильно.

+0

Что пользователь является * сервер Postgres * работает как? По общему признанию, можно было бы ожидать, что он будет «postgres», но поведение предполагает иное. –

+0

Вы имеете в виду процесс '/ usr/bin/postgres -D/var/lib/pgsql/data' в' ps aux'? Он работает как «postgres». – TimY

+0

Работает ли ваша база данных на той же машине, что и ваш интерфейс psql? – wildplasser

ответ

0

Это был вопрос SELinux. Файл должен был содержать метку postgresql_db_t.

Это можно сделать, выполнив эту команду для одного файла:

chcon --reference /var/lib/pgsql/data/ /the/file/location.csv 

или этой команды для всего каталога

chcon -R --reference /var/lib/pgsql/data/ /the/directory/ 

Эти команды говорят SELinux, чтобы скопировать ярлык PosgresSQL/вправо от Директория PostgreSQL по умолчанию для каталога/каталога, которому предоставляется отказ в доступе к PostgreSQL.

Это может быть проверено с ls -lZ, и это должно выглядеть примерно так далее:

-rwxrwxrwx. 1 postgres postgres system_u:object_r:postgresql_db_t:s0 0 Jul 26 00:00 fileName.csv 
Смежные вопросы