Crear campos ids en tablas de la base de datos

De CidesaWiki

Saltar a navegación, buscar

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');

Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
Herramientas