Este es el Post #7 del Topic: Guía Práctica de PostgreSQL
En esta parte veremos como realizar la eliminación de los objetos de la base de datos creada anteriormente, pero con fines prácticos lo haremos paso a paso, ya que la eliminación podría ser tan sensilla como eliminar la base de datos directamente, o los componentes que lo componen en cascada si fuese necesario.
Es necesario haber seguido el post anterior, el escript que necesitamos ejecutar antes de realizar estos ejercicios lo tiene aqui:
Descargar Script: PostgreSQL Sentencias DDL.sql
--1) ELIMINACIÓN DE CLAVES FORÁNEAS (FOREIGN KEYS):
ALTER TABLE Persona.Postulante DROP CONSTRAINT fk_IDCarrera; ;; ALTER TABLE Persona.Postulante DROP CONSTRAINT fk_IDPerAcad; ;; ALTER TABLE Persona.Postulante DROP CONSTRAINT fk_IDModalidad; ;; ALTER TABLE Persona.Postulante DROP CONSTRAINT fk_IDContacto; ;;
--2) ELIMINACIÓN DE CLAVES PRIMARIAS (PRIMARY KEYS):
ALTER TABLE Admision.PerAcad DROP CONSTRAINT pk_IDPerAcad; ;; ALTER TABLE Admision.Carrera DROP CONSTRAINT pk_IDCarrera; ;; ALTER TABLE Persona.Contacto DROP CONSTRAINT pk_IDContacto; ;; ALTER TABLE Persona.Postulante DROP CONSTRAINT pk_IDPostulante; ;; ALTER TABLE Admision.Modalidad DROP CONSTRAINT pk_IDModalidad; ;;
--3) ELIMINACIÓN DE RESTRICCIONES (UNIQUE):
ALTER TABLE Admision.Carrera DROP CONSTRAINT uq_nombrecarrera; ;; ALTER TABLE Persona.Contacto DROP CONSTRAINT uq_ContactoDNI; ;; ALTER TABLE Admision.Modalidad DROP CONSTRAINT uq_Modalidad; ;;
--4) ELIMINACIÓN DE RESTRICCIONES (CHECK):
ALTER TABLE Persona.Contacto DROP CONSTRAINT ck_Genero; ;; ALTER TABLE Persona.Postulante DROP CONSTRAINT ck_asistioexamen; ;; ALTER TABLE Persona.Postulante DROP CONSTRAINT ck_ingreso; ;; ALTER TABLE Persona.Postulante DROP CONSTRAINT ck_puntaje; ;;
--5) ELIMINACIÓN DE COLUMNAS (COLUMNS):
ALTER TABLE Admision.Carrera DROP COLUMN IDCarrera, DROP COLUMN Nombre; ;;
--6) ELIMINACIÓN DE TABLAS (TABLES):
DROP TABLE Admision.Carrera; DROP table Persona.Contacto; DROP table Persona.Postulante; DROP Table Admision.PerAcad; DROP TABLE Admision.Modalidad; ;;
--7) ELIMINACIÓN DE SECUENCIAS (SEQUENCE):
DROP SEQUENCE Persona.seq_idcontacto; DROP SEQUENCE Admision.seq_idmodalidad; ;;
--8) ELIMINACIÓN DE ESQUEMAS (SCHEMAS) :
DROP SCHEMA Persona; DROP SCHEMA Admision; ;;
--9) ELIMINACIÓN DE BASE DE DATOS (DATABASE):
DROP DATABASE DBAdmision;
Como explicaba en un inicio, podríamos utilizar métodos más directos si queremos eliminar un objeto, por ejemplo:
--1)Eliminar la base de datos con todos sus objetos:
DROP DATABASE DBAdmision; --en modo desconectados
--2)Eliminar una secuencia que está siendo utilizada por una tabla:
DROP SEQUENCE Persona.seq_idcontacto CASCADE; DROP SEQUENCE Admision.seq_idmodalidad CASCADE;
--3)Eliminar una tabla con todos los constraints que posea:
DROP TABLE Admision.Carrera CASCADE; DROP Table Admision.PerAcad CASCADE; DROP TABLE Admision.Modalidad CASCADE; DROP table Persona.Contacto CASCADE; DROP table Persona.Postulante CASCADE;
--4)Eliminar un esquema con todos sus objetos
DROP SCHEMA Persona CASCADE; DROP SCHEMA Admision CASCADE;
TOPIC: DROP, CASCADE, COLUMN
Your article helped me a lot, is there any more related content? Thanks!
La diferencia radica en que el cascade ejecuta automaticamente la eliminacion previa de la clave foranea…
ahh, ya entendi tu pregunta….OK
Intentemos eliminando la tabla Admision.Carrera:
DROP TABLE Admision.Carrera;
NOTICE: constraint fk_idcarrera on table persona.postulante depends on table admision.carrera
Entonces elimino primero fk_idcarrera de la tabla persona.postulante:
ALTER TABLE Persona.Postulante
DROP CONSTRAINT fk_IDCarrera;
Como la tabla persona.postulante esta relacionada con admision.carrera nos advierte que no se puede eliminar y que primero hay que eliminar la clave foránea fk_IDCarrera de persona.postulante , una vez realizado eso recién podemos eliminar la tabla con un simple DROP TABLE Admision.Carrera;
en cambio, con:
DROP TABLE Admision.Carrera CASCADE;
NOTICE: drop cascades to constraint fk_idcarrera on table persona.postulante
Como dice el mensaje, se elimina primero la clave foranea de la tabla a la que refiere y posteriormente la tabla.
De esa manera los datos existentes en la tabla Persona.Postulante relacionado con Admision.Carrera no se pierden, se mantienen aunque ya no es clave foránea.
ok, mi pregunta es esta
si tu haces
–3)Eliminar una tabla con todos los constraints que posea:
DROP TABLE Admision.Carrera CASCADE;
DROP Table Admision.PerAcad CASCADE;
DROP TABLE Admision.Modalidad CASCADE;
DROP table Persona.Contacto CASCADE;
DROP table Persona.Postulante CASCADE;
borras en cascada los constraint, pero si hicieras esto, por equivocacion error o lo que sea
–3)Eliminar una tabla con todos los constraints que posea:
DROP TABLE Admision.Carrera;
DROP Table Admision.PerAcad;
DROP TABLE Admision.Modalidad;
DROP table Persona.Contacto;
DROP table Persona.Postulante;
mil gracias por la contestacion, y tan rpida espero y siga bueno este tuto
Según entiendo, lo que quieres es borrar el constraint de una tabla después de eliminarla, pues al eliminar una tabla se eliminan tambien todos los objetos que ésta contiene sean columns, constraint, checks. Te referias a eso?
Saludos otra vez!!
Con respecto a los script, para estos topics basta con copiar y pegar de la página, en los post posteriores si será necesario contar con el script de generación de toda la base de datos.
Si tienen problemas a la hora de abrir la pagina de los scripts y se ven desconfigurados los textos configuren la codificación de caracteres del navegador, Firefox(Ver -> Codificación de Caracteres), en algunos casos funciona con UTF8 en otros con la configuración occidental, hagan la prueba.
hola encontre tu tuto y esta excelente voy en este tema ddl2. una pregunta con respecto a esto, si borro una tabla que tiene constraint sin cascade, despues como borro los constraint de esa tabla?, mil gracias y sigue asi espero que tambien el tuto contenga o sea de principiantes hasta avanzados.