|
||||||||||||||||||||
|
||||||||||||||||||||
|
||||||||||||||||||||
|
||||||||||||||||||||
|
||||||||||||||||||||
Ha sido mi costumbre escribir una editorial o una encuesta cada diez ediciones. Ahora se han cumplido 50 semanas en que esta columna ha sido publicada. Eso es casi un año completo de publicación. Espero que hayan encontrado que la calidad ha mejorado con el paso del tiempo. Celebro la adición de traducciones a los idiomas portugués y español. Juliano da Silva y Álvaro Herrera han tomado una difícil tarea y han hecho un maravilloso trabajo ayudando a divulgar esta columna a sus comunidades. En el futuro, me gustaría solicitar más contribuciones de funciones, esquemas y tips desde ustedes directamente. Expandiré los archivos de Tidbits para incluir más código de las ediciones regulares. Quiero que Tidbits sea un buen lugar para buscar ejemplos de cosas interesantes. Hay dos ejemplos de contribuciones en esta edición. El primero es una guía COMO (How-to) y el segundo es una función plpgsql muy útil. Compartiendo varios documentos, como los documentos de rendimiento de Josh y código documentado como los Ejemplos de Funciones que Retornan Conjuntos de Stephan Szabo, espero proveer un recurso rico para PostgreSQL. La palabra de la semana es colaboración. Pueden enviar comentarios, sugerencias, documentos y ejemplos de código a elein.
Ivailo T. Ivanov de Mag Studio ha escrito una breve guía COMO de eRServer en Debian. Proveerá un buen punto de partida para los problemas iniciales de la instalación con Debian. También está disponible en el área Tidbits. Nota de la Editora: La secuencia completa de pasos no fue verificada
David Fetter portó el módulo Business::CreditCard a plpgsql. Esto es muy útil si no puede usar plperl en su base de datos por alguna razón y necesita hacer validación de tarjetas de crédito. La evaluación de los números de la tarjeta es un buen ejemplo del uso del operador ~. Este es un buen ejemplo de la clase de procesamiento necesario para aplicaciones de negocios que puede ser hecha en el servidor. Puesto que muchas aplicaciones pueden acceder a la base de datos, es bueno contar con una rutina centrada en la base de datos de manera que todas las aplicaciones puedan hacer la validación consistentemente.
CREATE OR REPLACE FUNCTION cc_check (VARCHAR) RETURNS BOOLEAN AS ' DECLARE cc_num ALIAS FOR $1; i INTEGER; d VARCHAR; weight INTEGER; checksum INTEGER := 0; oddness INTEGER; num INTEGER; tempstring VARCHAR; BEGIN -- Strip out non-digits. Oh, for an s/// construct! :) tempstring := ''''; FOR i IN 1 .. length(cc_num) LOOP d := SUBSTRING(cc_num, i, 1); IF d ~ ''[0-9]'' THEN tempstring := tempstring || d; END IF; END LOOP; -- Check length for reasonableness. IF (length(tempstring) < 13) THEN RAISE NOTICE ''% is too short to be a credit card number.'', cc_num; RETURN FALSE; END IF; -- Do a Luhn checksum. oddness := length(tempstring) % 2; FOR i IN 1 .. length(tempstring) LOOP num := SUBSTRING(tempstring, i, 1)::integer; IF (oddness = 0 AND i % 2 = 1) THEN num := num * 2; ELSIF (oddness = 1 AND i%2 = 0) THEN num := num * 2; END IF; IF num > 9 THEN num := num - 9; END IF; checksum := checksum + num; END LOOP; IF checksum % 10 <> 0 THEN RAISE NOTICE ''% does not have a valid checksum.'', cc_num; RETURN FALSE; END IF; IF tempstring ~ ''^3[47][0-9]{13}$'' THEN RAISE NOTICE ''% is an American Express card.'', cc_num; ELSIF tempstring ~ ''^4[0-9]{12}([0-9]{3})?$'' THEN RAISE NOTICE ''% is a VISA card.'', cc_num; ELSIF tempstring ~ ''^5[1-5][0-9]{14}$'' THEN RAISE NOTICE ''% is a MasterCard.'', cc_num; ELSIF tempstring ~ ''^6011[0-9]{12}$'' THEN RAISE NOTICE ''% is a Discover card.'', cc_num; ELSIF tempstring ~ ''^3(0[0-5]|[68][0-9])[0-9]{11}$'' THEN RAISE NOTICE ''% is a Diners Club/Carte Blanche.'', cc_num; ELSIF tempstring ~ ''^2(014|149)\d{11}$'' THEN RAISE NOTICE ''% is an enRoute card.'', cc_num; ELSIF tempstring ~ ''^(3\d{4}|2131|1800)\d{11}$'' THEN RAISE NOTICE ''% is a JCB card.'', cc_num; ELSIF tempstring ~ ''^56(10\d\d|022[1-5])\d{10}$'' THEN RAISE NOTICE ''% is a BankCard.'', cc_num; END IF; RETURN TRUE; END; ' LANGUAGE 'plpgsql';
Pregunta: ¿Es superfluo el punto y coma (;) al final de una sentencia
SQL cuando se envía a Postgres desde PHP?
Pregunta: ¿La cantidad de espacio en blanco generado por PHP en
consultas SQL tiene algún efecto en la velocidad de la consulta? Pregunta: ¿Cómo puedo acelerar select max(id) from table;Respuesta: Reemplácelo por select id from table order by id desc limit 1;
Pregunta: ¿Por qué uno es más rápido que el otro? En SQL Server
funcionan igual. Para información general y discusión acerca de rendimiento en PostgreSQL, suscríbase a la lista pgsql-performance.
El mejor módulo de Perl para PostgreSQL es DBD::Pg, que ahora se hospeda en gborg. Pg.pm también está disponible, junto con otros, a través de gborg y CPAN.
|
||||||||||||||||||||
Comments and Corrections are welcome. Suggestions and contributions of items are also welcome. Send them in!. Copyright A. Elein Mustain 2003, 2004,2005 |