Ошибка Postgres: не удалось открыть файл для чтения: отказано в разрешении
компьютер: 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
любая помощь очень ценится!
8 ответов
chmod a+rX /users/darchcruise/ /users/darchcruise/desktop /users/darchcruise/desktop/items_ordered.csv
это изменит права доступа для вашей папки. Обратите внимание, что каждый сможет прочитать файл. Вы не можете использовать chown как пользователя без прав администратора. Также рассмотрим обучение umask для облегчения создания общих файлов.
предполагая, что psql
инструмент командной строки, вы можете использовать \copy
вместо copy
.
\copy
открывает файл и передает содержимое на сервер, тогда как copy
сообщает серверу открыть сам файл и прочитать его, что может быть проблематичным с точки зрения разрешений или даже невозможным, если клиент и сервер работают на разных машинах без совместного использования файлов между ними.
под капотом \copy
реализуется как COPY FROM stdin
и принимает те же параметры, что и серверная сторона COPY
.
у меня была проблема, когда я пытаюсь экспортировать данные с удаленного сервера на локальный диск. Я не понимал, что SQL copy
фактически выполняется на сервере и что он пытается писать в папку на сервере. Вместо этого правильным было использовать \copy
который является командой psql, и он записывает в локальную файловую систему, как я ожидал. http://www.postgresql.org/message-id/CAFjNrYsE4Za_KWzmfgN1_-MG7GTw_vpMRxPk=OEjAiLqLskxdA@mail.gmail.com
возможно это может пригодиться и кому-то еще.
другой способ сделать это, если у вас есть pgAdmin и вам удобно использовать GUI, - это перейти к таблице в схеме и щелкнуть правой кнопкой мыши по таблице, в которую вы хотите импортировать файл, и выбрать "импорт". просмотрите свой компьютер для файла, выберите тип файла, столбцы, в которые вы хотите вменить данные, а затем выберите Импорт.
Это было сделано с помощью pgAdmin III и версии 9.4 PostgreSQL
скопируйте CSV-файл в папку / tmp
файлы, названные в команде копирования, считываются или записываются непосредственно сервером, а не клиентским приложением. Поэтому они должны находиться на компьютере сервера баз данных, а не на клиенте, или быть доступны для него. Они должны быть доступны и доступны для чтения или записи пользователем PostgreSQL (ID пользователя, от имени которого работает сервер), а не клиентом. Копировать именование файла разрешено только суперпользователям базы данных, так как это позволяет читать или запись любого файла, к которому у сервера есть права доступа.
для меня это сработало, чтобы просто добавить sudo (или запустить как root) для команды chown:
sudo chown postgres / users/darchcruise/desktop / items_ordered.csv
может быть, вы используете pgadmin, подключив удаленный хост, а затем пытаетесь обновить его из своей системы, но он ищет этот файл в файловой системе удаленной системы... его ошибка wat, с которой я столкнулся, может быть его также для проверки его