This answer is only for Linux Beginners.
Assuming initially the DB user didn’t have file/folder(directory) permission on the client side.
Let’s constrain ourselves to the following:
User: postgres
Purpose: You wanted to (write to / read from) a specific folder
Tool: psql
Connected to a specific database: YES
FILE_PATH: /home/user/training/sql/csv_example.csv
Query: copy (SELECT * FROM table_name TO FILE_PATH, DELIMITER ',' CSV HEADER;
Actual Results: After running the query you got an error : Permission Denied
Expected Results: COPY COUNT_OF_ROWS_COPIED
Here are the steps I’d follow to try and resolve it.
- Confirm the FILE_PATH permissions on your File system.
Inside a terminal to view the permissions for a file/folder you need to long list them by entering the command ls -l
.
The output has a section that shows sth like this -> drwxrwxr-x
Which is interpreted in the following way:
TYPE | OWNER RIGHTS | GROUP RIGHTS | USER RIGHTS
rwx
(r: Read, W: Write, X: Execute)
TYPE (1 Char) = d: directory, -: file
OWNER RIGHTS (3 Chars after TYPE)
GROUP RIGHTS (3 Chars after OWNER)
USER RIGHTS (3 Chars after GROUP)
- If permissions are not enough (Ensure that a user can at least enter all folders in the path you wanted path) —
x
.
This means for FILE_PATH, All the directories (home , user, training, sql) should have at least an x
in the USER RIGHTS.
- Change permissions for all parent folders that you need to enter to have a
x
. You can usechmod rights_you_want parent_folder
Assuming /training/
didn’t have an execute permission.
I’d go the user folder and enter chmod a+x training
- Change the destination folder/directory to have a
w
if you want to write to it. or at least ar
if you want to read from it
Assuming /sql
didn’t have a write permission.
I would now chmod a+w sql
- Restart the postgresql server
sudo systemctl restart postgresql
- Try again.
This would most probably help you now get a successful expected result.
Having real trouble getting S3D to consistently send larger files to my printer. I’m getting «Could not open file for reading».
Details: XYZ Duo 2.1.0 firmware
OS: OSX 10.11.6 (el capitan)
In the past, I’ve been able to save toolpaths to disk and manually run the g-code from the machine control panel when this happens (as opposed to just hitting the print/usb cable icon). But, now even that is failing. Depending on the .stl file I’m trying to print, the line number of the fail varies. But, in every case I get a checksum error: «CheckSumFail:PN:0» while the file is uploading to the printer.
The files that fail tend to be larger/taller. But, nothing crazy. As a matter of troubleshooting, I built a cylinder with a hole that seems to have trouble loading. I’ve attached it. That same cylinder without the hole sends fine every time.
It isn’t predictable, either. The same file that errors out—with persistence—will eventually go through. But, I’ve restarted my computer, restarted the printer; checked the permissions on the temp directory and the directory I use for manually created .3w files to make sure they have read/write access for everyone.
I don’t know if I’ve left out any pertinent details. But, this is getting frustrating. I was printing a job and one of the extruders jammed. Cleared and cleaned everything out, and now I’ve spent an hour trying to get that same job to even upload now. No different settings—the same .3w file as before that had already begun printing once.
Any ideas?
Компьютер: 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
Любая помощь высоко ценится!
17 ответов
Лучший ответ
chmod a+rX /users/darchcruise/ /users/darchcruise/desktop /users/darchcruise/desktop/items_ordered.csv
Это изменит права доступа к вашей папке. Обратите внимание, что каждый сможет прочитать ваш файл. Вы не можете использовать chown как пользователь без прав администратора. Также рассмотрите возможность изучения umask, чтобы упростить создание общих файлов.
23
Basilevs
19 Окт 2013 в 10:43
У меня возникла проблема, когда я пытался экспортировать данные с удаленного сервера на локальный диск. Я не понимал, что SQL copy
на самом деле выполняется на сервере и пытается записать в папку сервера. Вместо этого правильнее было использовать copy
, которая является командой psql и записывает в локальную файловую систему, как я и ожидал. http://www.org/postgresponse/ /CAFjNrYsE4Za_KWzmfgN1_-MG7GTw_vpMRxPk=OEjAiLqLskxdA@mail.gmail.com
Возможно, это может быть полезно и кому-то другому.
5
nikola
14 Дек 2015 в 14:50
Скопируйте файл CSV в папку / tmp .
Файлы, указанные в команде COPY, читаются или записываются непосредственно сервером, а не клиентским приложением. Следовательно, они должны находиться на сервере базы данных или быть доступным для него, а не для клиента. Они должны быть доступны для чтения или записи пользователю PostgreSQL (идентификатор пользователя, от имени которого работает сервер), а не клиенту. Имя файла COPY разрешено только суперпользователям базы данных, поскольку оно позволяет читать или записывать любой файл, к которому у сервера есть права доступа.
18
Antonio
28 Сен 2017 в 23:18
Скопируйте файл CSV в / tmp
Для меня это решило проблему.
83
user637338
2 Май 2016 в 20:06
Предполагая, что инструмент командной строки psql
, вы можете использовать copy
вместо copy
.
copy
открывает файл и передает его содержимое на сервер, тогда как copy
сообщает серверу открыть сам файл и прочитать его, что может быть проблематично с точки зрения разрешений или даже невозможно, если клиент и сервер работают. на разных машинах без обмена файлами между ними.
Под капотом copy
реализован как COPY FROM stdin
и принимает те же параметры, что и серверный COPY
.
144
Daniel Vérité
19 Окт 2013 в 17:31
Другой способ сделать это, если у вас есть pgAdmin и вам удобно пользоваться графическим интерфейсом, — перейти к таблице в схеме и щелкнуть правой кнопкой мыши по таблице, в которую вы хотите импортировать файл, и выбрать «Импорт», найти файл на вашем компьютере, выбрать тип вашего файла, столбцы, в которые должны быть импортированы данные, а затем выберите импорт.
Это было сделано с помощью pgAdmin III и версии PostgreSQL 9.4.
4
Jeff Spicoli
22 Июл 2015 в 19:42
Для меня это сработало просто добавить sudo (или запустить от имени root) для команды chown:
Sudo chown postgres /users/darchcruise/desktop/items_ordered.csv
1
annakeuchenius
3 Мар 2017 в 14:36
У меня было такое же сообщение об ошибке, но я использовал psycopg2
для связи с PostgreSQL. Я исправил проблемы с разрешениями, используя функции copy_from
и copy_expert
, которые будут открывать файл на стороне клиента в качестве пользователя, запускающего скрипт python, и передавать данные в базу данных через STDIN
.
См. эту ссылку для получения дополнительной информации.
0
mx3swish
3 Июл 2019 в 15:54
На всякий случай, если вы столкнулись с этой проблемой в Windows 10, добавьте группу пользователей «youcomputer Users» на вкладку безопасности и предоставьте ей полный контроль, что решило мою проблему.
0
Benderradji Khireddine
29 Апр 2019 в 00:07
COPY your table (Name, Latitude, Longitude) FROM 'C:Tempyour file.csv' DELIMITERS ',' CSV HEADER;
Используйте c:Temp"Your File"
.
2
double-beep
9 Фев 2020 в 18:47
Для MacBook сначала я открыл терминал, затем набрал
open /tmp
Или в каталоге поиска вы напрямую вводите команду + shift + g, затем набираете / tmp и переходите в папку.
Он открывает временную папку в Finder. затем я вставляю скопированный файл csv в эту папку. затем снова перехожу в терминал postgres и набираю команду ниже, а затем копируются мои данные csv в таблицу db
copy recharge_operator FROM '/private/tmp/operator.csv' DELIMITER ',' CSV;
1
Dinesh Gurjar
7 Май 2019 в 09:10
Вы должны предоставить пользователю разрешение pg_read_server_files
, если вы не используете postgres
superuser
.
Примере:
GRANT pg_read_server_files TO my_user WITH ADMIN OPTION;
1
gehbiszumeis
8 Авг 2019 в 14:56
Этот ответ только для начинающих пользователей Linux .
Предполагая, что изначально у пользователя БД не было прав доступа к файлу / папке (каталогу) на стороне клиента.
Ограничимся следующим:
Пользователь: postgres
Цель: вы хотели (писать в / читать) конкретную папку
Инструмент: psql
Подключено к определенной базе данных: YES
FILE_PATH: /home/user/training/sql/csv_example.csv
Запрос: copy (SELECT * FROM table_name TO FILE_PATH, DELIMITER ',' CSV HEADER;
Фактические результаты: после выполнения запроса вы получили сообщение об ошибке: Permission Denied
Ожидаемые результаты: COPY COUNT_OF_ROWS_COPIED
Вот шаги, которые я бы предпринял, чтобы попытаться решить эту проблему.
- Подтвердите разрешения FILE_PATH в вашей файловой системе.
Внутри терминала, чтобы просмотреть разрешения для файла / папки, вам нужно вывести их длинный список, введя команду ls -l
.
В выходных данных есть раздел, который показывает что-то вроде этого -> drwxrwxr-x
Что интерпретируется следующим образом:
ТИП | ПРАВА ВЛАДЕЛЬЦА | ПРАВА ГРУППЫ | ПРАВА ПОЛЬЗОВАТЕЛЯ
rwx
(r: чтение, W: запись, X: выполнение)
ТИП (1 символ) = d: каталог, -: файл
ПРАВА ВЛАДЕЛЬЦА (3 символа после ТИПА)
ПРАВА ГРУППЫ (3 символа после ВЛАДЕЛЬЦА)
ПРАВА ПОЛЬЗОВАТЕЛЯ (3 символа после ГРУППЫ)
- Если разрешений недостаточно (убедитесь, что пользователь может, по крайней мере, ввести все папки по указанному вами пути) —
x
.
Это означает, что для FILE_PATH все каталоги (домашний, пользовательский, обучающий, sql) должны иметь как минимум x
в ПРАВАХ ПОЛЬЗОВАТЕЛЯ.
- Измените разрешения для всех родительских папок, которые вам нужно ввести, чтобы иметь
x
. Вы можете использоватьchmod rights_you_want parent_folder
Предполагая, что у /training/
нет разрешения на выполнение.
Я бы пошел в папку пользователя и ввел chmod a+x training
- Измените папку / каталог назначения, чтобы иметь
w
, если вы хотите писать в него. или хотя быr
, если вы хотите читать с него
Предполагая, что у /sql
нет разрешения на запись.
Я бы сейчас chmod a+w sql
- Перезагрузите сервер postgresql
sudo systemctl restart postgresql
- Попробуй еще раз.
Скорее всего, это поможет вам получить ожидаемый результат.
0
N. Maina
2 Май 2020 в 10:45
Может быть, вы используете pgadmin, подключив удаленный хост, тогда U пытается обновить его из вашей системы, но он ищет этот файл в файловой системе удаленной системы … это ошибка, с которой я столкнулся. Может быть, это также для вас.
-3
raj
22 Мар 2014 в 13:48
Я просто скопировал исходный CSV-файл на внешний USB-накопитель, и он работал нормально.
-1
Zatman
25 Окт 2021 в 17:43
Я решил ту же проблему с рекурсивным chown в родительской папке:
sudo chown -R postgres:postgres /home/my_user/export_folder
(мой экспорт находится в /home/my_user/export_folder/export_1.csv
)
2
Benjamin Crouzier
7 Фев 2019 в 18:56
В Linux это можно исправить, предоставив пользователю postgres
права на чтение/запись/выполнение в целевом каталоге. Например:
setfacl -m u:postgres:rwx /home/hi
0
étale-cohomology
13 Июл 2022 в 07:48
компьютер: 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
.
скопируйте файл CSV в /tmp
для меня это решило проблему.
другой способ сделать это, если у вас есть 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, с которой я столкнулся, может быть его также для проверки его
Компьютер: 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
Любая помощь очень ценится!
Ответ 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, добавьте группу пользователей «youcomputerUsers» на вкладке безопасности и предоставьте ей полный контроль, что решило мою проблему
Ответ 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 это
I am testing this plugin on a local copy of a site we own and on trying to create a full backup, I consistently get the error “Could not open file for reading: D:\[…]\public_html\wp-admin” (on screen).
In your log I see the following relevant lines:
…
[2020-06-17 13:34:05] xcloner_file_system.DEBUG: Checking if wp-admin is excluded [] []
[2020-06-17 13:34:05] xcloner_file_system.INFO: Adding wp-admin to the filesystem list [“FILESYSTEM SCAN”,”INCLUDE”] []
[2020-06-17 13:34:05] xcloner_file_system.DEBUG: Storing wp-admin in the backup list [] []
…
[2020-06-17 13:37:46] xcloner_archive.INFO: Adding 0 bytes of file wp-admin to archive backup_localhost-2020-06-17_13-37-sql-97a30.tgz [] []
[2020-06-17 13:37:46] php_system.DEBUG: E_WARNING: array ( ‘type’ => 2, ‘message’ => ‘fopen(D:\[…]\public_html\wp-admin): failed to open stream: Permission denied’, ‘file’ => ‘D:\[…]\public_html\wp-content\plugins\xcloner-backup-and-restore\vendor\splitbrain\php-archive\src\Tar.php’, ‘line’ => 259, ) [] []
Versions:
– Windows 10
– PHP: 7.3.12 (WAMP)
– WP: 5.4.2
– xcloner: 4.2.0
Looking at the docs for fopen(), it becomes clear that on Windows, fopen() will indeed fail on directories, but in your code I do not see – on a first glance – if and how you handle folders differently to prevent them from being treated like a file.
When I do this:
COPY "mytable" FROM '/my/file.csv' WITH DELIMITER AS ',' CSV;
On this:
-rw-r--r-- 1 peter peter 54819176 2011-07-21 13:17 file.csv
psql tells me this:
ERROR: could not open file "/my/file.csv" for reading: Permission denied
How can I read my file?? Thanks!
— Update
It looks like something called apparmor
is installed by default in Ubuntu.
Seems to have the same functionality as SELinux, mentioned in the comments.
— Update
After removing apparmor
, I still have the same problem. selinux
is not installed.
Regarding the comment below about access, the COPY FROM is being run from a superuser account (it gives a different error message if not) and the file permissions, copied above, I understand as «readable by everyone».
— Update
I tried to get to the file under the postgres
user. It gets stuck at a particular place in the tree
drwxr--r-- 6 peter peter 4096 2011-04-14 14:03 phm
postgres@dexter:/home/peter/PyPacks$ cd phm
bash: cd: phm: Permission denied
I suppose I will just put the file somewhere else, but this is strange!