jueves, 30 de septiembre de 2010

PostgreSQL: Para otorgar privilegios a un usuario

PosgreSQL permite crear provilegios por tabla en la base de datos de manera que un usuario en particular pueda crear consultas SELECT pero no pueda ejecutar el resto UPDATE, DELETE, INSERT.. el problema de esto es que pasa si tienes una BD con muchas tablas, tendrias q generar la sentencia grant por cada tabla GRANT SELECT ON TABLE public.table to u_read; para solucionar esto dejo aqui una consulta que genera todas las sentencias GRANT para cada tabla dentro de la BD

select 'GRANT SELECT ON TABLE '||schemaname||'.'||tablename||' TO u_read;' 
from pg_tables 
where schemaname in ('public') order by schemaname, tablename;


Para ver la Referencia.
Referencia de Postgresql Aqui!

martes, 7 de septiembre de 2010

PostgreSQL: funcion para dividir cadenas a partir de expresiones regulares

la funcion regexp_split_to_table y regexp_split_to_array Dividide una cadena usando expresiones regulares POSIX como el delimitador.

El sigueinte ejemplo divide una cadena de texto utilizando como delimitador 'espacio' para separar las palabras y devolver un arreglo de postgres.
select regexp_split_to_array('hola mundo! que tal!',E'\\s+') as x
y el resultado
{hola,mundo!,que,tal!}

El sigueinte ejemplo divide una cadena de texto utilizando como delimitador 'espacio' para separar las palabras y devolver un recorset que contiene una fila para cada palabra
select regexp_split_to_table('hola mundo como estas',E'\\s+') as x
y el resultado es:
"hola"
"mundo"
"como"
"estas"
puedes cambiar la expresion regular E'\\s+' (que por lo q entiendo son espacios en blanco) por estas otras '[^0-9]+' '[^A-Z]+' '[^A-Z]*' '[^a-z]*' o cualquier otra que utilices, pruebalo y observa los resultados.
Utilidad: imagina que quieres crear usuarios con el primer caracter del nombre y el apellido concatenado a partir de tu tabla de personal de tu sistema administrativo entonces usas esto:
select cedula,nombre,apellido,substring(nombre from 1 for 1) ||
(select regexp_split_to_table(apellido,E'\\s+') as x limit 1) as login,
md5('123456'),1 as status from personal where status = 1 order by cedula
Luego toca verificar la unicidad de los login's de la tabla... y listo...

CSS: Vinculos con texto e imagenes

En muchas ocaciones he tenido que crear vinculos con imagenes/iconos y texto representativos de la accion que realizan, ej. agregar,modificar, eliminar y cada vez q pongo la imagen en la etiqueta <a> la imagen no queda centrada con el texto.. quizas para muchos es una cuestion muy sencilla, pero para mi que no se mucho o nada de CSS es importante.. aqui va el .css para realizar esto:
a
{
  color: #524F46;
  outline: none;
  text-decoration: none;
}

a:hover
{
  text-decoration: underline;
}

a.salir {
    background: transparent url(../images/imgForm/salir.png) no-repeat scroll left center;
    padding: 2px 0 2px 25px;
}

a.listado {
    background: transparent url(../images/imgForm/list.png) no-repeat scroll left center;
    padding: 2px 0 1px 20px;
}

a.agregar {
    background: transparent url(../images/imgForm/add.png) no-repeat scroll left center;
    padding: 2px 0 1px 20px;
}

a.modificar {
    background: transparent url(../images/imgForm/edit.png) no-repeat scroll left center;
    padding: 2px 0 1px 20px;
}

a.eliminar {
    background: transparent url(../images/imgForm/delete.png) no-repeat scroll left center;
    padding: 2px 0 1px 20px;
}

Y en los vinculos donde se implemtentan la hoja de estilos:

Salir

Volver al listado de personal

lunes, 6 de septiembre de 2010

HTML: incrustar los ultimos twits en tu pagina web

Buscando una manera de incrustar los twits mas recientes en una pagina web, me consegui con el siguiente codigo que esta disponible en Twitter y un amigo esta probando para la intranet.. es facil de implementar, solo quizas le falta algo de diseño pero es lo q te da twitter.. aqui va el codigo, solo copialo, cambia la direccion del twitter y listo..
<div  style = "margin-top:0px; margin-bottom:0px; position:relative;left:0px;overflow:hidden;padding-left:0px; 
padding-right:0px; padding-top:0px; padding-bottom:0px;  background-color:;width:100%; ">
<h3 style="overflow:hidden"></h3>
<br/><br/>
<script src="http://widgets.twimg.com/j/2/widget.js"></script>
<script>
new TWTR.Widget({
  version: 2,
  type: 'profile',
  rpp: 10,
  interval: 6000,
  width: 250,
  height: 300,
  theme: {
    shell: {
      background: '#000000',
      color: '#ffffff'
    },
    tweets: {
      background: '#f5edf5',
      color: '#0a0a0a',
      links: '#c73261'
    }
  },
  features: {
    scrollbar: true,
    loop: false,
    live: true,
    hashtags: true,
    timestamp: true,
    avatars: false,
    behavior: 'all'
  }
}).render().setUser('LuisChataing').start();
</script></div>

martes, 31 de agosto de 2010

PostgreSQL: funcion para reemplazar substring

Referencia

La funcion overlay(string placing string from int [for int]) retorna un dato tipo TEXT y reeplaza parte de una cadena...

ejemplo de la funcion:
select overlay('Txxxxas' placing 'hom' from 2 for 4)

En la funcion overlay indicas el inicio de la cadena a reemplazar y la cantidad de caracteres q eliminaras de la cadena original, no importa si la subcadena nueva contenga la misma cantidad de caracteres. en el ejemplo se elimina desde el caracter 2, 4 caracteres 'xxxx' y se reeplaza con 'hom' 3 caracteres.. y el resultado es: Thomas

Tambien existe la funcion replace(string text, from text, to text) que reemplaza las ocurrencias de una cadena en otra por otra cadena

ejemplo de la funcion:

select replace('abcdefabcdef', 'cd', 'XYZ')
y el resultado es 'abXYZefabXYZef'

lunes, 30 de agosto de 2010

SVN: eliminar los archivos .svn el proyecto

Este comando lo paso un amigo hace un tiempo... el comando busca los archivos .svn y los elimina.. muy util para subir proyectos al SVN que antes estaban en otro SVN, claro, suponiendo q ya no eliminaste los archivos .svn desde el IDE (ej. eclipse)

Debes entrar en la carpeta y luego ejecutar el comando y listo!

$ cd /var/www/proy
$ find . -name .svn -print0 | xargs -0 rm -rf

Comando Linux: Diff - para comparar archivos -

Es invocado desde la línea de comando con los nombres de dos archivos: diff original new. El resultado del comando representa los cambios requeridos para hacer que el archivo original se convierta en el nuevo archivo.
Si original y nuevo son directorios, entonces diff se ejecutará sobre cada archivo que exista en ambos directorios. Una opción, -r, hará que cualesquiera subdirectorios emparejados comparen archivos entre directorios.


$ diff original.txt nuevo.txt 
 y tambien puedes utilizar

$ diff -e original.txt nuevo.txt