BASE DE DATOS

Partición de tabla, y llenar automaticamente sus registros

Para fragmentar tabla horizontalete, presentamos el siguiente Script.

create table tablanormal(llave bigint primary key, dato varchar(15))
ENGINE= MYISAM
create table tablaparticionada(llave bigint primary key, dato varchar(15))
ENGINE= MYISAM
partition by range (llave)(
partition p0 values less than (100000),
partition p1 values less than (200000),
partition p2 values less than (300000),
partition p3 values less than (400000),

partition p4 values less than (500000),
partition p5 values less than (600000),
partition p6 values less than (700000),
partition p7 values less than (800000),
partition p8 values less than (900000),
partition p9 values less than (1000000),
partition p10 values less than (1100000),
partition p11 values less than (1200000),
partition p12 values less than (1300000),
partition p13 values less than (1400000),
partition p14 values less than (1500000),
partition p15 values less than (1600000),
partition p16 values less than (1700000),
partition p17 values less than (1800000),
partition p18 values less than (1900000),
partition p19 values less than (2000000),

partition p20 values less than (2500000),
partition p21 values less than (3000000),
partition p22 values less than (3500000),
partition p23 values less than (4000000),
partition p24 values less than (4500000),
partition p25 values less than (5000001)
);

delimeter//
create PROCEDURE insertatablanormal(v1 bigint )
BEGIN
while v1> 0 Do
insert into tablanormal values(v1,’123456789′);
set v1=v1-1;
end while;
end
//
delimeter //
create PROCEDURE insertatablaparticionada(v1 bigint )
BEGIN
while v1> 0 Do
insert into tablaparticionada  values(v1,’123456789′);
set v1=v1-1;
end while;
end
//

SET SQL_SAFE_UPDATES=0;
truncate tablanormal;
truncate tablaparticionada;
call insertatablanormal(1000000);
call insertatablaparticionada(1000000);
SELECT * FROM mibase.tablanormal limit 0, 1000000;
SELECT * FROM mibase.tablaparticionada limit 0, 1000000;
UPDATE mibase.tablanormal SET dato = ’00ABCDEFGHI123′;
UPDATE mibase.tablaparticionada SET dato = ‘AAABCDEFG12345’;
DELETE FROM mibase.tablanormal;
DELETE FROM mibase.tablaparticionada;

Activar postgres en Xampp 1.7.7

Ingresa al directorio donde se instalo el postgresql 9.1, ve hasta la carpeta ‘bin’ y de alli copia los siguientes archivos

– libiconv-2.dll o libiconv.dll
– libintl-8.dll
– libpq.dll
Copiar al directorio ‘C:\xampp\apache\bin’
Activar en el php.ini en la linea
;extension=php_pgsql.dll
extension=php_pgsql.dll
quitar el ‘;’ y luego reiniciar el servicio de apache.

Crear y asignar autoincremental a columna campo tipo serial

Cuando necesites crear un campo y quieres abregale un secuencial.

 

CREATE SEQUENCE esquema.tabla_tbl_id_seq;
ALTER TABLE esquema.tabla ADD COLUMN tbl_id integer;
UPDATE esquema.tabla SET tbl_id = NEXTVAL(‘esquema.tabla_tbl_id_seq’);
ALTER TABLE esquema.tabla ALTER COLUMN tbl_id SET NOT NULL;
ALTER TABLE esquema.tabla ALTER COLUMN tbl_id SET DEFAULT nextval(‘esquema.tabla_tbl_id_seq’::regclass);

Crear Tabla con función en Postgres 8.4 y 9.x

Al realizar una funcion que cree autoamticamente una tabla con parametros, me econtre con un error que decia  ERROR:  syntax error at or near “NOT”
LINE 1: CREATE TABLE  IF NOT EXISTS

Esto no funciono en un postgres 8.4 y la funcion que realice era en 9.x asi que realice dos funciones para que funcione en mi servidor de aplicaciones en 8.4

 

8.4 9.1
CREATE OR REPLACE FUNCTION myEsquema.crear_tabla(text, text)
RETURNS void AS
$BODY$
DECLARE
nombre_tabla ALIAS FOR $1;
iniciales ALIAS FOR $2;
i boolean;
BEGIN
EXECUTE ‘SELECT EXISTS ( SELECT *   FROM   pg_catalog.pg_tables  WHERE  schemaname = ”myEsquema”  AND    tablename  = ”’||nombre_tabla||”’ )’ INTO    i;
IF i THEN
ELSE
EXECUTE ‘CREATE TABLE myEsquema.rol_’ || nombre_tabla || ‘(‘
||iniciales ||’_id integer  null,’
||iniciales ||’_cedula character varying(10) not null,’
||iniciales ||’_periodo date default null,’
||iniciales ||’_orden int null,’
||iniciales ||’_estado int default 2,’
||iniciales ||’_reg_fecha timestamp without time zone DEFAULT now(),’
||iniciales ||’_reg_usu integer) ‘;
END IF;

END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION myEsquema.crear_tabla(text, text)
OWNER TO postgres;

CREATE OR REPLACE FUNCTION myEsquema.crear_tabla(text, text)
RETURNS void AS
$BODY$
DECLARE
nombre_tabla ALIAS FOR $1;
iniciales ALIAS FOR $2;

BEGIN
execute ‘CREATE TABLE  IF NOT EXISTS myEsquema.rol_’ || nombre_tabla || ‘(‘
||iniciales ||’_id integer  null,’
||iniciales ||’_cedula character varying(10) not null,’
||iniciales ||’_periodo date default null,’
||iniciales ||’_orden int null,’
||iniciales ||’_estado int default 2,’
||iniciales ||’_reg_fecha timestamp without time zone DEFAULT now(),’
||iniciales ||’_reg_usu integer)’;

END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION myEsquema.crear_tabla(text, text)
OWNER TO postgres;

 

 

 

Violation of PRIMARY KEY constraint

Violation of PRIMARY KEY constraint ‘PK_TABLA’. Cannot insert duplicate key in object ‘dbo.TABLA’.
The statement has been terminated.

 

La solución es:

DBCC CHECKTABLE (‘TABLA’)

GO
DBCC DBREINDEX (‘TABLA’)

 

o si ni da ningun resultado

ante un mensaje que puede salir

Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint ‘PK_tabla’. Cannot insert duplicate key in object ‘dbo.tabla’.
The statement has been terminated.

prueba con

DBCC CHECKIDENT (‘tabla’)
DBCC CHECKIDENT (‘tabla’, RESEED).

WMI error al desinstalar Sqlserver 2008

Detenga el servicio WMI:
Ir a Inicio / Ejecutar, escriba cmd en la pantalla que se abre tipo:
net stop winmgmt

Cambiar el nombre de la carpeta en la que:
C: \ WINDOWS \ system32 \ wbem \ repositorio
Ponga el nombre de la carpeta como Repository_Old si la carpeta es el nombre de sistema operativo no puede encontrar el repositorio de WMI.
Esto forzará al sistema operacianal para reconstruir el repositorio automáticamente la próxima vez que usted necesita para acceder a la información en WMI.

A continuación, reinicie el servicio WMI
Ir a Inicio / Ejecutar, escriba cmd en la pantalla que se abre tipo:
net start winmgmt
Si noarranca, reinicie el PC.

Particionar tabla SQL Server, y llenar automaticamente con registros

CREATE TABLE tablanormal
(
llave bigint primary key,
dato varchar(15)
);

CREATE TABLE tablaparticionada
(
llave bigint,
dato varchar(15)
);

Alter Database mibase
Add FileGroup [part_1_100000]
Alter Database mibase
Add FileGroup [part_100001_200000]
Alter Database mibase
Add FileGroup [part_200001_300000]
Alter Database mibase
Add FileGroup [part_300001_400000]
Alter Database mibase
Add FileGroup [part_400001_500000]
Alter Database mibase
Add FileGroup [part_500001_600000]
Alter Database mibase
Add FileGroup [part_600001_700000]
Alter Database mibase
Add FileGroup [part_700001_800000]
Alter Database mibase
Add FileGroup [part_800001_900000]
Alter Database mibase
Add FileGroup [part_900001_1000000]
Alter Database mibase
Add FileGroup [part_1000001_1500000]
Alter Database mibase
Add FileGroup [part_1500001_2000000]
Alter Database mibase
Add FileGroup [part_2000001_2500000]
Alter Database mibase
Add FileGroup [part_2500001_3000000]
Alter Database mibase
Add FileGroup [part_3000001_3500000]
Alter Database mibase
Add FileGroup [part_3500001_4000000]
Alter Database mibase
Add FileGroup [part_4000001_4500000]
Alter Database mibase
Add FileGroup [part_4500001_5000000]
Alter Database mibase
Add FileGroup [part_5000001_5500000]

—— >>>>>> Descargar Archivo

Particionar tabla Oracle, y llenar automaticamente con registros

Para fragmentar horizontal una tabla y llenar automaticamente .
create table tablanormal
(
llave integer,dato varchar(10)
);
create table tablaparticionada
(
llave integer,dato varchar(10)
);

partition by range(llave)
(
partition p0 values less than (100000) ,
partition p1 values less than (200000) ,
partition p2 values less than (300000) ,
partition p3 values less than (400000) ,
partition p4 values less than (500000) ,
partition p5 values less than (600000) ,
partition p6 values less than (700000) ,

partition p7 values less than (800000) ,
partition p8 values less than (900000) ,
partition p9 values less than (1000001)
);

CREATE OR REPLACE PROCEDURE insertartablanormal(valor IN NUMBER) AS
BEGIN
declare
v number(7) := 1;
dato     varchar2(10);

begin
while v <= valor loop

insert into tablanormal (llave, dato) values (v, ‘dato’);
v := v + 1;

end loop;
end;
end insertar_particionada;

CREATE OR REPLACE PROCEDURE insertatablaparticionada(valor IN NUMBER) AS
BEGIN
declare
v number(7) := 1;
dato     varchar2(10);

begin
while v <= valor loop

insert into particionada (llave, dato) values (v, ‘dato’);
v := v + 1;

end loop;
end;
end insertar_particionada;

truncate tablanormal;
truncate tablaparticionada;
select insertatablanormal(1000000);
select insertatablaparticionada(1000000);
SELECT * FROM tablanormal ;
SELECT * FROM tablaparticionada;
UPDATE tablanormal SET dato = ’00ABCDEFGHI123′;
UPDATE tablaparticionada SET dato = ‘AAABCDEFG12345’;
DELETE FROM tablanormal;
DELETE FROM tablaparticionada;

Continue reading

Particionar tabla postgres, y llenar automaticamente con registros

El siguiente script es para crear una tabla fragmentada horizontalmente y llenar automaticamente con un procedimiento almacenado.

–Postgres
create table tablanormal(llave bigint primary key, dato varchar(15));
create table tablaparticionada(llave bigint primary key, dato varchar(15));

–crea tablas hijas
create table tablaparticionada1(check (llave>=0 and llave<100000))inherits(tablaparticionada);
create table tablaparticionada2(check (llave>=100000 and llave<200000))inherits( tablaparticionada );
create table tablaparticionada3(check (llave>=200000 and llave<300000))inherits( tablaparticionada );
create table tablaparticionada4(check (llave>=300000 and llave<400000))inherits( tablaparticionada );
create table tablaparticionada5(check (llave>=400000 and llave<500000))inherits( tablaparticionada );
create table tablaparticionada6(check (llave>=500000 and llave<600000))inherits( tablaparticionada );
create table tablaparticionada7(check (llave>=600000 and llave<700000))inherits( tablaparticionada );
create table tablaparticionada8(check (llave>=700000 and llave<800000))inherits( tablaparticionada );
create table tablaparticionada9(check (llave>=800000 and llave<900000))inherits( tablaparticionada );
create table tablaparticionada10(check (llave>=900000 and llave<1000000))inherits( tablaparticionada );
create table tablaparticionada11(check (llave>=1000000 and llave<2000000))inherits( tablaparticionada );
create table tablaparticionada12(check (llave>=2000000 and llave<3000000))inherits( tablaparticionada );
create table tablaparticionada13(check (llave>=3000000 and llave<4000000))inherits( tablaparticionada );
create table tablaparticionada14(check (llave>=4000000 and llave<5000000))inherits( tablaparticionada );
create table tablaparticionada15(check (llave>=5000000 and llave<6000001))inherits( tablaparticionada );

–crear reglas
create or replace rule rtablaparticionada1 as
on insert to  tablaparticionada  where (llave >0 and llave<100000) do instead insert into tablaparticionada1 values(new.llave,new.dato);

create or replace rule rtablaparticionada2 as
on insert to  tablaparticionada  where (llave >=100000 and llave<200000) do instead insert into tablaparticionada2 values(new.llave,new.dato);

create or replace rule rtablaparticionada3 as
on insert to  tablaparticionada  where (llave >=200000 and llave<300000) do instead insert into tablaparticionada3 values(new.llave,new.dato);

create or replace rule rtablaparticionada4 as
on insert to  tablaparticionada  where (llave >=300000 and llave<400000) do instead insert into tablaparticionada4 values(new.llave,new.dato);

create or replace rule rtablaparticionada5 as
on insert to  tablaparticionada  where (llave >=400000 and llave<500000) do instead insert into tablaparticionada5 values(new.llave,new.dato);

create or replace rule rtablaparticionada6 as
on insert to  tablaparticionada  where (llave >=500000 and llave<600000) do instead insert into tablaparticionada6 values(new.llave,new.dato);

create or replace rule rtablaparticionada7 as
on insert to  tablaparticionada  where (llave >=600000 and llave<700000) do instead insert into tablaparticionada7 values(new.llave,new.dato);

create or replace rule rtablaparticionada8 as
on insert to  tablaparticionada  where (llave >=700000 and llave<800000) do instead insert into tablaparticionada8 values(new.llave,new.dato);

create or replace rule rtablaparticionada9 as
on insert to  tablaparticionada  where (llave >=800000 and llave<900000) do instead insert into tablaparticionada9 values(new.llave,new.dato);

create or replace rule rtablaparticionada10 as
on insert to  tablaparticionada  where (llave >=900000 and llave<1000000) do instead insert into tablaparticionada10 values(new.llave,new.dato);

create or replace rule rtablaparticionada11 as
on insert to  tablaparticionada  where (llave >=1000000 and llave<2000000) do instead insert into tablaparticionada11 values(new.llave,new.dato);

create or replace rule rtablaparticionada12 as
on insert to  tablaparticionada  where (llave >=2000000 and llave<3000000) do instead insert into tablaparticionada12 values(new.llave,new.dato);

create or replace rule rtablaparticionada13 as
on insert to  tablaparticionada  where (llave >=3000000 and llave<4000000) do instead insert into tablaparticionada13 values(new.llave,new.dato);

create or replace rule rtablaparticionada14 as
on insert to  tablaparticionada  where (llave >=4000000 and llave<5000000) do instead insert into tablaparticionada14 values(new.llave,new.dato);

create or replace rule rtablaparticionada15 as
on insert to  tablaparticionada  where (llave >=5000000 and llave<6000001) do instead insert into tablaparticionada15 values(new.llave,new.dato);

—–para actualizar

create or replace rule ruptablaparticionada1 as
on update to  tablaparticionada  where (old.llave >=0 and old.llave<100000) do instead update   tablaparticionada1  set dato= new.dato where old.llave=llave;

create or replace rule ruptablaparticionada2 as
on update to  tablaparticionada  where (old.llave >=100000 and old.llave<200000) do instead update   tablaparticionada2  set dato= new.dato where old.llave=llave;

create or replace rule ruptablaparticionada3 as
on update to  tablaparticionada  where (old.llave >=200000 and old.llave<300000) do instead update   tablaparticionada3  set dato= new.dato where old.llave=llave;

create or replace rule ruptablaparticionada4 as
on update to  tablaparticionada  where (old.llave >=300000 and old.llave<400000) do instead update   tablaparticionada4  set dato= new.dato where old.llave=llave;

create or replace rule ruptablaparticionada5 as
on update to  tablaparticionada  where (old.llave >=400000 and old.llave<500000) do instead update   tablaparticionada5  set dato= new.dato where old.llave=llave;

create or replace rule ruptablaparticionada6 as
on update to  tablaparticionada  where (old.llave >=500000 and old.llave<600000) do instead update   tablaparticionada6  set dato= new.dato where old.llave=llave;

create or replace rule ruptablaparticionada7 as
on update to  tablaparticionada  where (old.llave >=600000 and old.llave<700000) do instead update   tablaparticionada7  set dato= new.dato where old.llave=llave;

create or replace rule ruptablaparticionada8 as
on update to  tablaparticionada  where (old.llave >=700000 and old.llave<800000) do instead update   tablaparticionada8  set dato= new.dato where old.llave=llave;

create or replace rule ruptablaparticionada9 as
on update to  tablaparticionada  where (old.llave >=800000 and old.llave<900000) do instead update   tablaparticionada9  set dato= new.dato where old.llave=llave;

create or replace rule ruptablaparticionada10 as
on update to  tablaparticionada  where (old.llave >=900000 and old.llave<1000000) do instead update   tablaparticionada10  set dato= new.dato where old.llave=llave;

create or replace rule ruptablaparticionada11 as
on update to  tablaparticionada  where (old.llave >=1000000 and old.llave<2000000) do instead update   tablaparticionada11  set dato= new.dato where old.llave=llave;

create or replace rule ruptablaparticionada12 as
on update to  tablaparticionada  where (old.llave >=2000000 and old.llave<3000000) do instead update   tablaparticionada12  set dato= new.dato where old.llave=llave;

create or replace rule ruptablaparticionada13 as
on update to  tablaparticionada  where (old.llave >=3000000 and old.llave<4000000) do instead update   tablaparticionada13  set dato= new.dato where old.llave=llave;

create or replace rule ruptablaparticionada14 as
on update to  tablaparticionada  where (old.llave >=4000000 and old.llave<5000000) do instead update   tablaparticionada14  set dato= new.dato where old.llave=llave;

create or replace rule ruptablaparticionada15 as
on update to  tablaparticionada  where (old.llave >=5000000 and old.llave<6000001) do instead update   tablaparticionada15  set dato= new.dato where old.llave=llave;

CREATE OR REPLACE FUNCTION insertatablanormal(v bigint)
RETURNS void AS
$body$
DECLARE
i bigint;
BEGIN
for i in 1..v loop
insert into tablanormal values (i, ‘1234567890abcd’);
end loop;
END;
$body$
LANGUAGE ‘plpgsql’ VOLATILE;

CREATE OR REPLACE FUNCTION insertatablaparticionada(v bigint)
RETURNS void AS
$body$
DECLARE
i bigint;
BEGIN
for i in 1..v loop
insert into tablaparticionada values (i, ‘1234567890abcd’);
end loop;
END;
$body$
LANGUAGE ‘plpgsql’ VOLATILE;

truncate tablanormal;
truncate tablaparticionada;
select insertatablanormal(1000000);
select insertatablaparticionada(1000000);
SELECT * FROM tablanormal ;
SELECT * FROM tablaparticionada;
UPDATE tablanormal SET dato = ’00ABCDEFGHI123′;
UPDATE tablaparticionada SET dato = ‘AAABCDEFG12345’;
DELETE FROM tablanormal;
DELETE FROM tablaparticionada;

Continue reading

CLAVES DE POSTGRES ORIGINAL

Para saber la clave de postgres original funciona asi
–clave original de un usuario postgres
select md5(‘clavespostgres’);