Crear campos ids en tablas de la base de datos
De CidesaWiki
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');