Используя удар в сочетании с psql, передающей переменной между ними

Я пишу сценарий удара, где я использую 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), но я должен найти решение.

2
задан 12 August 2018 в 15:47

1 ответ

Можно передать единственные команды как строковое использование -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
)
4
ответ дан 2 December 2019 в 02:12

Другие вопросы по тегам:

Похожие вопросы: