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
jueves 8 de octubre de 2009
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
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.
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
Utiliza el comando netsh
Modo de uso:
ifconfig
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
Suscribirse a:
Entradas (Atom)