jueves 8 de octubre de 2009

Función VAL en Postgresql

Hace un tiempo he necesitado migrar algunas bases de access a postgresql.
Algunas consultas utilizaban la función "val" que transforma cualquier dato alfanumérico en número, similar al la función de Basic o Pascal.

El primer problema que tuve es que al intentar utilizar cast sobre un texto que no contine un número y solo un número, esta función genera un error.

La solución la encontré con to_number(text, texto). Sin embargo si el dato a convertir no tiene un número al menos en uno de sus caracteres, también genera un error.

Para solucionar el tema de emulación de la función "val", armé la siguiente utilizando to_number pero agregando un cero delante del texto a convertir.
En mi caso 7 enteros y 4 decimales me fueron suficientes: '0000000D0000'

CREATE OR REPLACE FUNCTION val(texto character varying)
RETURNS numeric AS
$BODY$
begin
return to_number('0' || texto, '0000000D0000');
end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;

otra versión posterior para números negativos y valores nulos:

CREATE OR REPLACE FUNCTION val(texto character varying)
RETURNS numeric AS
$BODY$
begin

if texto = '' or texto is null then
return 0;
else
if strpos('1234567890', substr(texto,1,1))<>0 then
return to_number('0' || texto, '-0000000D0000');
else
if strpos('-',substr(texto,1,1))<>0 then
if strpos('1234567890',substr(texto,2,1))<>0 then
return to_number('0' || texto, '-0000000D0000');
else
return 0;
end if;
else
return 0;
end if;
end if;
end if;
end;

$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;

Ojalá les pueda ser útil. Ariel

lunes 19 de enero de 2009

Transformar un WIN XP en Router

Como activar el fowardeo IP en un windows XP con dos o más Tarjetas de Red.

http://www.home-network-help.com/ip-forwarding.html

lunes 27 de octubre de 2008

Eliminar mails en cola de postfix

Para conocer aquellos mails en cola de postfix que no han podido ser entregados y que su entrega está siendo reintentada podemos utilizar:

Se puede usar el comando "mailq", que
mostrará la actual "cola" de mensajes de Postfix.

La salida de "mailq" cuando hay mensaje no entregados que estan
pendientes de hacerlo es algo parecido a esto:


# mailq


-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
DB75EEF943 4115 Fri Apr 1 20:10:10 MAILER-DAEMON
(Name service error for cyber.ac.gs: Host not found, try
again)

aekerley-UknSlpnOq2xmKwC6GExiJw@xxxxxxxxxxxxxxxx

62C46EF942 4447 Fri Apr 1 10:39:12 MAILER-DAEMON
(host chaos.access-one.com[198.247.160.6] said: 453 sorry, mailbox
currently unavailable (#5.2.1))

isto-XtEJT2CBGpjz1n+OaKNE4w@xxxxxxxxxxxxxxxx

-- 8 Kbytes in 2 Requests.

---

La columna "Queue ID" contiene el ID de cada mensaje. Para eliminar, por ejemplo, el mensaje destinado a aekerley-UknSlpnOq2xmKwC6GExiJw@xxxxxxxxxxxxxxxx, deberíamos ejecutar el comando:

# postsuper -d DB75EEF943

que devolvería algo parecido a esto:

postsuper: 62C46EF942: removed
postsuper: Deleted: 1 message

Si queremos eliminar todo y no de a uno (me paso de tener más de 5000 mails en espera con un cliente travieso haciendo spam) podemos usar

# postsuper -d ALL

Esto borrará la cola completa de mails pendientes de entrega.

miércoles 10 de septiembre de 2008

Cambiar IP en Windows bajo linea de comandos

Este script ifconfig.bat (en alusión al ifconfig de linux) permite cambiar la IP de la placa principal de red de una PC con windows XP en linea de comandos.
Utiliza el comando netsh

Modo de uso:

ifconfig ip mascara puerta_de_enlace dns_primario

Nota: dns_primario es opcional


Archivo ifconfig.bat:
-----------------------------------------------------------------------------------
@Echo OFF
echo [requerido] Primer parametro %1 es para ip estatica.
echo [requerido] Segundo parametro %2 es la mascara de red.
echo [requerido] Tercer parametro %3 es la puerta de enlace.
echo [opcional] Cuarto parametro %4 es el servidor dns primario

If [%1] == [] GOTO QUIT
If [%2] == [] GOTO QUIT
If [%3] == [] GOTO QUIT

echo Starting %0

Echo ........Configurando IP address en Conexión de área local a %1 con NetMask %2
netsh interface ip set address name="Conexión de área local" source=static addr=%1 mask=%2
Echo ........Configurando Gateway en Conexión de área local a %3
netsh interface ip set address name="Conexión de área local" gateway=%3 gwmetric=1

If [%4] == [] GOTO QUIT
Echo ........Configurando DNS en Conexión de área local a %4
netsh interface ip set dns name="Conexión de área local" source=static addr=%4 register=primary

GOTO QUIT

:QUIT
ECHO ON
------------------------------------------------------------------------------------------------

Script localizado en este blog

Clarin.com Informática 2.0

Tecnología - lanacion.com

Ciencia/Salud - lanacion.com

VivaLinux! (General)

VivaLinux! (Distros)