Bases de datos

PostgreSQL

Vaciar base de datos :: Eliminación de objetos para dejar la base de datos como nueva

Última actualización: 31-03-2026 16:43

En PostgreSQL la estrategia de vaciado se diferencia de otros motores de base de datos. En el caso de MSSQL se compartió un script que elimina objetos directamente (mssql-eliminacion-de-objetos-de-bases-de-datos-v2.php), mientras que en MySQL y ORACLE se optó por consultas SELECT que generan los comandos necesarios para dejar la base de datos vacía (mysql-script-de-eliminacion-de-tablas-etc.php / oracle-vaciar-esquema.php).

PostgreSQL presenta una complejidad particular en la eliminación masiva de objetos porque su modelo interno está mucho más fragmentado que en otros motores. Cada tabla suele estar ligada a secuencias para los campos autoincrementales, a restricciones|constraints que deben eliminarse en orden, y a vistas o funciones que dependen de ellas.

Se encontró en PostgreSQL la vía de eliminar todos los esquemas de usuario y recreando el esquema public, evitando así la complejidad de manejar dependencias, secuencias y restricciones de manera individual. Al eliminar todos los esquemas de usuario se eliminan de golpe tablas, vistas, funciones, secuencias y demás objetos, sin necesidad de preocuparse por las dependencias internas.

Para evitar dañar el motor, se excluyen los esquemas del sistema: information_schema y todos los que comienzan con pg_. Estos contienen metadatos y estructuras críticas que PostgreSQL necesita para funcionar y son los que ya vienen al momento de crear una nueva base de datos.

Una vez eliminados los esquemas de usuario, se recrea el esquema public, que es el espacio por defecto donde se crean los objetos. Esto devuelve la base de datos a un estado limpio y utilizable.

Al final se otorgan permisos al rol postgres y al rol public sobre el esquema public recién creado, garantizando que tanto el superusuario como los usuarios comunes puedan trabajar en él sin problemas.

MUY IMPORTANTE
Este sitio web y el autor de esta nota no se hace responsable de los resultados obtenidos por la mala ejecución de este script.

La ejecución de este script vaciará la base de datos PostgreSQL en que se ejecute.



 
-- Elimina todos los esquemas excepto los que vienen por omisión con base de datos nueva de PostgreSQL
DO $$
DECLARE
    r RECORD;
BEGIN
    FOR r IN (	SELECT schema_name FROM information_schema.schemata
              	WHERE schema_name NOT IN ('information_schema') and not schema_name like 'pg%'
			  )
    LOOP
        EXECUTE 'DROP SCHEMA ' || quote_ident(r.schema_name) || ' CASCADE';
    END LOOP;
END$$;
 
-- Recrea el esquema public
CREATE SCHEMA public;
 
-- Da permisos totales a usuario postgres y public
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
 

 

Política de Privacidad

Última actualización: 30 de diciembre de 2025

 X 

Tu privacidad es importante para nosotros. En esta política de privacidad, explicamos qué información recopilamos cuando visitas nuestro sitio web y cómo utilizamos esa información.

1. Información que recopilamos

Este sitio no recopila información personal de los usuarios, excepto cuando un usuario elige voluntariamente comunicarse a través del formulario de contacto. En ese caso, los datos proporcionados (como tu nombre y correo electrónico) se utilizarán únicamente para responder a tu consulta.

2. Uso de Cookies

Este sitio web utiliza una única cookie esencial llamada PHPSESSID.

  • ¿Qué hace esta cookie? La cookie PHPSESSID se utiliza exclusivamente en la página de contacto para gestionar el funcionamiento del CAPTCHA. Esto garantiza que el formulario de contacto funcione correctamente y evita envíos automáticos o maliciosos.
  • ¿Por qué usamos esta cookie? Esta cookie es estrictamente necesaria para proteger la página de contacto contra actividades no deseadas. No recopila ni almacena datos personales del usuario. Además, se elimina automáticamente cuando cierras el navegador.
  • Uso de variables de sesión Este sitio también utiliza variables de sesión de PHP para saber si ya se ha mostrado el aviso de las políticas de privacidad al usuario. Esta información solo se utiliza con el propósito de garantizar que el aviso no se muestre más de una vez por sesión.

No usamos cookies de análisis ni de seguimiento.

3. Seguridad de los datos

Adoptamos medidas técnicas y organizativas razonables para proteger cualquier información que compartas con nosotros contra el acceso no autorizado, pérdida o alteración.

4. Enlaces a sitios de terceros

Nuestro sitio web puede contener enlaces a otros sitios web. No somos responsables de las prácticas de privacidad ni del contenido de dichos sitios.

5. Cambios en esta política de privacidad

Nos reservamos el derecho de actualizar esta política de privacidad en cualquier momento. Cualquier cambio será publicado en esta misma página e incluirá la fecha de la última actualización.

6. Contacto

Si tienes preguntas o inquietudes sobre esta política de privacidad, puedes comunicarte con nosotros a través de la página de contacto disponible en este sitio web.

7. Cumplimiento con Normativas Internacionales de Privacidad

Nuestro sitio web cumple con las principales regulaciones internacionales de protección de datos personales para garantizar la privacidad y seguridad de los usuarios. Esto incluye, pero no se limita a, las siguientes leyes:

Si tienes preguntas o dudas sobre el cumplimiento de estas leyes, no dudes en ponerte en contacto conmigo a través de la página de contacto de este sitio web.

8. Derechos de los usuarios (RGPD)

De acuerdo con el Reglamento General de Protección de Datos (RGPD), los usuarios cuyos datos personales (nombre y correo electrónico facilitados en el formulario de contacto) tienen derecho a acceder, rectificar o suprimir esa información, así como a limitar u oponerse a su tratamiento. Estos datos se utilizan exclusivamente para responder a la consulta enviada y no se emplean para ningún otro fin. Para ejercer estos derechos, puedes ponerte en contacto a través de la página de contacto.