\ i разрешение psql отклонено

Я пытаюсь запустить сценарий .sql, который использует postgresql. Я установил postgresql и создал базу данных для запуска сценария, однако я постоянно получаю ошибку отказа в разрешении для файла. Ищу решение проблемы или обходной путь, позволяющий мне выполнить скрипт psql.

Что я пробовал: BASH:

chmod 777 mysqlfile.sql
chown postgres mysqlfile.sql

команды psql:

\i /path/to/file/mysqlfile.sql
psql -U postgres -d testdb -a -f mysqlfile.sql

Я уже рассмотрел следующие решения, и они не помогли решить мою проблему: Sol1, Sol2, Я использовал этот сайт в качестве инструкций по настройке postgresql.

В настоящее время я получаю ошибку отказа в разрешении при попытке запустить команды, которые я использовал выше, идеальным решением / обходным путем было бы выполнить сценарий sql в postgres в новой базе данных.


person Fletchy1995    schedule 01.04.2021    source источник
comment
Каталоги тоже имеют разрешения. [что делает cat /path/to/file/mysqlfile.sql? ]   -  person wildplasser    schedule 01.04.2021
comment
дает мне ошибку отказа в разрешении. Может быть, если я создам пользователя в postgres как мою обычную учетную запись, он будет работать ...   -  person Fletchy1995    schedule 01.04.2021
comment
psql нужно две вещи: 1) подключиться к базе данных (это удалось) 2) прочитать файл (это не удалось)   -  person wildplasser    schedule 01.04.2021


Ответы (1)


Я смог найти решение после комментария @wildplasser. Ниже у меня есть команды, запускаемые по порядку для обходного пути, после чего следует объяснение.

cs@cs: sudo -u -i postgres
postgres@cs: psql
(postgres) psql: CREATE DATABASE cs;
(postgres) psql: GRANT ALL PRIVILEGES ON DATABASE cs TO cs;
(postgres) psql: exit 
postgres@cs: exit
cs@cs: psql
(cs) psql: \i /path/to/file/mysqlfile.sql

Почему мне пришлось поступить так:

Когда вы подключаетесь к psql как кто-то другой, кроме postgres, он также ищет базу данных для подключения под этим именем. Итак, я создал базу данных (cs), которая имеет то же имя, что и моя локальная учетная запись (cs), иначе она выйдет из строя. Я также дал себе все права доступа к этой базе данных. Затем я смог выполнить команду, как ожидалось.

Это решение немного мерзко. Я буду следить за этой веткой какое-то время, и если появится что-то получше, я с радостью переключу ответ.

person Fletchy1995    schedule 01.04.2021
comment
Нет psql ищет -d имя базы данных, -U имя пользователя, -h имя хоста и / или -p номер порта. В отсутствие явных деклараций он вернется к значениям по умолчанию. Поэтому, если вы хотите подключиться к конкретной базе данных в качестве пользователя-спецификатора, используйте для этого приведенные выше аргументы. Все это изложено здесь psql и здесь Ключевые слова. - person Adrian Klaver; 01.04.2021
comment
Да, я видел это решение в одной из ссылок из моего первоначального вопроса, который я опубликовал. - person Fletchy1995; 02.04.2021