Назад | Перейти на главную страницу

Удалить схему из Postgresql

Я пытаюсь выполнить несколько команд postgres из файла bash.

Я пытаюсь удалить схему, написав следующую строку

DROP SCHEMA "xxx" IF EXISTS

У меня здесь две проблемы

  1. Я не уверен, как указать базу данных, из которой следует удалить схему

  2. Я получаю следующее сообщение об ошибке - «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

И это сработало :-)