Crear campos ids en tablas de la base de datos
De CidesaWiki
Revisión a fecha de 15:33 30 sep 2009; Lhernandez (Discusión | contribuciones)
Esto se realiza para adecuar una base de datos para que trabaje con el SIGA-SL ya que propel (symfony) necesita ese campo como clave primaria.
Se correo el siguiente sql cambiando por supuesto el esquema en el que se quiere trabajar.
Se debe reemplazar donde dice "Reemplazar aquí esquema" el esquema a usar, por defecto tiene "SIMA002".
-- Reemplazar aquí esquema CREATE OR REPLACE FUNCTION "SIMA002".crea_id(esquema character varying) RETURNS boolean AS $BODY$ DECLARE REGISTRO RECORD; TABLAS CURSOR IS SELECT TABLE_NAME FROM "information_schema".TABLES WHERE table_schema=ESQUEMA AND TABLE_TYPE='BASE TABLE' ORDER BY TABLE_NAME; begin OPEN TABLAS; FETCH TABLAS INTO REGISTRO; IF FOUND THEN LOOP IF EXISTS (SELECT * FROM "information_schema".COLUMNS WHERE table_schema=ESQUEMA and TABLE_NAME=REGISTRO.TABLE_NAME and COLUMN_NAME='id') THEN EXECUTE 'ALTER TABLE '||REGISTRO.TABLE_NAME||' DROP COLUMN ID CASCADE'; END IF; IF EXISTS (SELECT relname FROM pg_class WHERE relkind = 'S' AND relnamespace IN ( SELECT oid FROM pg_namespace WHERE nspname NOT LIKE 'pg_%' AND relname = REGISTRO.TABLE_NAME||'_seq' AND nspname = ESQUEMA)) THEN EXECUTE 'DROP SEQUENCE "'||ESQUEMA||'".'||REGISTRO.TABLE_NAME||'_seq CASCADE'; END IF; IF EXISTS (SELECT relname FROM pg_class WHERE relkind = 'S' AND relnamespace IN ( SELECT oid FROM pg_namespace WHERE nspname NOT LIKE 'pg_%' AND relname = REGISTRO.TABLE_NAME||'_id_seq' AND nspname = ESQUEMA)) THEN EXECUTE 'DROP SEQUENCE "'||ESQUEMA||'".'||REGISTRO.TABLE_NAME||'_id_seq CASCADE'; END IF; EXECUTE 'CREATE SEQUENCE "'||ESQUEMA||'".'||REGISTRO.TABLE_NAME||'_seq'; EXECUTE 'ALTER TABLE '||REGISTRO.TABLE_NAME||' ADD COLUMN "id" INTEGER NOT NULL DEFAULT nextval(''"'||ESQUEMA||'".'||REGISTRO.TABLE_NAME||'_seq''::regclass)'; FETCH TABLAS INTO REGISTRO; IF NOT FOUND THEN EXIT; END IF; END LOOP; END IF; CLOSE TABLAS; return(true); end; $BODY$ LANGUAGE 'plpgsql' VOLATILE; -- Reemplazar aquí esquema ALTER FUNCTION "SIMA002".crea_id(esquema character varying) OWNER TO wiki; -- Reemplazar aquí esquema set search_path to "SIMA002"; -- Reemplazar aquí esquema select crea_id('SIMA002');