Я пишу сценарий удара, где я использую psql (Postgresql).
DATABASE='scifi'
sudo -u postgres psql
count=SELECT COUNT(*) FROM (SELECT datname FROM pg_catalog.pg_database WHERE lower(datname)=lower($DATABASE)
Я хочу удалить базу данных, если существуют и воссозданный с тем же именем и выделенный пользователю.
Также другие операции, связанные с psql.
Моя проблема то, что, после того как я ввожу psql, я не могу передать команды удара и получить информацию. Я отчасти понимаю, почему (потому что я перемещаюсь от удара до psql), но я должен найти решение.
Можно передать единственные команды как строковое использование -c
, или передайте более сложные последовательности команды через стандартный вход, например, с помощью здесь документ:
sudo -u postgres psql << EOF
SELECT COUNT(*) FROM (
SELECT datname FROM pg_catalog.pg_database
WHERE lower(datname)=lower($DATABASE)
)
EOF
Вы, возможно, должны заключить в кавычки или выйти из специальных символов оболочки такой как *
то, что Вы не хотите быть расширенными.
См. документацию PostgreSQL 9.4.19
Для получения результата используйте оболочку $(...)
синтаксис замены команды:
count=$(sudo -u postgres psql << EOF
SELECT COUNT(*) FROM (
SELECT datname FROM pg_catalog.pg_database
WHERE lower(datname)=lower($DATABASE)
)
EOF
)