postgres cómo soltar toda la tabla en un esquema a través del comando

10

Uso postgresql y necesito descartar todas las tablas que están presentes en el esquema. ¿Cómo puedo eliminar del símbolo del sistema?

asaltangam
fuente

Respuestas:

17

Desea usar la CASCADEopción de DROP SCHEMA. De la documentación :

CASCADE - Caída automática de objetos (tablas, funciones, etc.) que están contenidos en el esquema y , a su vez, todos los objetos que dependen de esos objetos.

TEN CUIDADO - énfasis sobre el mío.

Obviamente, tendrá que recrear el esquema después.

Para soltar todas las tablas en el esquema actual, puede usar este script:

DO $$ DECLARE
    tabname RECORD;
BEGIN
    FOR tabname IN (SELECT tablename 
                    FROM pg_tables 
                    WHERE schemaname = current_schema()) 
LOOP
    EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(tabname.tablename) || ' CASCADE';
END LOOP;
END $$;

Cambie WHERE schemaname = current_schema()si desea descartar todas las tablas en un esquema diferente.

Philᵀᴹ
fuente
cuando uso DROP SCHEMA schemaname CASCADE; recibo error ERROR: error de sintaxis en o cerca de "DROP" LINE 2: DROP Schema
asalthangam
2
LINE 2? ¿Qué hay en la línea 1?
Philᵀᴹ
en realidad necesito soltar todas las tablas y su objeto dependiente. pero no debe eliminar el procedimiento y todo ..
asalthangam
pero cuando uso el comando soltar esquema, también elimina el esquema. en mi caso el esquema debería existir
asalthangam
@asalthangam respuesta actualizada
Philᵀᴹ
3
yourdb=# DROP SCHEMA *schema_name* CASCADE;

(funciona, recién probado con Postgresql 9.6.3, podría no funcionar con versiones anteriores)

comte
fuente
1

@Techno Savvy

Descarte las tablas usando la sintaxis postgres:

select '-- drop table ' || tablename || ' cascade;' from pg_tables 
where tablename not like 'pg%' and tablename not like 'sql%';

Copie el texto resultante en un script sql o terminal psql. Tenga en cuenta que los comandos están comentados.

vinh
fuente
La pregunta era sobre colocar tablas en un esquema específico, creo.
mustaccio
-2

Si solo quieres una forma realmente simple de hacer esto ... Aquí hay un script que he usado en el pasado

select 'drop table '||table_name||' cascade constraints;' from user_tables;

Esto imprimirá una serie de comandos de caída para todas las tablas del esquema. Agrupe el resultado de esta consulta y ejecútelo.

Del mismo modo, si desea borrar más de las tablas, puede editar lo siguiente para satisfacer sus necesidades

select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')

Fuente: https://forums.oracle.com/forums/thread.jspa?threadID=614090

Techno Savvy
fuente
3
La pregunta es Postgres, no Oracle.
Philᵀᴹ