Windows psql отказано в доступе

Обновлено: 01.07.2024

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Использовать c:\Temp\"Your File"\ .

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

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

Этот ответ предназначен только для начинающих пользователей Linux.

Предполагая, что изначально у пользователя БД не было разрешения на файл / папку (каталог) на стороне клиента.

Цель: вы хотели (писать в / читать) конкретную папку

Орудие труда: psql

Подключено к конкретной базе данных: YES

ПУТЬ К ФАЙЛУ: /home/user/training/sql/csv_example.csv

Запрос: \copy (SELECT * FROM table_name TO FILE_PATH, DELIMITER ',' CSV HEADER;

Ожидаемые результаты: COPY COUNT_OF_ROWS_COPIED

Вот шаги, которые я предпринял, чтобы попытаться решить эту проблему.

  1. Подтвердите разрешения FILE_PATH в вашей файловой системе.

Внутри терминала, чтобы просмотреть разрешения для файла / папки, вам необходимо их длинный список, введя команду ls -l .

На выходе есть раздел, который показывает что-то вроде этого -> drwxrwxr-x Что интерпретируется следующим образом:

ТИП | ПРАВА ВЛАДЕЛЬЦА | ПРАВА ГРУППЫ | ПРАВА ПОЛЬЗОВАТЕЛЯ

rwx (r: чтение, W: запись, X: выполнение)

ТИП (1 символ) = d: каталог, -: файл

ПРАВА ВЛАДЕЛЬЦА (3 символа после ТИПА)

ПРАВА ГРУППЫ (3 символа после ВЛАДЕЛЬЦА)

ПРАВА ПОЛЬЗОВАТЕЛЯ (3 символа после ГРУППЫ)

  1. Если разрешений недостаточно (убедитесь, что пользователь может, по крайней мере, ввести все папки по указанному вами пути) - x .

Это означает, что для FILE_PATH все каталоги (домашний, пользовательский, обучающий, sql) должны иметь как минимум x в ПРАВАХ ПОЛЬЗОВАТЕЛЯ.

Читайте также: