Soltar Esquema do Postgresql

3

Estou tentando executar alguns comandos postgres de um arquivo bash.

Estou tentando eliminar um esquema escrevendo a seguinte linha

DROP SCHEMA "xxx" IF EXISTS

Eu tenho dois problemas aqui

  1. Não sei como especificar o banco de dados do qual o esquema deve ser excluído

  2. Estou recebendo a seguinte mensagem de erro - "DROP: comando não encontrado"

Alguém pode me ajudar com esse problema?

    
por Trip 04.01.2012 / 00:00

2 respostas

10

Você não pode executar instruções SQL diretamente de um script bash. Use psql para enviar o comando para o servidor de banco de dados. Se você tiver uma única (ou algumas) instruções SQL para executar, você pode fazer assim

psql -d YOUR_DB_NAME -c "YOUR_SQL_STATEMENT"

Certifique-se de que sua instrução SQL não inclua aspas ou as escape adequadamente. Se você tem muitas instruções SQL em um arquivo, você pode executar todas elas como esta

psql -d YOUR_DB_NAME -f FILENAME

Acima, YOUR_DB_NAME deve ser substituído pelo nome do banco de dados, YOUR_SQL_STATEMENT pela instrução SQL que você deseja executar e FILENAME é o nome do arquivo com instruções SQL a serem executadas.

Se você precisar especificar parâmetros extras como nome de usuário, verifique a mensagem de uso do comando exibida com psql -? .

Além disso, observe que sua sintaxe para DROP SCHEMA está incorreta. Deve ser

DROP SCHEMA IF EXISTS schema_name;

Veja também esta documentação .

    
por 04.01.2012 / 00:16
0

certeza de que Adam Zalcman

Aqui está a solução final

dbname="xxxx"

Faça uma cópia do banco de dados completo

pg_dump $ dbname > mydb.backup

backup do esquema que queremos

pg_dump $ dbname -s -N 'public' > test.out

Solte os

do esquema definido pelo usuário

psql -d $ dbname -c "DROP SCHEMA SE EXISTE aaa CASCADE" psql -d $ dbname -c "DROP SCHEMA IF EXISTE bbb CASCADE"

restaura o esquema para restaurar as permissões apropriadas

cat test.out | psql $ dbname

E funcionou: -)

    
por 04.01.2012 / 16:53

Tags