pgAdmin 4 – El elefante se acerca a la línea de meta

The main user interface, showing the properties of a function.

Esta entrada es una traducción libre autorizada de la entrada pgAdmin 4 – The elephant nears the finish line publicada originalmente en el blog Dave’s Postgres Blog  – Postgres related musings and ramblings de Dave Page

Como saben, muchos de nosotros en el equipo de pgAdmin hemos estado trabajando duro en pgAdmin 4 desde hace algún tiempo. pgAdmin 4 es la reescritura completa de pgAdmin (la cuarta, como pueden suponer), la versión anterior ha llegado al final de su vida de mantenimiento después de 14 años de desarrollo.

El trabajo en el proyecto inició lentamente, al menos hace dos años, sin embargo el equipo de EnterpriseDB ha incrementado el ritmo de desarrollo en los últimos meses. Justo ahora, nos estamos acercando a la versión alfa que esperamos este lista al rededor de unas semanas.

Arquitectura

Esta nueva aplicación está diseñada para funcionar tanto en el escritorio como en un servidor web. Esta escrito en Python usando el Framework Flask para el backend, y Javascript / jQuery / Backbone para el FrontEnd, que puede fácilmente ser implementada como una aplicación WSGI para múltiples usuarios en prácticamente cualquier entorno de red. Una pequeña aplicación  permite que se ejecute como una aplicación de escritorio – este es un ejecutable de Qt que incorpora un intérprete de Python y un navegador web, junto con la aplicación principal en un solo paquete que puede ser instalado en un ordenador junto a versiones anteriores de pgAdmin.

Sigue leyendo

Crear trigger y función PL/PGSQL que genere código compuesto al realizar Insert en PostgreSQL

trigger y función PL/PGSQL para Insert en PostgreSQL

En esta entrada crearemos un trigger y función PL/PGSQL para Insert en PostgreSQL, haremos un trigger que en cada operación de inserción en una tabla especifica de nuestra base de datos PostgreSQL, llame a una función hecha en PL/PGSQL, la cual generara é insertara en un campo de nuestra tabla seleccionada un código compuesto por el año actual, el valor de un campo (siglas de un estado) en una tabla relacionada y un incremental que debe ser único para los parámetros previos. Es decir el código debe ser como 2015AM0006 2015SU0001 2015AM0007 y se debe comportar de tal manera que cada año se inicialice el valor incremental y dicho valor se incrementa en base al año y siglas de estado. Sigue leyendo

Importar archivo CSV en MariaDB / MySQL usando LOAD DATA INFILE

load data local infile mysql mariadb

En esta entrada veremos como importar archivo CSV en MariaDB / MySQL desde un  archivo .CSV usando LOAD DATA INFILE el cual es el mecanismo que provee para esta tarea el manejador de bases de datos.

Use MariaDB v10.0.20 sobre Debian Jesse, sin embargo funciona exactamente igual en MySQL. En líneas generales la necesidad era cargar noticias que vienen de otro manejador de bases de datos (PostgreSQL) hacia MariaDB donde esta un modelo de datos usado por wordpress, lo que necesitamos es llenar la tabla de notas de wordpress (wp_posts) con el contenido del archivo CSV. Sigue leyendo

Breve reseña de Bases de Datos en Debian Jessie

PostgreSQL

Como agradable sorpresa encontramos como única opción disponible en los repositorios la versión 9.4 la cual es la ultima y mas reciente versión disponible de PostgreSQL.

Comunicado de Prensa para PostgreSQL 9.4: http://www.postgresql.org/about/press/presskit94/es/

pgAdmin el cliente gráfico mas usado de PostgreSQL también lo encontramos en la ultima versión disponible para el proyecto (1.20).

phpPgAdmin también lo tenemos disponible con la ultima versión estable del proyecto

Sigue leyendo

Describe Table en SQLite + Muestra en Python

Sorprendentemente no hay describe table o show table en sqlite.

La solución es la siguiente consulta:

SELECT * FROM sqlite_master;

SELECT * FROM sqlite_master where type = ‘table’;

SELECT type,name, tbl_name FROM sqlite_master where type = ‘table’;

PRAGMA table_info(familia);

This pragma returns one row for each column in the named table. Columns in the result set include the column name, data type, whether or not the column can be NULL, and the default value for the column.

PRAGMA foreign_key_list(familia);

This pragma returns one row for each foreign key that references a column in the argument table.

http://www.sqlite.org/pragma.html

SELECT seq FROM sqlite_sequence where name = ‘familia’

SELECT seq + 1 FROM sqlite_sequence where name = ‘familia’

Fragmento de muestra en Python:

[sourcecode language=”python”]
import sqlite3

db = sqlite3.connect("basededatos.db")
dbconn = db.cursor()
print "Next Value: " + str(dbconn.execute("SELECT seq FROM sqlite_sequence where name = ‘familia’").fetchone()[0]+1)
print "Proximo Valor: " + str(dbconn.execute("SELECT seq + 1 FROM sqlite_sequence where name = ‘familia’").fetchone()[0])</pre>

[/sourcecode]

lhernandez@DskLhernandez:~$ python sqlite.py
Next Value: 64
Proximo Valor: 64

http://www.sqlite.org/sqlite.html

http://sqlite.org/lang_corefunc.html

Pentaho Data Integration (Kettle) en Debian Wheezy

diagrama-modelo-conceptual-kettle

La suite de inteligencia de negocios Pentaho, entre las distintas soluciones que ofrece cuenta con la herramienta de Integración de data (Pentaho Data Integration) mejor conocida como Kettle cuyo nombre es un acrónimo recursivo de “Kettle Extraction Transformation Transportation & Loading Environment”. Dicha herramienta permite realizar operaciones de ETL (Extraction, Transformation and Load), sobre diversas fuentes de datos y con múltiples opciones para ello.

diagrama-modelo-conceptual-kettle

Adaptación de Kettle Conceptual Model.pdf

La pagina web oficcial de Kettle es http://kettle.pentaho.com/ en la cual se llega al repositorio en SourceForge para descargar la ultima versión estable. A la fecha de esta entrada la ultima versión disponible es la 4.4

El URL directo para descargar es http://sourceforge.net/projects/pentaho/files/latest/download y si tiene alguna confusión haga clic en: pdi-ce-4.4.0-stable.tar.gz

Descomprimir el archivo que descargamos con clic derecho o por terminal así:

Sigue leyendo

Redis – Tu base de datos libre en memoria

base de datos database memoria ram radis nosql

redisRedis es un motor de base de datos libre de tipo clave-valor (key-value) persistententes que residen en memoria ram y posteriormente vuelca el conjunto de datos almacenados al disco duro. Redis es cliente/servidor por lo que levanta su servicio y responde peticiones, cuenta con interfaz de red lo cual hace posible conectar clientes o nodos desde otros host.

Redis es key/value esto significa que solo entiende Claves y Valores, es decir, cadenas, listas, hash, conjuntos y conjuntos ordenados, de igual manera Redis provee mecanismos para manipular y consultar estas estructuras de datos. Al no pertenecer al mundo relacional automáticamente entra en el grupo de bases de datos libres de tipo NoSQL (Not Only SQL).

Se puede ejecutar operaciones atómicas sobre estos tipos, como agregar elementos a una cadena; incrementar el valor de un hash, empujando a una lista; intersección de conjuntos de computación, unión y diferencia, o conseguir el miembro de más alto rango en un conjunto ordenado.

Redis resuelve de manera sencilla y eficiente problemas que no necesitan la complejidad de las bases de datos relacionales, como lo es en la mayoría de los casos de usos el almacén y gestión de estructuras de datos temporales, por lo cual redis es mayoritariamente usado para incorporar soluciones sofisticadas de cache de datos ó como backend de operaciones en linea en escenarios de alta demanda. Redis no pierde tiempo pensando  en relaciones, restricciones ni tipos de datos, se enfoca en hacer eficientemente su trabajo que es establecer y recuperar (set y get) datos sobre las estructuras con las que cuenta.

memoria-ram-radis-nosql

memoria-ram-radis-nosql

Ahora bien, todo esto suena excelente, pero ¿para que querría alguien usar esto en la vida real?

  • Su compleja y mimada base de datos relacional que soporta toda la carga de sus operaciones, recientemente se le incorporo mensajería instantánea (si sus usuarios chatean entre si, con clientes y publico en general ) a la aplicación que hace uso de ella, se dio cuenta que esto que no es lo mas importante en su modelo de negocios, le esta colapsando su servicio. Pues transfiera la gestión de chat a Redis y luego totaliza la mensajería del dia y la manda como histórico a su base de datos principal.
  • Suponga que tiene un portal web con mucha trayectoria y miles de millones de contenidos, así como millones de visitas diarias, cuya pagina de inicio abarca el 90% de las visitas de su web, su pagina de inicio solo son 30 contenidos y otros elementos, pues en vez de recorrer su base de datos tradicional con los millones de contenidos en busca de los 30, simplemente los pone a disposición de la manera mas rápida posible.
  • Para análisis y procesamiento en tiempo real. Su país necesita implementar un sistema integral de atención a sus ciudadanos, ideal seria que la carga de consultas de los tickets vigentes resida en una solución como redis, y que el análisis y monitoreo del comportamiento de los usuarios en linea en el sistema también.
  • Gestión de sesiones de usuarios y soluciones de cache, entre muchas otras.

Actualmente Redis es usado por: Twitter, Instagram, GitHub, Flickr, DiggHeroku lo oferta en sus servicios, es soportado por muchos de los proveedores de plataforma como servicio, entre muchos otros de los grandes en internet.

Sigue leyendo

Monty Widenius habla sobre NoSQL y Big Data

NoSQL y los grandes volúmenes de datos
Michael-Widenius-maxdb-mysql-mariadb

Creador de MaxDB, MySQL y MariaDB
Michael Widenius comenta:

“La razón principal de que NoSQL se hiciera popular es que, a diferencia de SQL, se puede comenzar a utilizarlo sin diseño alguno. Esto hace que sea más fácil comenzar con NoSQL”

“Entonces, los beneficios principales (al menos antes de MariaDB) de la mayoría de soluciones NoSQL son:

✓ Acceso rápido a los datos (siempre y cuando pueda tener todo en la memoria)
✓ Replicación rápida de datos repartidos en muchos nodos.
✓ Esquema flexible (se puede añadir nuevas columnas al instante).”

“Más rendimiento y más esquemas flexibles son los dos principales impulsores de NoSQL.”

“SQL no va a desaparecer. NoSQL no puede reemplazarlo. Casi todo el mundo necesitara relaciones (JOIN’s) para utilizar sus datos. Sin embargo, hay lugares donde NoSQL tiene sentido. Creo que, en el futuro, se verá más combinado SQL y el uso de NoSQL.”

Entrevista completa: http://readwrite.com/2013/01/21/dont-write-off-relational-databases-for-big-data-just-yet

pgFouine – Análisis de logs PostgreSQL en Debian

Análisis de logs PostgreSQL

PgFouine, analiza las bitácoras (logs) de la base de datos PostgreSQL para generar informes detallados sobre el uso y abuso de consultas SQL que bien sabemos tienen una gran incidencia en el rendimiento y la carga que tendrá el manejador de base de datos y el servidor que lo aloje, con fin de optimizar y realizar los ajustes necesarios para mejorar el desempeño del mismo. Esta escrito en el lenguaje de programación PHP y se distribuye como software libre por lo que podrían generar los informes con logo personalizado, agregar particularidades, funcionalidades, mejorarlo, etc…

¿Como funciona pgFouine?

PgFouine realiza un análisis al archivo de log generado por PostgreSQL con el cual genera informes, que nos indicara que consultas SQL son las que mas tardan, cuales son mas frecuentes, cuantas consultas DML están presentes en ese archivo log, inclusive generando gráficos los cuales nos facilitara mucho la tarea de determinar o hacer seguimiento al comportamiento de nuestras bases de datos.

En un sistema operativo Debian GNU/Linux ó alguno de sus derivados(Canaima, Mint, Ubuntu) lo instalamos con un sencillo:

#aptitude install pgfouine

También pueden descargar el código fuente y luego de descomprimir el .tar.gz ejecutar con php el archivo pgfouine.php

pgFouine puede ser usado de dos maneras. Configurando los logs que genera PostgreSQL para usar las facilidades de syslog del sistema operativo, o mediante salida estándar stderr que es como viene por defecto la configuración del log generado por el manejador de base de datos. El propio equipo de pgFouine recomienda usar la vía del syslog por que resulta mas eficiente para su software ya que mediante la via stderr se pudieran encontrar inconsistencias en el informe generado. Nosotros usaremos la via del syslog.

1.- Configurar correctamente los log de PostgreSQL

Abrir con el editor preferido (nano, vi, vim, emacs, edit, etc… ) el archivo de configuración de postgresql: /etc/postgresql/8.4/main/postgresql.conf

ubicar la sección:

#——————————————————————————

# ERROR REPORTING AND LOGGING

#——————————————————————————

descomentar la siguiente linea:

#log_destination = 'stderr'

y dejarla asi:

log_destination = 'syslog'

Sigue leyendo

YII – Autenticación de usuarios + ultimo acceso

Este post tiene por objetivo crear la funcionalidad de autenticación de usuarios contra una base de datos usando el humilde y eficiente framework YII.

Se pretende con este post ampliar la explicación del capitulo 9 de la GUIA BASICA DE YII FRAMEWORK añadiendo algunos detalles como la captura y gestión del la fecha del ultimo acceso al sistema por cada usuario, condicionar mostrar elementos del menú según el perfil del usuario.

Creamos la tabla que vamos a usar para la practica en este caso estamos usando como base de datos postgreSQL, creamos la columna created_at que guardara automáticamente la fecha en que se ingresa cada registro haciendo uso de la función de postgres now().

[sourcecode language=”sql”]
CREATE TABLE usuario
(
id_usuario serial NOT NULL,
cedula character varying(12) NOT NULL,
nombre character varying(50) NOT NULL,
apellido character varying(50) NOT NULL,
email character varying(100) NOT NULL,
username character varying(128) NOT NULL,
password character varying(128) NOT NULL,
perfil character varying(10) NOT NULL,
created_at timestamp without time zone DEFAULT now(),
last_login timestamp without time zone,
CONSTRAINT usuario_pkey PRIMARY KEY (id_usuario )
);
[/sourcecode]

created_at-last-login-php-yii

created_at-last-login-php-yii

Sigue leyendo