Я пытаюсь выполнить несколько команд postgres из файла bash.
Я пытаюсь удалить схему, написав следующую строку
DROP SCHEMA "xxx" IF EXISTS
У меня здесь две проблемы
Я не уверен, как указать базу данных, из которой следует удалить схему
Я получаю следующее сообщение об ошибке - «DROP: command not found»
Может ли кто-нибудь помочь мне с этим вопросом?
Вы не можете выполнять операторы SQL непосредственно из сценария bash. Использовать psql
для отправки команды на сервер базы данных. Если у вас есть один (или несколько) операторов SQL для выполнения, вы можете сделать это следующим образом
psql -d YOUR_DB_NAME -c "YOUR_SQL_STATEMENT"
Убедитесь, что ваш оператор SQL не содержит кавычек и не экранирует их соответствующим образом. Если у вас много операторов SQL в файле, вы можете выполнить их все следующим образом
psql -d YOUR_DB_NAME -f FILENAME
В приведенном выше примере YOUR_DB_NAME следует заменить именем вашей базы данных, YOUR_SQL_STATEMENT - оператором SQL, который вы хотите выполнить, а FILENAME - именем файла с операторами SQL, которые необходимо выполнить.
Если вам нужно указать дополнительные параметры, такие как имя пользователя, проверьте сообщение об использовании команды, отображаемое с psql -?
.
Также обратите внимание, что ваш синтаксис для DROP SCHEMA
это неверно. Так должно быть
DROP SCHEMA IF EXISTS schema_name;
Смотрите также эта документация.
уверен Адам Зальцман
Вот окончательное решение
dbname = "хххх"
pg_dump $ dbname> mydb.backup
pg_dump $ dbname -s -N 'публичный'> test.out
psql -d $ dbname -c "DROP SCHEMA IF EXISTS aaa CASCADE" psql -d $ dbname -c "DROP SCHEMA IF EXISTS bbb CASCADE"
кот test.out | psql $ dbname
И это сработало :-)