Оболочка Bash для подключения к БД и запуска запроса из PSQL выдаёт неизвестному пользователю: - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь запустить из оболочки команду без фактического переключения пользователей или входа в БД вручную (чтобы оболочка не прерывалась с запросом пароля)

CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA public;

То, что я с нетерпением жду запуска в базе данных, называется билетами с пользователем ticketng

У меня уже есть настроенный файл .pgpass, и он работает так же, как и мой билет пользователя psql DB

sudo -H -u postgres bash -c "cd && psql -c \"CREATE ROLE ticketing LOGIN CREATEDB;\""
sudo -H -u postgres bash -c "cd && psql -c \"ALTER USER ticketing WITH PASSWORD 'testpass';\""
sudo -H -u postgres bash -c "cd && psql -c \"CREATE DATABASE ticketing WITH ENCODING='UTF8' OWNER=ticketing CONNECTION LIMIT=-1;\""
sudo -H -u postgres bash -c "cd && psql -c \"ALTER USER ticketing WITH SUPERUSER;\""

До сих пор все в порядке, и все же, когда вы пытаетесь соединить БД с билетами в одну строку, чтобы автоматизировать это, он просто не работает после запуска

sudo -H -u ticketing bash -c "cd && psql -c \"CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA public;\""

Я получаю:

sudo: неизвестный пользователь: тикет

sudo: невозможно инициализировать плагин политики

То, чего я пытаюсь достичь, можно сделать, запустив вручную следующие строки

psql -h localhost -U ticketing
CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA public;
\q

однако это останавливает форму оболочки на самом деле "автоматический"

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Ты немного цитируешь ад.Внутренние кавычки не экранированы и исчезнут.Добавьте несколько одинарных кавычек в смесь:

sudo -H -u ticketing bash -c "cd && psql -c 'CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\" WITH SCHEMA public;'"
# ...........................1..............2...............................3...........3....................21

или используйте очень аккуратный heredoc:

sudo -H -u ticketing bash <<__END__
cd && psql -c 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA public;'
__END__
0 голосов
/ 07 мая 2019

Добро пожаловать в ад обратной косой черты!Вам нужно добавить три обратные косые черты к двойным кавычкам, окружающим uuid-ossp, чтобы получить правильный вывод:

sudo -H -u ticketing bash -c "cd && psql -c \"CREATE EXTENSION IF NOT EXISTS \\\"uuid-ossp\\\" WITH SCHEMA public;\""

Потому что:

bash-3.2$ echo "cd && psql -c \"CREATE EXTENSION IF NOT EXISTS \\\"uuid-ossp\\\" WITH SCHEMA public;\""

cd && psql -c "CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\" WITH SCHEMA public;"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...