оболочка Linux выполняет SQL-запрос

#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. Пожалуйста, отформатируйте свою публикацию так, чтобы строки кода отображались в отдельных строках.