#linux #postgresql #shell #psql
Вопрос:
Я пытаюсь выполнить sql — запрос после входа в базу данных. Хотя в официальной документации Postgres упоминается опция c, я просто продолжаю получать сообщение об ошибке, в котором говорится, что команда,- c, —c недопустимы.
Ниже приведена строка в файле моего сценария оболочки.
psql "host='localhost' port=xxxx dbname='xxxxx' user='xxxx' password='xxxxx' -c='sql string'"
Комментарии:
1. Что за двойные кавычки? (кстати, в целом , вводить пароль в командной строке-очень плохая идея; несколько безопаснее поместить его в левую часть команды, где он входит в среду; размещение его в правой части означает, что все/все в системе могут его видеть
ps
).2. Я просто продолжаю получать сообщение об ошибке, в котором говорится, что опция c недопустима.
3. (это не значит, что нам нужен ваш пароль и т. Д., Но нам нужно что-то, что выходит из строя так же, как ваша настоящая команда при запуске без изменений, и точное сообщение об ошибке, а не его перефразирование на английском языке)
4. Я не понимаю вашего последнего комментария. psql вызывается из файла *.sh. Я в основном запускаю файл в терминале.
5. Если я удалю опцию c, все будет просто работать. Мне придется вручную ввести инструкцию select в терминале
Ответ №1:
Вы смешиваете синтаксис длинных и коротких вариантов …
Этот:
#!/bin/sh
echo "Connect to DB"
psql "host='localhost' port=xxxx dbname='xxxxx' user='xxxx' password='xxxxx'" -c='select * from pg_stat_archive'
должно быть:
#!/bin/sh
echo "Connect to DB"
psql "host='localhost' port=xxxx dbname='xxxxx' user='xxxx' password='xxxxx'" -c 'select * from pg_stat_archive'
Знак равенства используется только для длинной формы: --command=command
Комментарии:
1. Это тоже не работает.
Ответ №2:
Используйте документ здесь в своем сценарии оболочки, чтобы избежать завершения и поведения-c
psql <
Смотрите это для конкретного поведения и примеров https://www.postgresql.org/docs/12/app-psql.html
Ответ №3:
-вариант c должен быть помещен спереди на основе комментария @Charles Duffy
#!/bin/sh
echo "Connect to DB"
psql -c 'select * from any_table' "host='localhost' port=xxxx dbname='xxxxx' user='xxxx' password='xxxxx'"
Комментарии:
1. Пожалуйста, отформатируйте свою публикацию так, чтобы строки кода отображались в отдельных строках.