Cuando se trabaja con particiones, a menudo es necesario eliminar todas las particiones a la vez.
sin embargo
DROP TABLE tablename*
No funciona. (No se respeta el comodín).
¿Existe una forma elegante (léase: fácil de recordar) de colocar varias tablas en un comando con un comodín?
sql
postgresql
Tom Feiner
fuente
fuente

|| ' CASCADE ';y es perfectoAquí hay otra respuesta hackear a este problema. Funciona en
Abra Python, realice un procesamiento de cadenas (reemplace '' por '' y luego '\ n' por ',') y obtendrá una lista separada por comas de todas las tablas. Ahora en psql shell haz un
ubuntuy quizás en otros sistemas operativos también. hacer un\dtsímbolo del sistema en postgres (el símbolo del sistema se estaba ejecutando dentrogenome-terminalen mi caso). Entonces verá muchas tablas en la terminal. Ahora use lactrl+click-dragfuncionalidad degenome-terminalpara copiar todos los nombres de las tablas.drop table CTRL+SHIFT+Vy listo. Sé que es demasiado específico, solo quería compartirlo. :)fuente
DROP TABLE whatever_y luego presiono TAB, copie todas las tablas al portapapeles, abra sublime, busque / reemplace y reemplace usando expresiones regulares,\s+para,y pegue en la terminal.\e, copie en su lista y coloque comas.Usé esto.
echo "select 'drop table '||tablename||';' from pg_tables where tablename like 'name%'" | \ psql -U postgres -d dbname -t | \ psql -U postgres -d dbnameSustituya los valores apropiados por
dbnameyname%.fuente
Siempre me he sentido mucho más cómodo creando un script sql que pueda revisar y probar antes de ejecutarlo que confiar en obtener el plpgsql correcto para que no destruya mi base de datos. Algo simple en bash que selecciona los nombres de las tablas del catálogo y luego crea las declaraciones de caída para mí. Entonces, para 8.4.x obtendría esta consulta básica:
SELECT 'drop table '||n.nspname ||'.'|| c.relname||';' as "Name" FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN ('r','v','S','') AND n.nspname <> 'pg_catalog' AND n.nspname <> 'information_schema' AND n.nspname !~ '^pg_toast' AND pg_catalog.pg_table_is_visible(c.oid);A la que puede agregar una cláusula where. (
where c.relname ilike 'bubba%')La salida se ve así:
Name ----------------------- drop table public.a1; drop table public.a2;Entonces, guárdelo en un archivo .sql y ejecútelo con psql -f filename.sql
fuente
drop tablecomando para cualquier secuencia que encuentre (relkind = 'S').drop tableen una secuencia fallará. En su lugar, elimine'S'de larelkind INcláusula. Si necesita eliminar secuencias,select 'drop sequence'c.relkind = 'S'Divulgación: esta respuesta está destinada a usuarios de Linux.
Agregaría algunas instrucciones más específicas a lo que dijo @prongs:
\dtpuede admitir comodines: por lo que puede ejecutar,\dt myPrefix*por ejemplo, para seleccionar solo las tablas que desea eliminar;CTRL-SHIFT-DRAGpara seleccionar y luegoCTRL-SHIFT-Ccopiar el texto;vim, vayaINSERT MODEay pegue las tablas conCTRL-SHIFT-V;ESC, luego ejecute:%s/[ ]*\n/, /gpara traducirlo a una lista separada por comas, luego puede pegarlo (excluyendo la última coma) enDROP TABLE % CASCADE.fuente
Usando herramientas de línea de comandos de Linux, se puede hacer de esta manera:
psql -d mydb -P tuples_only=1 -c '\dt' | cut -d '|' -f 2 | paste -sd "," | sed 's/ //g' | xargs -I{} echo psql -d mydb -c "drop table {};"NOTA: El último eco está ahí porque no pude encontrar una manera de poner comillas alrededor del comando de soltar, por lo que debe copiar y pegar la salida y agregar las comillas usted mismo.
Si alguien puede solucionar ese problema menor, sería una salsa increíble.
fuente
Entonces enfrenté este problema hoy. Cargué mi servidor db a través de pgadmin3 y lo hice de esa manera. Las tablas están ordenadas alfabéticamente, por lo que cambiar y hacer clic seguido de eliminar funciona bien.
fuente