lunes, 5 de mayo de 2008

Un sencillo ejemplo de restricciones CHECK con expresiones regulares en PostgreSQL

Hola a todos, si bien es cierto las expresiones regulares son un tema complejo y el motivo de este texto no es enseñarlas, mas bien escribir un ejemplo pequeño de como se usan expresiones regulares dentro de un Constraint Check en PostgreSQL. Para quienes quieran aprender mas de expresiones regulares bien les valdria revisar los siguientes URLs:

1) http://www.postgresql.org/docs/8.3/static/functions-matching.html

2) http://www.monografias.com/trabajos29/introduccion-expresiones-regulares/introduccion-expresiones-regulares.shtml

Aqui pongo el ejemplo de una expresión regular diseñada para verificar que los numeros introducidos en un campo deben de tener una longitud de 7 caracteres.

Ej:

create table 7numeros (
numero char(7) constraint longitud7 check (numero ~ E'^\\d{7}$' = true)
);

sicodelico=# insert into numeros7 values ('1');
ERROR: el nuevo registro para la relación «numeros7» viola la restricción check «longitud7»

sicodelico=# insert into numeros7 values ('1234567');
INSERT 0 1

--
Saludos.

domingo, 4 de mayo de 2008

fgrep.sh - Obtener el nombre de un archivo en base a su contenido.

Hola a todos, el dia de hoy publico aqui una función muy util que escribi hace ya algun tiempo. Un pequelo script de shell que sirve para buscar dentro de los archivos un patron especifico.


#!/bin/bash

# Autor : Julio Cesar Sánchez González (c)2008 GPL
# Fecha : 08-Feb-2007.
# Ultimo Update: 08-Feb-2007.
# Descripcion : Busca en el directorio actual un patron
# regular dentro de cada archivo y regresa
# el nombre del archivo en el que se
# encontro dicho patron.
# Uso : fgrep.sh
#

for i in `find -type f`; do
ret=`grep "$1" $i`;

if [ "$ret" != "" ]; then
echo $i;
fi
done


Por ejemplo, supongamos que queremos modificar el DocumentoRoot de nuestro apache2 y como ya es casi una costumbre, cada distribucion de linux parte el archivo de configuracion httpd.conf en multiples archivos mas pequeños pero aveces mas dificiles de identificar.

Por ejemplo en mi ubuntu 8.04 un listado del directorio de configuracion de apache seria algo como esto:


root@andromeda:/etc/apache2# ls -alF
total 30
drwxr-xr-x 7 root root 320 2008-05-04 16:04 ./
drwxr-xr-x 148 root root 7456 2008-05-04 16:26 ../
-rw-r--r-- 1 root root 10587 2008-02-01 21:57 apache2.conf
drwxr-xr-x 2 root root 72 2008-05-04 16:04 conf.d/
-rw-r--r-- 1 root root 378 2008-02-01 21:57 envvars
-rw-r--r-- 1 root root 0 2008-05-04 16:04 httpd.conf
drwxr-xr-x 2 root root 2792 2008-05-04 16:16 mods-available/
drwxr-xr-x 2 root root 800 2008-05-04 16:04 mods-enabled/
-rw-r--r-- 1 root root 59 2008-02-01 21:57 ports.conf
drwxr-xr-x 2 root root 96 2008-05-04 16:08 sites-available/
drwxr-xr-x 2 root root 80 2008-05-04 16:04 sites-enabled/
root@andromeda:/etc/apache2#


Algunos archivos y directorios que tendria que revisar uno por uno mediante cat o emacs para saber cual es el archivo que tengo que modificar y el cual almacena la directiva "DocumentRoot" que a simple vista es un poco dificil de ver.

Bueno, pues para eso hice este script que almacene en un archivo de nombre: fgrep.sh y almacene en /sbin.

Su uso es bastante sencillo y si alguin lo mejora seria bueno que me lo enviaran para publicarlo ya que este pequeño script fue escrito al vuelo y no he tenido tiempo de mejorarlo.

Ej:


root@andromeda:/etc/apache2# fgrep.sh DocumentRoot
./sites-available/default --> Dentro del archivo "default" se
encuentra "DocumentRoot" :)


Sin mas por el momento, me despido de ustedes y espero que les sea util como a mi.


--
Saludos

Bahia desde el balcon...

Bahia desde el balcon...
Ixtapa Zihuatanejo