En el siguiente enlace se encuentra informacion sobre esto:
miércoles, abril 11, 2012
configuracion impresora en linux (edit)
Una nota, cuando se trata con cups de configurar una impresora compartida en windows y no aparece la opción de Windows printer via Samba se debe buscar el programa smbspool y crear un enlace a este desde el directorio /usr/lib/cups/backend
Etiquetas:
cups,
impresoras windows,
samba
martes, marzo 27, 2012
Restriccion en listas de correo Zentyal - Postfix
El caso es el siguiente, se tiene una lista de correo para todos los empleados, la idea es que solo algunas personas pueden enviar correo a estas listas, por la interfaz de Zentyal no es posible esta configuración, pero dado que es postfix podemos modificar los archivos de configuración, mirando la documentación de postfix, este trae un ejemplo claro:
en español encontré la siguiente información:
lo primero es definir el listado de las listas que se necesitan restringir (archivo de configuracion main.cf)
smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/listas_protegidas
el contenido del archivo es
lista@dominio.com insiders_only
y luego se define la lista de correos/dominio que están autorizados a enviar correo a las listas indicadas en el punto anterior
smtpd_restriction_classes = insiders_onlyinsiders_only = check_sender_access hash:/etc/postfix/autorizados_enviar, reject
el contenido del archivo es:
jhon@dominio.com OKdoe@dominio.co OK
Luego de definir estas opciones generamos la base de datos de los listados
postmap hash:listas_protegidaspostmap hash:autorizados_enviar
y recargamos la configuración del postfix
postfix reload
Para que estos cambios sean persistentes en el zentyal debemos colocar los anteriores datos en el archivo
/usr/share/ebox/stubs/mail/main.cf.mas
En la variable $smtpRecipientRestrictions colocamos la parte de las listas y luego donde se imprime el valor de la variable se coloca el listado de las cuentas de correo autorizadas, por ultimo ingresamos a la pagina de administración del zentyal y reiniciamos el servicio de correo y verificamos como se genera el archivo main.cf con los cambio indicados.
jueves, marzo 22, 2012
Cambiar permisos solo a las carpetas
Bueno la tarea era simple, en una unidad NAS de cisco, la cual tiene linux :D habia cierta informacion que no se dejaba copiar o eliminar, de entrada dije permisos, sencillo un simple chmod -R me ayudara, pues no pense el comando y lo lance en la terminal y oh Dios ! el resultado, solo se podia ver las carpetas la informacion no estaba en el exporador de windows, luego de que la usuaria entrara en panico y por hay derecho a mi, me puse a mirar y es que el comando que indique dio permisos a todos de ejecucion y estos solo se debe indicar en las carpetas, para solucionarlo me di de la mano de google y encontre de la siguiente pagina http://movabletripe.com/archive/recursively-chmod-directories-only/ el siguiente dato:
find . -type d -exec chmod 755 {} \;
excelente, ejecuto esto en la consola y sale error, veo que la version del find no es la que me permite estos parametros, analizando, pues tiremos mano del mismo comando find combinado con un poquito de awk y obtenemos el siguiente resultado
find . -type d | awk '{print "chmod a+x \""$0"\""}' | sh
De esta forma solucione el inconveniente
miércoles, enero 11, 2012
Cambiar lenguaje de Cisco SPA525G2 a Español
Para realizar el cambio del lenguaje de este teléfono IP debe hacer lo siguiente:
Descargar el diccionario de la siguiente dirección https://supportforums.cisco.com/docs/DOC-11462
Nota: debemos descargar la versión del firmware, para mi caso es el paquete spa525_v745
Luego montamos los archivos que necesitamos en un servidor para que el teléfono pueda descargarlos, en mi caso fue en el servidor web donde tengo el servidor asterisk
Ingresamos al administrador web del teléfono con la opción de admin, nos vamos a la etiqueta Regional, en la seccion Language, en el campo Dictionary Server Script colocamos lo siguiente (las X.X.X.X son la dirección del servidor web):
serv=http://X.X.X.X/spa525g2/;d0=English;x0=spa525_en_v745.xml;d1=Spanish;x1=spa525_es_v745.xml
y en el campo Language Selection colocamos Spanish
Algo muy importante a tener en cuenta es que se debe respetar d0=English;x0=spa525_en_v745.xml si solo se pone el lenguaje Español o se cambia el orden no funcionara el cambio del lenguaje.
Bueno eso es todo para cambiar el lenguaje de este equipo que tiene bastantes características.
domingo, agosto 21, 2011
Log de Asterisk
Tuve cierto inconveniente con un intento de ingreso para realizar llamadas a travez del asterisk, revisando el log me encontre con que este pesaba mas 3 Gb, buscar información en un archivo así se vuelve pesado, mirando la configuración (/etc/asterisk/logger.conf), pude observar que estaba enviando toda la información al archivo /var/log/asterisk/full, ahora la idea es que se genere varios archivos despues de un tiempo o peso del archivo, para esto nos valemos del programa logrotate , para mi caso cree un archivo en la siguiente ruta /etc/logrotate.d/asterisk con el siguiente contenido:
Luego de esto ejecutamos el siguiente comando logrotate -fv asterisk
/var/log/asterisk/full {weeklymissingokrotate 52compressdelaycompresspostrotate/usr/sbin/asterisk -rx 'logger reload' > /dev/null 2> /dev/nullendscript}
viernes, julio 22, 2011
Error Zentyal: maximo de usuario excedido
Bueno el dia de hoy me salio ese error, buscando en el foro me encontre con la solucion:
/etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb/olcOverlay={0}syncprov.ldif
en ese archivo adicione la linea olcSizeLimit: 50000 y listo SE ARREGLO EL PROBLEMA
claro despues de reiniciar el servcio slapd
Link del foro
http://forum.zentyal.org/index.php?topic=3098.0
/etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb/olcOverlay={0}syncprov.ldif
en ese archivo adicione la linea olcSizeLimit: 50000 y listo SE ARREGLO EL PROBLEMA
claro despues de reiniciar el servcio slapd
Link del foro
http://forum.zentyal.org/index.php?topic=3098.0
martes, julio 12, 2011
PHP y SQL SERVER 2005
Coloco como referencia el siguiente link para realizar la configuración entre PHP y SQL Server 2005 http://msdn.microsoft.com/en-us/library/cc296170(SQL.90).aspx
martes, mayo 24, 2011
Tomcat Error – prunsrv.c Failed creating java (jvm.dll)
Bueno.. que puedo decir, como dice mi jefe, esta gente vino a improvisar con nosotros :D y tiene toda la razón, llevamos todo un día tratando de instalar un sistema de un proveedor y mandaron a una persona con los conocimientos que debían ser suficientes, pero no, nos toco a nosotros montar la DB Oracle, y ya cuando estaba eso, el tomcat no levanta, y en mi poca experiencia, siempre que haya un error.. pues tirar de la mano de los logs, sino estamos perdidos, pero claro, la persona no tuvo esta iniciativa sino que fue la mía, mirando salia un error que indicaba:
[2011-05-24 15:55:54] [info] Procrun (2.0.4.0) started[2011-05-24 15:55:54] [info] Running Service...[2011-05-24 15:55:54] [info] Starting service...[2011-05-24 15:55:54] [174 javajni.c] [error] The specified module could not be found.[2011-05-24 15:55:54] [994 prunsrv.c] [error] Failed creating java C:\Program Files (x86)\Java\jre6\bin\client\jvm.dll[2011-05-24 15:55:54] [1269 prunsrv.c] [error] ServiceStart returned 1[2011-05-24 15:55:54] [info] Run service finished.[2011-05-24 15:55:54] [info] Procrun finished.
Buscando en google encontré la siguiente pagina donde eran claros y concretos con la solución:
- Copy msvcr71.dll from java’s bin directory to tomcat’s bin folder.
- Add java’s bin directory to windows environment variable.
- Copy msvcr71.dll from java’s bin directory to windows\system32 folder.
- Make sure your tomcat’s pointing to correct jvm.dll folder.
Ademas verificando en foros es un error ya documentado a la hora de realizar la instalación de Tomcat en un ambiente de Windows Server a 64 bits.
viernes, abril 22, 2011
dbwrench
Una herramienta interesante a la hora de realizar un diseño de base de datos y que sea multiplataforma
martes, enero 11, 2011
Email forwarding en Zentyal
Verificando como realizar un forwarding de una cuenta de correo a otro, encontré esta alternativa en el foro de zentyal, aunque por el entorno grafico lo puedes realizar por: Correo -> Dominios virtuales de correo -> click en "Alias de cuentas externas" en el dominio donde desean agregar el alias y por ultimo ingresar los datos que piden, tenga en cuenta que no debe existir el alias
http://forum.zentyal.org/index.php?topic=459.0
Ok. I got it to work now. It now stores a copy in the mailbox, what I did was
1. sudo nano /etc/postfix/virtual
2. added the mail addresses to forward. ie test@mydomain.com pepe@hotmail.com,test@mydomain.com
3. Save the file and edit the line virtual_alias_maps in /etc/postfix/main.cf. The original is:
virtual_alias_maps = ldap:valiases change it to virtual_alias_maps = hash:/etc/postfix/virtual, ldap:valiases
4. Run: sudo postmap /etc/postfix/virtual, then reload postfix: sudo postfix reload
And thats it, now all mail to test@mydomain.com goes to pepe@hotmail.com and a copy is stored for the original destination.
1. sudo nano /etc/postfix/virtual
2. added the mail addresses to forward. ie test@mydomain.com pepe@hotmail.com,test@mydomain.com
3. Save the file and edit the line virtual_alias_maps in /etc/postfix/main.cf. The original is:
virtual_alias_maps = ldap:valiases change it to virtual_alias_maps = hash:/etc/postfix/virtual, ldap:valiases
4. Run: sudo postmap /etc/postfix/virtual, then reload postfix: sudo postfix reload
And thats it, now all mail to test@mydomain.com goes to pepe@hotmail.com and a copy is stored for the original destination.
lunes, octubre 25, 2010
Agregar puerto SSL en ISA Server
Bueno hace algún tiempo tuve un inconveniente de que el isa me rechazaba el acceso a un procedimiento del banco, revisando vi que era porque no utilizaba el puerto estándar del ssl sino otro y como este no estaba configurado en el isa server y debía indicarse, entonces buscando en Internet encontré el siguiente código
Dim root
Dim tpRanges
Dim newRange
Set root = CreateObject("FPC.Root")
Set tpRanges = root.GetContainingArray.ArrayPolicy.WebProxy.TunnelPortRanges
set newRange = tpRanges.AddRange("SSL 4443", 4443, 4443)
tpRanges.Save
Se guarda el anterior contenido en un fichero (extencion .vbs) y se ejecuta en el server y listo
lunes, septiembre 20, 2010
Consultar las llamadas/canales activos en ASTERISK desde la consola
Ver el numero de canales activos:
watch "asterisk -vvvvvrx 'core show channels' | grep channels"
Ver el numero de llamadas activas:
watch "asterisk -vvvvvrx 'core show channels' | grep calls"
Ver los canales activos:
watch "asterisk -vvvvvrx 'core show channels verbose'"
Mas comandos en:
lunes, agosto 02, 2010
miércoles, junio 16, 2010
Expresiones Regulares
esto me lo facilito un amigo, expresion que permite solo numeros y puntos (1.552.255)
(/[^0-9'.']/g, "");
si se necesita saber algo mas
miércoles, enero 06, 2010
Cosas con awk
Interesante manual de awk :
http://www.vectorsite.net/tsawk.html
y un pequeño ejemplo para listar el contenido de una carpeta y sacar el listado sin la extencion del archivo ordenado y sin elementos repetidos:
ls INFOBCO | awk '{split($1, str,".");print str[1]}' | sort | uniq
http://www.vectorsite.net/tsawk.html
y un pequeño ejemplo para listar el contenido de una carpeta y sacar el listado sin la extencion del archivo ordenado y sin elementos repetidos:
ls INFOBCO | awk '{split($1, str,".");print str[1]}' | sort | uniq
sábado, agosto 29, 2009
Formato de salida de Fecha/Hora PostgreSQL
Siempre lo dire, en la lista de postgres es mucho lo que se encuentra, tarde o temprano alguien nos indica de forma rapida como realizar cosas en este excelente motor de base de datos, hoy me encontre con una respuesta de Alvaro Herrera sobre la salida de Fecha con la funcion TO_CHAR, cosa que recuerdo hace algunos años lo hice con el lenguaje de programacion, con la base de datos hubiera sido inmediato y muy facil de realizar :
Edwin Quijada escribió:
alvherre=# select to_char('26/08/1987'::date, 'TMDay, DD TMMonth YYYY');
to_char
---------------------------
Miércoles, 26 Agosto 1987
(1 fila)
alvherre=# set lc_messages to 'fr_CA.utf8';
SET
(1 fila)
--
Alvaro Herrera http://www.flickr.com/photos/alvherre/
"¿Cómo puedes confiar en algo que pagas y que no ves,
y no confiar en algo que te dan y te lo muestran?" (Germán Poo)
Edwin Quijada escribió:
>
> Alvaro de donde salen las TM, no me digas que eres mago ahora??
> Que signifcan algo sobre el idioma de la maquina?
No, el idioma viene de la variable de configuración lc_messages:> Alvaro de donde salen las TM, no me digas que eres mago ahora??
> Que signifcan algo sobre el idioma de la maquina?
alvherre=# select to_char('26/08/1987'::date, 'TMDay, DD TMMonth YYYY');
to_char
---------------------------
Miércoles, 26 Agosto 1987
(1 fila)
SET
alvherre=# select to_char('26/08/1987'::date, 'TMDay, DD TMMonth YYYY');
to_char
------------------------
Mercredi, 26 Août 1987to_char
------------------------
(1 fila)
--
Alvaro Herrera http://www.flickr.com/photos/
"¿Cómo puedes confiar en algo que pagas y que no ves,
y no confiar en algo que te dan y te lo muestran?" (Germán Poo)
lunes, julio 07, 2008
client_encoding en el pg_restore
Bueno hace tiempo estaba buscando como restaurar una base de datos de un encoding a otro a la hora de restaurar un backup.. en la lista de español Alvaro Herrera indico el como:
Haz el pg_dump normalmente (en Latin1), y luego
PGOPTIONS="-c client_encoding=latin1" pg_restore el-dump-de-tu-base.dump
Creo que eso debería funcionar.
(Obviamente, al hacer initdb en 8.3 se debió haber escogido una
configuración regional en utf8)
jueves, marzo 15, 2007
Netbeans 5.5 VWP con MyFaces Tomahawk
Bueno este es la primera cosa que coloco sobre Java, aunque colocare mas, esto lo hago porque era algo demasido sencillo y que no pude resolverlo rapido, si hay otro despistado como yo que no sepa como hacerlo pos espero que lo siguiente le ayude.
Para poder trabajar con Netbeans y MyFaces encontre la siguiente GUIA, solo agregare algunas pasos para trabajar con el paquete VWP .
1. En mi caso solo necesito trabajar con la extension de los componentes de JSF, solo manipulare el componente del menu JSCookMenu ,tampoco necesito todas las librerias de MyFaces, asi que solo se incluira en el proyecto las siguientes librerias:
* Tomahawk (tomahawk-1.1.3.jar)
* commons-el-1.0.jar
* commons-lang-2.1.jar
2. Luego de incluir las librerias, debemos de agregar lo siguiente en modo de edicion JSP

3. Ahora agregamos el codigo que se encuentra en la guia de netbeans con myfaces y configuran el filter que indican en la guia en el web.xml.
Si todo ha salido bien, a la hora de correr el proyecto tendran la siguiente salida:
Una ultima cosa, no se podra ver en modo de diseño los componentes de myfaces en VWP, ese es el unico pero, aunque puedo vivir con eso.
Para poder trabajar con Netbeans y MyFaces encontre la siguiente GUIA, solo agregare algunas pasos para trabajar con el paquete VWP .
1. En mi caso solo necesito trabajar con la extension de los componentes de JSF, solo manipulare el componente del menu JSCookMenu ,tampoco necesito todas las librerias de MyFaces, asi que solo se incluira en el proyecto las siguientes librerias:
* Tomahawk (tomahawk-1.1.3.jar)
* commons-el-1.0.jar
* commons-lang-2.1.jar
2. Luego de incluir las librerias, debemos de agregar lo siguiente
xmlns:t="http://myfaces.apache.org/tomahawk"

3. Ahora agregamos el codigo que se encuentra en la guia de netbeans con myfaces y configuran el filter que indican en la guia en el web.xml.
Si todo ha salido bien, a la hora de correr el proyecto tendran la siguiente salida:

lunes, enero 29, 2007
Tablas temporales en PostgreSQL
Bueno la creacion de tablas temporales a partir de un sql es muy facil, la sentencia seria la siguiente:
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name
[ (column_name [, ...] ) ] [ [ WITH | WITHOUT ] OIDS ]
AS query
si se realiza una tabla temporal para una operacion compleja y esta falla estando en una transaccion la tabla temporal se detruye pero si no hay ningun problema entonces la vida de esta estara hasta que la sesion haya terminado.
Un pequeño ejemplo:
Un pequeño ejemplo:
=#BEGIN;
=#CREATE TEMP TABLE prueba AS SELECT * FROM CIUDAD;
=#SELECT * FROM prueba;
ciud_id | ciud_codigo | ciud_nombre
----------+---------------+-------------
1 | 123 | Bogota
2 | 456 | Medellin
3 | 5 | ñoño
4 | 789 | Cali
(4 filas)
=#ROLLBACK;
ROLLBACK
=# SELECT * FROM prueba;
ERROR: relation "prueba" does not exist
si no realizaramos un rollback sino un commit entonces la tabla no se destruiria,
seguiria hasta que se termine la sesion con la base de datos.
Aqui es donde nace la pregunta: Que pasaria si se utiliza un pool de conexiones como pgpool?? ademas creo que en la documentacion del proyecto nombraban el inconveniente, pero bueno buscando un poco en el manual, en la referencia del comando create table indican algo sobre tablas temporales:
seguiria hasta que se termine la sesion con la base de datos.
Aqui es donde nace la pregunta: Que pasaria si se utiliza un pool de conexiones como pgpool?? ademas creo que en la documentacion del proyecto nombraban el inconveniente, pero bueno buscando un poco en el manual, en la referencia del comando create table indican algo sobre tablas temporales:
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name ( [
{ column_name data_type [ DEFAULT default_expr ] [ column_constraint [ ... ] ]
| table_constraint
| LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ] }
[, ... ]
] )
[ INHERITS ( parent_table [, ... ] ) ]
[ WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace ]
y leyendo un poco la parte de ON COMMIT:
ON COMMIT
The behavior of temporary tables at the end of a transaction block can be controlled using ON COMMIT.
The three options are:
PRESERVE ROWS
No special action is taken at the ends of transactions. This is the default behavior.
DELETE ROWS
All rows in the temporary table will be deleted at the end of each transaction block.
Essentially, an automatic TRUNCATE is done at each commit.
DROP
The temporary table will be dropped at the end of the current transaction block.
Entonces comence a probar a crear una tabla temporal indicando ON COMMIT DROP el cual me interesa probar:
=# CREATE TEMP TABLE prueba AS select * from ciudad ON COMMIT DROP;
ERROR: syntax error at or near "on" en el carácter 50
LINEA 1: create temp table prueba as select * from ciudad on commit d...
Hum... no funciona.. busque en la lista de ayuda en ingles y ya alguien habia tenido la misma inquietud donde la respuesta fue la siguiente:
> But how can I create a table using a query and putting ON COMMIT DROP.
You can''t. Use INSERT ... SELECT to fill the table, instead.
Entonces hay que crear la tabla primero y luego llenar la tabla con una consulta, la prueba:
=# BEGIN;
BEGIN
=# CREATE TEMP TABLE prueba(ciud_id integer, ciud_codigo numeric, ciud_nombre varchar) ON COMMIT DROP;
CREATE TABLE
En el sql de la creacion de la tabla temporal solo me funciono indicando el nombre y tipo del campo.
De esa forma conseguia el comportamiento que queria, que cuando la transaccion se confirme la tabla se destruya sin necesidad de terminar la sesion con la base de datos, una ultima cosa esto lo probe en la version 8.1.4.
=# \d prueba
Tabla «pg_temp_1.prueba»
Columna | Tipo | Modificadores
-----------------+---------------------+-----------------
ciud_id | integer |
ciud_codigo | numeric |
ciud_nombre | character varying |
=# INSERT INTO prueba SELECT * FROM ciudad;
INSERT 0 4
=# SELECT * FROM prueba;
ciud_id | ciud_codigo | ciud_nombre
----------+---------------+-------------
1 | 123 | Bogota
2 | 456 | Medellin
3 | 5 | ñoño
4 | 789 | Cali
(4 filas)
=# COMMIT;
COMMIT
=# SELECT * FROM prueba;
ERROR: relation "prueba" does not exist
miércoles, enero 10, 2007
EL CTID
Los CTID son usados para identificar registros físicos específicos con valores de bloque y de desplazamiento (offset). Los CTID cambian después de que los registros son modificados y recargados. Son usados por entradas indexadas para apuntar a registros físicos.
Bueno en mi ultima entrada indique como eliminar registros repetidos, en ese ejemplo se indico un como con DISTINCT, el dia de hoy me encuentro con un mensaje de correo en la lista de ayuda de PostgreSQL en español de Alvaro Herrera donde indica como realizar la misma operacion utilizando el ctid y tambien dejando una reflexion, a continuación indico el contenido del correo:
> create or replace function eliminar_ubiprograma_repetidos()
> as
> $body$
> declare
> var_dir numeric;
> var_prg numeric;
> cur_ubiprg refcursor;
> begin
> OPEN cur_ubiprg for select dir_codigo,prg_codigo,count(*) from
> ubicacion_programa group by dir_codigo,prg_codigo having count(*)>1
> LOOP
> fetch cur_ubiprg into var_dir,var_prg;
> select ctid from ubicacion_programa where prg_codigo=var_dir and
> dir_codigo=var_prg
No no no no no. Debes dejar de pensar en modo procedural. Debes dejar
de programar diciendole a la maquina paso por paso que es lo que debe
hacer. Debes encontrar la manera de decirle a la maquina _QUE_ es lo
que debe hacer, no _COMO_ hacerlo. Si no consigues pensar de esa manera
jamas lograras entender como hacer funcionar una base de datos.
Aca en tu funcion lo que estas haciendo es decir "por favor traigame
todos los CTIDs que cumplan tal condicion", y a continuacion pedir para
cada CTID conseguir que se haga tal o cual cosa. Eso es perdida de
tiempo y recursos y escribir mil lineas que estan de sobra.
Mira, aca un ejemplo de como se hace realmente:
alvherre=# create table duplos (a int );
CREATE TABLE
alvherre=# insert into duplos values (1);
INSERT 0 1
alvherre=# insert into duplos values (1);
INSERT 0 1
alvherre=# insert into duplos values (2);
INSERT 0 1
alvherre=# insert into duplos values (2);
INSERT 0 1
alvherre=# insert into duplos values (2);
INSERT 0 1
alvherre=# insert into duplos values (3);
INSERT 0 1
alvherre=# select * from duplos;
a
---
1
1
2
2
2
3
(6 rows)
Ok, hay duplicados. Como se eliminan? Observa esto:
alvherre=# select ctid, a from duplos;
ctid | a
-------+---
(0,1) | 1
(0,2) | 1
(0,3) | 2
(0,4) | 2
(0,5) | 2
(0,6) | 3
(6 rows)
Queremos dejar (0,1) pero eliminar (0,2); dejar (0,3) pero eliminar (0,4) y
(0,5); y dejar (0,6). Como se expresa esto? Observa:
alvherre=# select min(ctid), a from duplos group by a;
min | a
-------+---
(0,6) | 3
(0,3) | 2
(0,1) | 1
(3 rows)
Wow, aca tenemos justo los que queremos dejar! Ahora como se borra el resto?
alvherre=# delete from duplos where ctid not in (select min(ctid) from duplos group by a);
DELETE 3
alvherre=# select * from duplos;
a
---
1
2
3
(3 rows)
Listo. Nada de jugarretas con cursores ni loops.
Puedes perder todo el tiempo que quieras tonteando con shared_buffers y
discos en RAID y servidores gigantescos, pero si cuando te vas para tu
casa has dejado un loop en PL/pgSQL que podia haberse escrito como una
simple consulta, el rendimiento de tu servidor sera malo y la culpa sera
tuya.
Si _realmente_ quieres aprender a programar y dejar de tontear con Java
o Visual Basic, que son juguetes para niños, aprende LISP o Scheme y
veras como el mundo cambia de color de una forma que te sorprendera.
--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.
Suscribirse a:
Entradas (Atom)