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>