Saltar al contenido

¿Cómo eliminar todas las bases de datos en Postgres?

Solución:

Puede hacer “eliminar clúster” y “crear clúster” que borrará automáticamente todas las bases de datos. Borre todos los datos en su directorio $ PGDATA y reinicie el clúster usando:

initdb -D /usr/local/pgsql/data

Puedes usar:

$ pg_dropcluster 9.2 main
$ pg_createcluster 9.2 main
$ pg_ctlcluster 9.2 main start
$ pg_restore -f your_dump_file

dónde 9.2 = cluster version y main = cluster name

De acuerdo, la pregunta tiene 9 años en este momento, pero sigue siendo el segundo resultado de Google para eliminar todas las bases de datos. Si solo desea pasar de N DB a 0 sin manipular su configuración y también tener que hurgar en el sistema de archivos, esta es una respuesta mucho mejor:

https://stackoverflow.com/a/24548640/3499424

A partir de la respuesta, el siguiente script generará N drop database comandos, uno para cada base de datos sin plantilla:

select 'drop database "'||datname||'";'
from pg_database
where datistemplate=false;

Desde allí, puede editar y ejecutar manualmente, o canalizar más adelante en un script. Aquí hay una frase un tanto detallada:

echo pset pager off copy (select 'drop database "'||datname||'";' from pg_database where datistemplate=false) to STDOUT; | psql -U <user> -d postgres | <appropriate grep> | psql -U <user> -d postgres

Explicación:

  1. Esta es una serie de tubos
  2. echo pset pager off copy (select 'drop database "'||datname||'";' from pg_database where datistemplate=false) to STDOUT; genera una cadena para que psql se ejecute

    1. pset pager off se asegura de obtener todos los registros en lugar de esa basura (54 filas)
    2. copy (select 'drop database "'||datname||'";' from pg_database where datistemplate=false) to STDOUT; ejecuta la consulta antes mencionada, enviando el resultado a STDOUT. Tenemos que hacer esto ya que lideramos con pset.
  3. | psql -U <user> -d postgres canaliza dicha cadena a psql, que la ejecuta. Reemplazar <user> con el usuario que desea utilizar
  4. | <appropriate grep> es para eliminar la línea “El uso del buscapersonas está desactivado”

    1. Los usuarios de Windows pueden usar findstr /v "Pager" o findstr /b "drop"
    2. * los usuarios de nix pueden usar grep 'drop'
  5. | psql -U <user> -d postgres canaliza el conjunto resultante de drop database comandos en psql nuevamente, que los ejecuta, eliminando así todas las bases de datos
  6. ADVERTENCIA: Sin ningún filtrado adicional, este voluntad también suelta el postgres base de datos. Puede quitarlo en el SELECT o el grep si no quieres que eso suceda.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *