PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como faço para descartar todas as tabelas no psql (terminal interativo PostgreSQL) que começam com uma palavra comum?


Este script irá gerar os comandos DDL para eliminá-los todos:
SELECT 'DROP TABLE ' || t.oid::regclass || ';'
FROM   pg_class t
-- JOIN   pg_namespace n ON n.oid = t.relnamespace -- to select by schema
WHERE  t.relkind = 'r'
AND    t.relname ~~ E'doors\_%' -- enter search term for table here
-- AND n.nspname ~~ '%myschema%' -- optionally select by schema(s), too
ORDER  BY 1;

A conversão t.oid::regclass faz a sintaxe funcionar para identificadores de maiúsculas e minúsculas, palavras reservadas ou caracteres especiais em nomes de tabelas também. Ele também evita a injeção de SQL e acrescenta o nome do esquema quando necessário. Mais sobre tipos de identificador de objeto no manual .

Sobre o caminho de pesquisa do esquema.

Você também pode automatizar a queda, mas é insensato para não verificar o que você realmente exclui antes de fazer.

Você pode anexar CASCADE a cada instrução para objetos dependentes de DROP (visualizações e referências a chaves estrangeiras). Mas, novamente, isso é insensato a menos que você saiba muito bem o que está fazendo. As restrições de chave estrangeira não são uma grande perda, mas isso também eliminará completamente todas as visualizações dependentes. Sem CASCADE você recebe mensagens de erro informando quais objetos o impedem de descartar a tabela. E então você pode lidar com isso.