jueves, 31 de enero de 2008

Postgres: Realizar backup de BD

Aqui un procedimiento bastante sencillo que permite sacar Backup de la Base de Datos en Postgres, claro esta utilizando un script en Bash.

#!/bin/sh
#
echo "---------- Captura fecha -----------"
fecha=`date +%Y%m%d%H%M`
#
echo "-------- Borra si existiera --------"
rm -f /home/postgres/backup/bk1$fecha.tar
rm -f /home/postgres/backup/bk2$fecha.tar
echo "---------- Haciendo pg_dump --------"
pg_dump -Ft -b cm_pan > /home/postgres/backup/bk1$fecha.tar
pg_dump -Ft -b cargom > /home/postgres/backup/bk2$fecha.tar
#
gzip /home/postgres/backup/bk1$fecha.tar
gzip /home/postgres/backup/bk2$fecha.tar
#
echo "----------- Final -------------"

Como complemento se debe de colocar en el crontab del usuario postgres para que se ejecute tantas veces sea necesario y asi sacar los Backups varias veces al dia.

Continúa...

miércoles, 30 de enero de 2008

Apagar a determinada hora un equipo con Linux

Es un proceso sencillo y muy basico, muchas veces he encontrado algunos datos no muy exacto o un poco enredados, utilizando algun script o pasando parametros.

La forma mas sencilla que encontre para apagar el equipo fue haciendo lo siguiente:

1.- Ingresar al crontab como root

crontab -e

2.- Agregar la linea de apagado:

00 22 * * * /sbin/shutdown -hF now

Con esto le decimos que se apague diariamente a las 10 de la noche o 22:00 hrs.

Continúa...

miércoles, 23 de enero de 2008

Función que escriba en letras una cantidad numérica

La siguiente función la recibí vía correo de una de las listas de Postgresql, si bien es cierto no la hice debo de señalar que si la enviaron a la lista se puede hacer publica, excelente función Ramiro Arenas

CREATE FUNCTION cletra(numeric) RETURNS character varying AS $_$
declare

ptotal alias for $1;

total numeric;
total1 numeric;
cent2 numeric;
cent numeric;
cent1 char(2);

mil numeric;
millon numeric;
millones numeric;
sav numeric;
unit numeric;
deci numeric;
centi numeric;
factor numeric;
sav1 numeric;
depesos numeric;
lletra varchar;
letras varchar;

begin

total := ptotal;

total1:= total;
total := trunc(total);
cent2 := total1 - total;
cent := cent2*100;
cent1 := '00';

if total=0 then
lletra := 'CERO PESOS';
return 'CERO PESOS';
end if;

mil:=0;
millon:=0;
millones:=0;
depesos:=0;
sav:=1;
unit:=1;
deci:=1;
centi:=1;
factor:=1;
sav1:=1;
letras:=' ';

while total > 0 loop
if total > 1999999 then
depesos := 1;
factor := 1000000;
millones := 1;
millon := 0;
else
if total > 999999 then
depesos := 1;
factor := 1000000;
millon := 1;
else
if total > 999 then
factor := 1000;
mil := 1;
else
factor := 1;
mil := 0;
end if;
end if;
end if;

sav := total;

total := trunc(total/factor);
sav := sav-(total*factor);
if sav = 0 then
depesos := 0;
end if;

centi:=TRUNC(total/100);

if centi = 0 then
letras := rtrim(letras)||' ';
end if;
if centi = 1 then
if total = 100 then
letras := rtrim(letras)||' CIEN';
else
letras := rtrim(letras)||' CIENTO';
end if;
end if;
if centi = 2 then
letras := rtrim(letras)||' DOSCIENTOS';
end if;
if centi = 3 then
letras := rtrim(letras)||' TRESCIENTOS';
end if;
if centi = 4 then
letras := rtrim(letras)||' CUATROCIENTOS';
end if;
if centi = 5 then
letras := rtrim(letras)||' QUINIENTOS';
end if;
if centi = 6 then
letras := rtrim(letras)||' SEISCIENTOS';
end if;
if centi = 7 then
letras := rtrim(letras)||' SETECIENTOS';
end if;
if centi = 8 then
letras := rtrim(letras)||' OCHOCIENTOS';
end if;
if centi = 9 then
letras := rtrim(letras)||' NOVECIENTOS';
end if;

total:=total - (centi*100);
deci :=trunc(total/10);
unit :=total-(deci*10);

if total >= 30 then
if deci = 3 then
letras := rtrim(letras)||' TREINTA';
end if;
if deci = 4 then
letras := rtrim(letras)||' CUARENTA';
end if;
if deci = 5 then
letras := rtrim(letras)||' CINCUENTA';
end if;
if deci = 6 then
letras := rtrim(letras)||' SESENTA';
end if;
if deci = 7 then
letras := rtrim(letras)||' SETENTA';
end if;
if deci = 8 then
letras := rtrim(letras)||' OCHENTA';
end if;
if deci = 9 then
letras := rtrim(letras)||' NOVENTA';
end if;
if unit > 0 then
letras := rtrim(letras)||' Y';
end if;
else
unit := total;
end if;

if unit = 0 then
letras := rtrim(letras)||' ';
end if;
if unit = 1 then
letras := rtrim(letras)||' UN';
end if;
if unit = 2 then
letras := rtrim(letras)||' DOS';
end if;
if unit = 3 then
letras := rtrim(letras)||' TRES';
end if;
if unit = 4 then
letras := rtrim(letras)||' CUATRO';
end if;
if unit = 5 then
letras := rtrim(letras)||' CINCO';
end if;
if unit = 6 then
letras := rtrim(letras)||' SEIS';
end if;
if unit = 7 then
letras := rtrim(letras)||' SIETE';
end if;
if unit = 8 then
letras := rtrim(letras)||' OCHO';
end if;
if unit = 9 then
letras := rtrim(letras)||' NUEVE';
end if;
if unit = 10 then
letras := rtrim(letras)||' DIEZ';
end if;
if unit = 11 then
letras := rtrim(letras)||' ONCE';
end if;
if unit = 12 then
letras := rtrim(letras)||' DOCE';
end if;
if unit = 13 then
letras := rtrim(letras)||' TRECE';
end if;
if unit = 14 then
letras := rtrim(letras)||' CATORCE';
end if;
if unit = 15 then
letras := rtrim(letras)||' QUINCE';
end if;
if unit = 16 then
letras := rtrim(letras)||' DIECISEIS';
end if;
if unit = 17 then
letras := rtrim(letras)||' DIECISIETE';
end if;
if unit = 18 then
letras := rtrim(letras)||' DIECIOCHO';
end if;
if unit = 19 then
letras := rtrim(letras)||' DIECINUEVE';
end if;
if unit = 20 then
letras := rtrim(letras)||' VEINTE';
end if;
if unit = 21 then
letras := rtrim(letras)||' VEINTIUNO';
end if;
if unit = 22 then
letras := rtrim(letras)||' VEINTIDOS';
end if;
if unit = 23 then
letras := rtrim(letras)||' VEINTITRES';
end if;
if unit = 24 then
letras := rtrim(letras)||' VEINTICUATRO';
end if;
if unit = 25 then
letras := rtrim(letras)||' VEINTICINCO';
end if;
if unit = 26 then
letras := rtrim(letras)||' VEINTISEIS';
end if;
if unit = 27 then
letras := rtrim(letras)||' VEINTISIETE';
end if;
if unit = 28 then
letras := rtrim(letras)||' VEINTIOCHO';
end if;
if unit = 29 then
letras := rtrim(letras)||' VEINTINUEVE';
end if;
if millones=1 then
letras := rtrim(letras)||' MILLONES';
millones := 0;
else
if millon=1 then
letras := rtrim(letras)||' MILLON';
millon := 0;
else
if mil=1 then
letras := rtrim(letras)||' MIL';
mil := 0;
end if;
end if;
end if;
total:=sav;
end loop;

if cent=0 then
cent1:='00';
else
cent1:=cast(cent as char(2));
end if;
if depesos=1 then
letras := rtrim(letras)||' DE PESOS '||cent1||'/100 M.C.';
else
letras := rtrim(letras)||' PESOS '||cent1||'/100 M.C.';
end if;

lletra := '('||ltrim(letras)||')';

return lletra;
end
$_$
LANGUAGE plpgsql;

Continúa...