Содержание
- Ошибки Postgres
- Ошибки
- psql command not found
- ERROR: character with byte sequence 0xd0 0x9a in encoding «UTF8» has no equivalent in encoding «WIN1252»
- ERROR: database «db» is being accessed by other users
- FATAL password authentication failed for user postgres
- ERROR: could not open file «/home/user…» for reading: Permission denied
- ERROR: COPY quote must be a single one-byte character
- ERROR: date/time field value out of range
- psql: could not connect to server: No such file or directory
- pg_basebackup: could not connect to server: could not connect to server: No route to host
- Failed to stop postgresql.service: Unit postgresql.service not loaded
- ERROR: WAL level not sufficient for making an online backup
- NOTICE: WAL archiving is not enabled
- Postgres ERROR: не удалось открыть файл для чтения: Permission denied
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- Ответ 11
- Ответ 12
- Ответ 13
- Ответ 14
Ошибки Postgres
Ошибки
psql command not found
Вы хотите запустить Postgres скрипт из bash
andrey@olegovich-10:/mnt/c/Users/olegovich$ psql -h localhost -p 5432 -U andrei
но получаете эту ошибку
-bash: psql: command not found
Это значит, что путь до Postgres не прописан в $PATH
Чтобы узнать, что прописано в $PATH достаточно сделать
/home/andrei/bin:/home/andrei/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath_target_1128437:/mnt/c/ProgramData/Oracle/Java/javapath_target_5252250:/mnt/c/Windows/System32:/mnt/c/Windows:/mnt/c/Windows/System32/wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/Program Files/OpenVPN/bin:/mnt/c/Program Files (x86)/Microsoft SQL Server/Client SDK/ODBC/130/Tools/Binn:/mnt/c/Program Files (x86)/Microsoft SQL Server/140/Tools/Binn:/mnt/c/Program Files (x86)/Microsoft SQL Server/140/DTS/Binn:/mnt/c/Program Files (x86)/Microsoft SQL Server/140/Tools/Binn/ManagementStudio:/mnt/c/Program Files/MiKTeX 2.9/miktex/bin/x64:/mnt/c/Users/andreyolegovich_ru/Documents/Software/axis2-1.6.2:/mnt/c/Users/andreyolegovich_ru/Documents/Software/axis2-1.6.2/bin:/mnt/c/Windows/System32/OpenSSH:/mnt/c/Program Files/TortoiseSVN/bin:/mnt/c/Program Files/Microsoft SQL Server/Client SDK/ODBC/130/Tools/Binn:/mnt/c/Program Files/Microsoft SQL Server/140/Tools/Binn:/mnt/c/Program Files/Microsoft SQL Server/140/DTS/Binn:/mnt/c/Program Files (x86)/Intel/Intel(R) Management Engine Components/DAL:/mnt/c/Program Files/Intel/Intel(R) Management Engine Components/DAL:/mnt/c/Program Files/TortoiseGit/bin:/mnt/c/Program Files/Git/cmd:/mnt/c/Program Files/nodejs:/mnt/c/Program Files/Intel/WiFi/bin:/mnt/c/Program Files/Common Files/Intel/WirelessCommon:/mnt/c/Program Files/PuTTY:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Continuum/anaconda3:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Continuum/anaconda3/Library/mingw-w64/bin:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Continuum/anaconda3/Library/bin:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Continuum/anaconda3/Scripts:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Python/Python36/Scripts:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Python/Python36:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/andreyolegovich_ru/AppData/Local/atom/bin:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Python/Python36-32:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Python/Python36-32/Scripts:/mnt/c/Program Files (x86)/Nmap:/mnt/c/Program Files (x86)/Mozilla Firefox:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Fiddler:/mnt/c/Program Files/JetBrains/PyCharm Community Edition 2018.3.2/bin:/mnt/c/Users/andreyolegovich_ru/AppData/Roaming/npm:/mnt/c/Program Files/Intel/WiFi/bin:/mnt/c/Program Files/Common Files/Intel/WirelessCommon:/mnt/c/Users/andreyolegovich_ru/AppData/Local/Programs/Microsoft VS Code/bin:/snap/bin
ERROR: character with byte sequence 0xd0 0x9a in encoding «UTF8»
has no equivalent in encoding «WIN1252»
Скорее всего Вы создали базу данных, и даже смогли туда что-то импортировать, например, из .csv файла.
Но сделать SELECT * FROM table; уже не получается, потому что кодировка базы и кодировка файла не совпадают.
Возможно, Вы уже попробовали явно указать SET CLIENT_ENCODING TO ‘utf8’; при импорте файла. Но так как кодировка WIN1252 — это кодировка БД, способ не сработал.
Нужно привести файл и БД к одной кодировке — пересоздайте БД в utf8, например.
Как проверить кодировки я писал выше — Проверка кодировок БД
Как указать кодировку при создании БД — Создание БД
ERROR: database «db» is being accessed by other users
Если Вы делаете DROP DATABASE db; и получаете
ERROR: database «db» is being accessed by other users
DETAIL: There are 2 other sessions using the database.
Значит где-то ещё не закрыто подключение к БД. Например, Вы открывали её через pgAdmin.
Нужно найти это подключение и закрыть
FATAL password authentication failed for user postgres
Если вы логинитесь в pgAdmin, но не помните пароль — его можно поменять через терминал
sudo su — postgres
psql
postgres=# ALTER USER postgres PASSWORD ‘новый_пароль’;
ERROR: could not open file «/home/user…» for reading: Permission denied
Если вы пытаетесь прочитать из файла, а получаете
ERROR: could not open file «/home/user/file.csv» for reading: Permission denied HINT: COPY FROM instructs the PostgreSQL server process to read a file. You may want a client-side facility such as psql’s copy. SQL state: 42501
Значит у postgres недостаточно прав для чтения из файла. Простое добавление прав на чтение вроде
chmod +r file.csv
Проблему, скорее всего, не решит.
Как вариант — предлагаю переместить нужный файл в директорию /tmp
cp /home/user/file.csv /tmp
ERROR: COPY quote must be a single one-byte character
Если вы пытаетесь прочитать из файла, а получаете
ERROR: COPY quote must be a single one-byte character
SQL state: 0A000
Скорее всего присутствует какой-то лишний символ в QUOTE, например
ERROR: date/time field value out of range
Если вы пытаетесь прочитать из .csv файла, а получаете
ERROR: date/time field value out of range: «» HINT: Perhaps you need a different «datestyle» setting. CONTEXT: «» SQL state: 22008
Скорее всего ваш текущий datestyle не совпадает с тем, который используется в .csv файле.
datestyle — это порядок записи даты. Может быть День — Месяц — Год (DDMMYYYY), Год — Месяц — День (YYYYMMDD) или, например американский стиль Месяц — День — Год (MMDDYYYY)
Это всё актуально если тип столбца указан как дата date. Можно изменить тип на char тогда datestyle уже не нужно настраивать.
Стилей много и если они не совпадают — получается что месяц принимает значение больше 12.
Как вариант — можно перед выполнение скрипта временно изменить свой datestyle.
Например, если нужно импортировать данные из .csv с американским стилем — перед импортом добавьте
set datestyle to «US»;
psql: could not connect to server: No such file or directory
Если вы выполнили
И получили ошибку
psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket «/var/run/postgresql/.s.PGSQL.5432»?
Очень часто данная ошибка возникает вследствии того, что не была инициализирована база данных.
Initializing database . OK
Подробнее про инициализацию базы данных PostgreSQL на примере для CentOS Linux читайте в статье
pg_basebackup: could not connect to server: could not connect to server: No route to host
Если вы пытаетесь сделать реплику
pg_basebackup -h 192.168.56.109 -U repluser -D /var/lib/pgsql/data —xlog-method=stream
pg_basebackup: could not connect to server: could not connect to server: No route to host Is the server running on host «192.168.56.109» and accepting TCP/IP connections on port 5432?
sudo firewall-cmd —zone=public —add-port=5432/tcp —permanent
sudo firewall-cmd —reload
sudo firewall-cmd —list-ports
Failed to stop postgresql.service: Unit postgresql.service not loaded
Причин может быть много но среди новичков самая распространённая — попытка остановить postgresql из под пользователя postges
Например, в моём терминале я по приглашению bash-4.2$ вижу, что зашёл как postgres
Приглашение изменится на
И затем уже можно останавливать сервер
sudo systemctl stop postgresql
sudo systemctl status postgresql
● postgresql.service — PostgreSQL database server Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled) Active: inactive (dead) Jun 09 12:20:24 localhost.localdomain systemd[1]: Unit postgresql.service entered failed state. Jun 09 12:20:24 localhost.localdomain systemd[1]: postgresql.service failed. Jun 09 12:21:59 localhost.localdomain systemd[1]: Starting PostgreSQL database server. Jun 09 12:22:00 localhost.localdomain systemd[1]: Started PostgreSQL database server. Jun 10 19:10:02 localhost.localdomain systemd[1]: Stopping PostgreSQL database server. Jun 10 19:10:03 localhost.localdomain systemd[1]: Stopped PostgreSQL database server. Jun 10 22:14:18 localhost.localdomain systemd[1]: Starting PostgreSQL database server. Jun 10 22:14:19 localhost.localdomain systemd[1]: Started PostgreSQL database server. Jun 11 10:11:15 localhost.localdomain systemd[1]: Stopping PostgreSQL database server. Jun 11 10:11:16 localhost.localdomain systemd[1]: Stopped PostgreSQL database server.
ERROR: WAL level not sufficient for making an online backup
Вы хотите настроить онлайн бэкап, например с помощью команды
-bash-4.2$ psql -c «SELECT pg_start_backup(‘replbackup’);»
Но получаете ошибку
ERROR: WAL level not sufficient for making an online backup
HINT: wal_level must be set to «archive» or «hot_standby» at server start.
Нужно узнать расположение конфигурационного файла postgresql.conf
-bash-4.2$ su — postgres -c «psql -c ‘SHOW config_file;’»
Password: config_file ————————————- /var/lib/pgsql/data/postgresql.conf (1 row)
Нужно установить wal_level = hot_standby
NOTICE: WAL archiving is not enabled
Вы заканчиваете бэкап, например с помощью команды
psql -c «SELECT pg_stop_backup();»
Но получаете предупреждение
NOTICE: WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup
Источник
Postgres ERROR: не удалось открыть файл для чтения: Permission denied
Компьютер: Mac OS X, версия 10.8 База данных: Postgres
Попытка импортировать файл csv в postgres.
Затем я попробовал
Наконец, я попробовал
Любая помощь очень ценится!
ОТВЕТЫ
Ответ 1
Это изменит права доступа для вашей папки. Обратите внимание, что каждый сможет прочитать ваш файл. Вы не можете использовать 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 для родительской папки:
(мой экспорт находится в /home/my_user/export_folder/export_1.csv )
Ответ 9
просто на случай, если вы столкнетесь с этой проблемой под Windows 10, добавьте группу пользователей «youcomputerUsers» на вкладке безопасности и предоставьте ей полный контроль, что решило мою проблему
Ответ 10
для MacBook сначала я открыл терминал, а затем введите
или в каталоге поиска вы напрямую вводите команду + shift + g, затем набираете /tmp и переходите в папку.
он открывает временную папку в Finder. Затем я вставляю скопированный файл CSV в эту папку. Затем я снова захожу в терминал postgres и набираю команду ниже, а затем она копирует мои данные 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 .
Ответ 14
Может быть, вы используете pgadmin, подключая удаленный хост, а затем U пытаетесь обновить его из вашей системы, но он ищет этот файл в удаленной системной файловой системе. его ошибка, с которой я столкнулся, может быть ее также для проверки u это
Источник
#postgresql
Вопрос:
14:57:24,484 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (bus [5]) SQL Error: 0, SQLState: 42501
14:57:24,484 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (bus [5]) ERROR: could not open file "pg_tblspc/16397/PG_11_201809181/10119411/4698976": Operation not permitted
Where: parallel worker
Caused by: org.postgresql.util.PSQLException: ERROR: could not open file "pg_tblspc/16397/PG_11_201809181/10119411/4698976": Operation not permitted
Where: parallel worker
Скажите мне, что это за ошибка?
Комментарии:
1. Вызвано: org.postgresql.util. Исключение PSQLException: ОШИБКА: не удалось открыть файл «pg_tblspc/16397/PG_11_201809181/10119411/4698976»: Операция не разрешена Где: параллельный рабочий
2. Существует ли этот файл? Принадлежит ли он пользователю PostgreSQL?
3. Да, он существует и принадлежит пользователю postgres, интересно, когда он перезапустил его — проблем не было. Возможно ли, что файл был занят каким-то другим процессом?
4. Наиболее вероятным кандидатом будет антивирусная программа, особенно если вы работаете в Windows. Им никогда не следует разрешать прикасаться к каталогу данных.
5. Спасибо, антивирус установлен на хостах, возможно, проблема в этом!
Ответ №1:
Наиболее вероятным кандидатом будет антивирусная программа, особенно если вы работаете в Windows. Им никогда не следует разрешать прикасаться к каталогу данных.
Этот ответ предназначен только для начинающих Linux.
Предполагая, что изначально у пользователя БД не было разрешения на файл/папку (каталог) на стороне клиента.
Ограничимся следующим:
Пользователь: postgres
Цель: Вы хотели (записывать/читать) в определенную папку
Орудие труда: psql
Подключено к определенной базе данных: YES
ПУТЬ К ФАЙЛУ: /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 символа после TYPE)
ГРУППОВЫЕ ПРАВА (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 - Попробуй еще раз.
Это, скорее всего, поможет вам получить ожидаемый успешный результат.
Компьютер: 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