Подтвердить что ты не робот

Postgres ERROR: не удалось открыть файл для чтения: Permission denied

Компьютер: Mac OS X, версия 10.8 База данных: Postgres

Попытка импортировать файл csv в postgres.

pg> copy items_ordered from '/users/darchcruise/desktop/items_ordered.csv' with CSV;
ERROR:  could not open file "/users/darchcruise/desktop/items_ordered.csv" for reading: Permission denied

Затем я попробовал

$> chown postgres /users/darchcruise/desktop/items_ordered.csv
chown: /users/darchcruise/desktop/items_ordered.csv: Operation not permitted

Наконец, я попробовал

$> ls -l
-rw-r--r--  1 darchcruise  staff      1016 Oct 18 21:04 items_ordered.csv

Любая помощь очень ценится!

4b9b3361

Ответ 1

chmod a+rX /users/darchcruise/ /users/darchcruise/desktop /users/darchcruise/desktop/items_ordered.csv

Это изменит права доступа для вашей папки. Обратите внимание, что каждый сможет прочитать ваш файл. Вы не можете использовать chown, являющийся пользователем без административных прав. Также рассмотрите возможность обучения umask, чтобы облегчить создание общих файлов.

Ответ 2

Предполагая инструмент командной строки psql, вы можете использовать \copy вместо copy.

\copy открывает файл и передает содержимое на сервер, тогда как copy указывает серверу открыть сам файл и прочитать его, что может быть проблематичным по разрешению или даже невозможно, если клиент и сервер работают на разные машины без совместного использования файлов.

Под капотом \copy реализуется как COPY FROM stdin и принимает те же параметры, что и серверная сторона copy.

Ответ 3

Скопируйте файл CSV в /tmp

Для меня это решило проблему.

Ответ 4

Скопируйте файл CSV в папку /tmp

Файлы, названные в команде COPY, считываются или записываются непосредственно сервером, а не клиентским приложением. Следовательно, они должны находиться на сервере базы данных или быть доступны только ему, а не клиенту. Они должны быть доступны для чтения и записи пользователю PostgreSQL (идентификатор пользователя, на котором выполняется сервер), а не клиенту. КОПИРОВАНИЕ Именование файла разрешено только для суперпользователей баз данных, поскольку оно позволяет читать или записывать любые файлы, на которые у сервера есть права доступа.

Ответ 5

У меня возникла проблема, когда я пытался экспортировать данные с удаленного сервера на локальный диск. Я не понял, что SQL copy на самом деле выполняется на сервере и что он пытается записать в папку сервера. Вместо этого правильная вещь - использовать \copy, которая является командой psql, и она записывает в локальную файловую систему, как я ожидал. http://www.postgresql.org/message-id/[email protected]om

Возможно, это может быть полезно и для кого-то другого.

Ответ 6

Другой способ сделать это, если у вас есть pgAdmin и удобнее использовать графический интерфейс, - это перейти к таблице в схеме и щелкнуть правой кнопкой мыши по таблице, в которую вы хотите импортировать файл, и выбрать "Импорт" для просмотра вашего компьютера для файл, выберите тип вашего файла, столбцы, в которые вы хотите вставить данные, а затем выберите импорт.

Это было сделано с использованием pgAdmin III и версии PostgreSQL версии 9.4

Ответ 7

Для меня было просто добавить sudo (или запустить как root) для команды chown:

sudo chown postgres/users/darchcruise/desktop/items_ordered.csv

Ответ 8

Я решил ту же проблему с помощью рекурсивного chown для родительской папки:

sudo chown -R postgres:postgres /home/my_user/export_folder

(мой экспорт находится в /home/my_user/export_folder/export_1.csv)

Ответ 9

просто на случай, если вы столкнетесь с этой проблемой под Windows 10, добавьте группу пользователей "youcomputer\Users" на вкладке безопасности и предоставьте ей полный контроль, что решило мою проблему

Ответ 10

для MacBook сначала я открыл терминал, а затем введите

open /tmp

или в каталоге поиска вы напрямую вводите команду + shift + g, затем набираете /tmp и переходите в папку.

он открывает временную папку в Finder. Затем я вставляю скопированный файл CSV в эту папку. Затем я снова захожу в терминал postgres и набираю команду ниже, а затем она копирует мои данные CSV в таблицу БД.

\copy recharge_operator FROM '/private/tmp/operator.csv' DELIMITER ',' CSV;

Ответ 11

Мой случай:

Я сохраняю свой csv файл в каталог моего хоста. Например: /tmp/geo.csv.

Но я забыл смонтировать этот том хоста в докер-контейнер, поэтому команда COPY команды pg выдает ошибку: No such a file and directory.

Команда COPY /tmp/geo.csv в контейнере /tmp/geo.csv, но она не существует.

Ответ 12

У меня было то же сообщение об ошибке, но я использовал psycopg2 для связи с PostgreSQL. Я исправил проблемы с разрешениями, используя функции copy_from и copy_expert, которые открывают файл на стороне клиента как пользователь, выполняющий скрипт python, и передают данные в базу данных через STDIN.

Обратитесь к этой ссылке для получения дополнительной информации.

Ответ 13

Вы должны предоставить пользователю разрешение pg_read_server_files, если вы не используете postgres superuser.

Пример:

GRANT pg_read_server_files TO my_user WITH ADMIN OPTION;

Ответ 14

Может быть, вы используете pgadmin, подключая удаленный хост, а затем U пытаетесь обновить его из вашей системы, но он ищет этот файл в удаленной системной файловой системе... его ошибка, с которой я столкнулся, может быть ее также для проверки u это