Mostrando entradas con la etiqueta PostgreSQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta PostgreSQL. Mostrar todas las entradas

lunes, 21 de octubre de 2013

PL/pgsql

 

Vamos a abordar un tema muy importante para el desarrollo de cualquier proyecto, en este caso visto desde la parte de las base de datos y es precisamente el uso los procedimientos almacenados, en caso de postgreSQL las funciones, en otras palabras vamos a utilizar el lenguaje procedural PL/pgSQL de PostgreSQL en la resolución de problemas.

image


Ventajas

  • Cuando la ejecución del procedimiento ocurre en el servidor, es probable que aumente el rendimiento de nuestra aplicación al no tenerse que mandar datos entre el cliente y el servidor, y no tener que procesar resultados intermedios en el cliente para obtener el resultado final.
  • Al tener la lógica de la aplicación implementada en la Base de datos no tendremos que implantarla en los clientes, con el significativo ahorro de líneas de código redundante.
  • Si tenemos diferentes tipos de clientes implementados en diferentes sistemas ó lenguajes de programación y a la vez accediendo a la misma base de datos, no tendremos que programar la misma lógica en todos, al estar disponible en la base de datos la solución de nuestro problema.

Los procedimientos almacenados (stored procedures) en PostgreSQL se les llaman funciones, las cuales están almacenadas en la base de datos y listas para ser usadas. En postgreSQL se utiliza para la programación de funciones los lenguajes procedurales.

Lenguajes procedurales

PL/Perl: Es un lenguaje de programación imperativo y permite más control que el álgebra relacional de SQL.

PL/Python: Utiliza el entorno de ejecución de Python restringido. Funciona como un lenguaje de confianza.

PL/Java: Es un módulo libre que trae procedimientos almacenados, disparadores, y funciones para PostgreSQL backend a través de la interfaz estándar JDBC.

Y el PL/pgSQL es muy parecido al lenguaje PL/SQL utilizado por Oracle, es fácil de aprender, potente y siempre está disponible. Es un lenguaje estructurado en bloques y posee como mínimo un bloque principal en el procedimiento almacenado y dentro de este pueden existir sub-bloques. El mismo se puede utilizar para crear las funciones y disparadores (triggers), este último lo explicaremos en próximos artículos.

Además con el PL/PGSQL se pueden añadir estructuras de control SQL, realizar cálculos complejos entre otra serie de operaciones muy importantes para la solución de nuestros problemas.

A continuación vamos a pasar a ver la estructura de una función para entenderla mejor:

CREATE [OR REPLACE] FUNCTION
nombre_funcion([[ argmodo ][ argnombre ] argtipo [,...]])
RETURNS tipo AS $$
[ DECLARE ]
[ declaraciones de variables ]
BEGIN
Codigo
END;
$$ LANGUAJE plpgsql

Es importante señalar que los comentarios se definen /* mi comentario */ y los tipos de datos se declaran por ejemplo id INTEGER;

De todas maneras vamos a cerrar este artículo con un ejemplo muy sencillo pero que ilustra claramente la sintaxis que acabamos de poner.

CREATE FUNCTION sumar (x integer, y integer) RETURN INTEGER AS $$
Declare
Resultado integer;
BEGIN
Resultado:=x+y;
Return resultado;
END
$$ LANGUAJE plpgsql

Las funciones se pueden complejizar tanto como queramos en nuestras soluciones, los exhortamos a que continúen abordando sobre estos temas tan importantes, comiencen a utilizar consultas dentro de las funciones y a practicar el funcionamiento de las mismas.

{ Leer Más }


martes, 23 de julio de 2013

Postgresql + CodeIgniter

Ya que hemos avanzado un poco en el mundo de las consultas, ya citado en el artículo anterior vamos a introducirnos en la utilización de las mismas pero enfocados a un marco de trabajo llamado codeIgniter, framework que goza de gran prestigio en los desarrolladores y empresas que eligen php como lenguaje de programación para desarrollar sus proyectos.

¿Qué es CodeIgniter?

CodeIgniter es un Entorno de Desarrollo de una Aplicación - una herramienta de sistema - para gente que construye sitios web usando PHP. El objetivo es habilitar el desarrollo de proyectos mucho más rápido de lo que podría si escribiese código desde cero, a través de proveer un rico conjunto de librerías para tareas comúnmente necesarias, tanto como una simple interface y estructura lógica para acceder a estas librerías. CodeIgniter le permite concentrarse creativamente en su proyecto minimizando el volumen de código necesario para una tarea determinada.

¿Para quién es CodeIgniter?

CodeIgniter es correcto para usted si:

  • Quiere un entorno de trabajo con un pequeño punto de apoyo.
  • Necesita un desempeño excepcional.
  • Necesita amplia compatibilidad con cuentas de hosting estándar que corren una variedad de versiones y configuraciones de PHP.
  • Quiere un entorno de trabajo que requiere casi nula configuración.
  • Quiere un entorno de trabajo que no requiera usar línea de comando.
  • Quiere un entorno de trabajo que no requiera adherir a reglas de codificación estrictas.
  • No está interesado en monolíticas librerías de gran escala como PEAR.
  • No quiere ser forzado a aprender un lenguaje de plantillas (aunque una sintaxis de plantillas está opcionalmente disponible si lo desea).
  • Evita complejidad, favoreciendo las soluciones simples.
  • Necesita clara, exhaustiva documentación.

Ya explicado más menos sobre el framework de trabajo que vamos a usar nuestras consultas y sin desviarnos del tema central que son los gestores de base de datos y en nuestro caso particular postgres vamos a pasar a ver algunos aspectos que les resultarán muy interesantes.

CodeIgniter está basado en el patrón de desarrollo Modelo-Vista-Controlador. MVC es una aproximación al software que separa la lógica de la aplicación de la presentación. En la práctica, permite que sus páginas web contengan mínima codificación ya que la presentación es separada del código PHP.

  • El Modelo representa la estructura de datos. Típicamente sus clases de modelo contendrán funciones que lo ayudarán a recuperar, insertar y actualizar información en su base de datos.
  • La Vista es la información que es presentada al usuario. La Vista normalmente será una página web, pero en CodeIgniter, una vista también puede ser un fragmento de una página como un encabezado o un píe de página. También puede ser una página RSS, o cualquier otro tipo de "página".
  • El Controlador sirve como un intermediario entre el Modelo, la Vista y cualquier otro recurso necesario para procesar la petición HTTP y generar una página web.

CodeIgniter tiene un enfoque bastante flexible del MVC, ya que los Modelos no son requeridos. Si no necesita agregar separación, o descubre que mantener los modelos requiera más complejidad que quería, puede ignorarlos y construir su aplicación mínimamente usando Controladores y Vista. CodeIgniter también le permite incorporar sus códigos existentes, o incluso desarrollar librerías de núcleo para el sistema, habilitándolo a trabajar en una forma que hace que tenga más sentido para usted.

Hasta aquí aunque parezca que se sale un poco del tema no lo creas así porque es necesario que entiendas que terrenos pisas para pasar a la parte que nos interesa, en nuestro caso vamos a introducirnos en la capa del Modelo aquí es donde vamos a poner nuestras consultas a las base de datos.

¿Qué es un modelo?

Los modelos son clases PHP que se han diseñado para trabajar con la información en su base de datos. Por ejemplo, digamos que usted usa CodeIgniter para administrar un blog. Puede que tenga una clase de modelo que contiene funciones para insertar, actualizar y recuperar datos de su blog. Aquí está un ejemplo de lo que podría ser la clase del modelo:

Nota: Las funciones en el ejemplo anterior usan funciones de base de datos Active Record.

Y aquí es donde queríamos llegar a Active Record.

CodeIgniter usa una versión modificada del Patrón de Base de Datos Active Record. Este patrón permite obtener, insertar y actualizar información en tu base de datos con mínima codificación. En algunos casos, sólo una o dos líneas de código son necesarias para realizar una acción de base de datos. CodeIgniter no requiere que cada tabla de la base de datos sea un propio archivo de clase. Se permite una interface más simplificada

Más allá de la simplicidad, un beneficio mayor de usar la Active Record es que te permite crear una aplicación independiente de la base de datos que usa, ya que la sintaxis de consulta es generada por cada adaptador de base de datos. También permite consultas más seguras.

A continuación vamos a pasar a ilustrar algunos ejemplos de consultas usando este patrón no hay nada mejor para entender que ejemplos reales. Las siguientes funciones permiten construir una sentencia SELECT SQL.

Ejemplo # 1 Ejecuta la consulta de selección y devuelve el resultado. Puede ser usado solo, para traer todos los registros de una tabla:

$consulta = $this->db->get('mitabla');

Produce: SELECT * FROM mitabla

Ejemplo # 2 Permite escribir la porción de SELECT de tu consulta:

$this->db->select('titulo, contenido, fecha');
$consulta = $this->db->get('mitabla');

Produce: SELECT titulo, contenido, fecha FROM mitabla


Ejemplo # 3 Permite escribir una porción JOIN de la consulta:
$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comentarios', 'comentarios.id = blogs.id');
$query = $this->db->get();
Produce:
SELECT * FROM blogs
JOIN comentarios ON comentarios.id = blogs.id

Con estos 3 ejemplos vamos cerrando por esta artículo esperando que siempre sea de su agrado, y sobre todo que le pueda servir a solucionar problemas, si quiere seguir abordando sobre el tema puede visitar la ayuda de CodeIgniter y recuerde seguirnos en próximos artículos no olvide visitar nuestro blog.

{ Leer Más }


jueves, 18 de julio de 2013

Realizar consultas a una base de datos PostgreSQL empleando las instrucciones del lenguaje SQL.

clip_image002

Una vez que ya nos hemos introducido un poco en el mundo de las base en dos artículos anteriores, vamos a comenzar a ver cómo podemos consultar los datos registrados en ellas, para ello vamos a ir ilustrado algunos ejemplos y ver algunos ejercicios prácticos que sin duda nos van a ir ayudando mucho más a comprender de lo que hablamos:

La sentencia SELECT es usada para obtener la información guardada en una tabla. La forma general de esta sentencia es:

SELECT Información 

FROM Tabla

WHERE Condición.

Aquí, Información es la información que queremos ver. Esta puede ser una lista de columnas, o un * para indicar "todas las columnas".

Tabla indica el nombre de la tabla de la cual vamos a obtener los datos.

La cláusula WHERE es opcional. Si está presente, la Condición especifica las condiciones que los registros deben satisfacer para que puedan ser mostrados.

La manera más sencilla de la sentencia SELECT es cuando se recuperan todos los datos de la tabla: SELECT * FROM public."trabajadores";

Si no deseamos ver los registros completos de una tabla, entonces tenemos que usar los nombres de las columnas en las que estamos interesados separándolas por coma.

SELECT nombre, apellido1, apellido2, salario FROM trabajadores;

También es posible mostrar columnas calculadas a partir de la información contenida en otras columnas de la tabla. Ejemplo:

SELECT nombre, salario, salario*0.3 FROM trabajadores;

Los campos en la tabla resultante se muestran en el orden en que los solicitamos con la sentencia SELECT independientemente de cuál sea el orden que tengan en la estructura de la tabla.

SELECT nombre, apellido1, apellido2 FROM trabajadores; 

O podemos intercambiar el orden por ejemplo:

SELECT nombre, apellido1, apellido2 FROM trabajadores;

En ocasiones la cantidad de registros que recuperamos es muy grande y el resultado de la consulta ocupa varias pantallas. Es posible “limitar” la cantidad de filas que se mostrarán como resultado de una consulta empleando la cláusula LIMIT de la manera siguiente:

SELECT * FROM trabajadores LIMIT 5;

¿Qué podemos hacer para mostrar sólo el 3er registro en la tabla trabajadores?

En Postgre las posiciones de los registros en la tabla comienzan a contarse a partir de cero. EL primer registro está en la fila cero. El segundo registro está en la fila 1 y así sucesivamente hasta el registro n que estará en la fila n-1. Por tanto para mostrar el registro que ocupa la 3ra posición debemos recuperar el registro de la fila #2 y para lo cual podemos usar la cláusula LIMIT de la manera siguiente:

SELECT * FROM trabajadores LIMIT 1 OFFSET 2

Con LIMIT 1 OFFSET 2 estamos ordenando a PostgreSQL que devuelva 1 registro a partir de la fila 2.

Ahora vamos a pasar a explicar una función que consideramos pueda ser muy útil e interesante para los usuarios: CAST, aplicando la función CAST podemos convertir una cadena que contenga números en su representación como número tal como se muestra a continuación:

CAST (SUBSTR(idnum,10,1) AS INTEGER)

Con esta expresión extraemos el carácter que ocupa la posición 10 en el número de identidad y lo convertimos o representamos como un número entero

PostgreSQL posee una estructura muy útil que permite seleccionar cuál debe ser el valor definitivo de campos calculados a partir de evaluar expresiones aritméticas que devuelvan un valor entero. La sintaxis de esta estructura es:

CASE expression

WHEN value THEN result

[WHEN ...]

[ELSE result]

END


Ejemplos de su uso:

CASE CAST (SUBSTR(idnum,10,1) AS INTEGER ) % 2 

WHEN 0 THEN ‘HOMBRE’

WHEN 1 THEN ‘MUJER’

END

Un posible problema real para utilizar esta función de manera muy práctica puede ser a partir de posibles numeraciones de identidad y donde se sabe que en la posición 10 de la numeración se encuentra el dato de si es Masculino o Femenino a partir de si es par es Masculino y si es impar es Femenino puede ser la siguiente:

Selecciones los 10 primeros registros a partir de la tabla de trabajadores y conociendo los números de identificación diga si son M o F.

SELECT idnum, nombre,

CASE CAST (SUBSTR(idnum,10,1) AS INTEGER ) % 2

WHEN 0 THEN 'HOMBRE'

WHEN 1 THEN 'MUJER'

END AS sexo

FROM TRABAJADORES

LIMIT 10;


Volviendo a sintaxis más sencillas para no perder neuronas con funciones de carácter un poco más complejos vamos a terminar con la misma cláusula que comenzamos pero profundizando un poquito más en la misma. Es decir hasta el momento hemos empleado los comandos de PostgreSQL para recuperar y mostrar información almacenada en una tabla de la base de datos. Pero en todos los casos la información ha estado desorganizada. En SQL es posible hacer una consulta indicando que los resultados queden ordenados atendiendo a un determinado criterio. Dicho de manera más práctica, es posible recuperar datos y mostrarlos ordenados por una o más columnas.

Por ejemplo: Queremos obtener el listado de todos los trabajadores pero mostrarlo ordenado alfabéticamente por el nombre.

SELECT 

nombre,

apellido1,

apellido2

FROM TRABAJADORES

ORDER BY nombre;


Bueno colegas con este ejemplo un poco más sencillo cerramos por ahora exhortándolos a profundizar un poco más en las consultas y estudiando sus funciones más potentes, síganos en próximos artículos.

{ Leer Más }


jueves, 6 de junio de 2013

Las principales características y avances de PostgresSQL.

clip_image002

En el artículo anterior vimos la Introducción sobre Postgres y su evolución, a continuación queremos mostrarles las principales características que definen a postgresSql como uno de los gestores de base de datos de la más alta calidad y usabilidad para soportar cualquier variedad de proyectos, y sin dudas la base de datos más importante del mundo del software libre y una de las más importantes del mundo en general.

 

  • Es un Gestor de datos Objeto-Relacional

Postgresql organiza los datos con un modelo objeto-relacional, es capaz de manejar procedimientos, rutinas complejas, y reglas. Ejemplos de su funcionalidad avanzada son consultas declarativas SQL, control de versiones múltiples concurrentes, soporte multiusuario, transacciones de dos fases, optimización de consultas, herencia de datos, arreglos y matrices multidimensionales.

 

  • Altamente Extensible

Postgresql soporta operadores, funciones, métodos de acceso y tipos de datos declarados por el usuario. Soporta también sobrecarga de operadores, sobrecarga de procedimientos, vistas materializables y particionamiento de tablas y datos.

 

  • Soporte comprensivo de SQL

Postgresql soporta la especificación base SQL99, SQL:2003 y también incluye características avanzadas como las uniones SQL92.

 

  •  Integridad Referencial

Postgresql soporta integridad referencial, la cual es usada para asegurar la validez de la información dentro de la base de datos.

 

  •  API sumamente flexible

La flexibilidad del API de PostGreSQL ha permitido a entidades que provean soporte de fácil desarrollo para la base de datos de PostGreSQL. Estas interfaces incluyen Object Pascal, Python, Perl, PHP, ODBC, Java/JDBC, Ruby, TCL, C/C++, Pike y una larga lista más de muchos más.

  • Lenguajes Procedimentales

PostGreSQL tiene soporte para lenguajes internos procedimentales, incluyendo un lenguaje ativo llamado PL/pgSQL. Este lenguaje es comparable con el lenguaje procedimental de Oracle, PL/SQL. Otra ventaja de PostGreSQL es la capacidad de usar PERL, Pitón, TCL, Ruby,

PHP, Shell Scripting, etc.; como lenguajes procedimentales internos e integrados.

 

  •  MVCC

MVCC, o control de versiones múltiples concurrentes, es la tecnología que PostGreSQL usa para evitar los seguros (locking) innecesarios. Si usted ha usado cualquier otro gestor de base de datos SQL, como MySQL, MS SQL Server, Sybase ASE, etc.; se ha podido dar cuenta que

existen veces cuando la lectura de un cliente tiene que esperar para accesar a la información en la base de datos. La espera es causada por los clientes que están escribiendo registros e información en la base de datos. En pocas palabras, los clientes que leen son bloqueados por los otros clientes que escriben o actualizan registros en la base de datos. Usando MVCC, PostGreSQL evita este problema de manera definitiva. MVCC es considerado mucho mejor que los seguros a nivel de registros (row level-locking), debido a que el lector nunca es bloqueado por el escritor. En vez de eso, PostGreSQL mantiene un registro de todas las transacciones ejecutadas por los usuarios de la base de datos. PostGreSQL es entonces capaz de manejar registros sin hacer esperar a la gente a que los registros estén disponibles.

 

  •  Cliente / Servidor

PostGresSQL usa una arquitectura cliente / servidor basada en un proceso por usuario. Esto es similar al proceso que utiliza el servidor web Apache para el manejo de procesos. Existe un proceso maestro que se desprende para proveer conexiones adicionales por cada cliente que se intenta conectar a PostGreSQL.

 

  •  Write Ahead Logging (WAL)

La característica de PostGreSQL conocida como Write Ahead Logging incrementa la confiabilidad de la base de datos registrando los cambios antes de ser escritos a la base de datos. Esto asegura que, en caso de ocurrir un fallo critico en la base de datos, existirá un registro de transacciones del cual se pueda restaurar. Esto puede ser de gran beneficio en caso de cualquier fallo, como cualquier cambio que no haya sido totalmente escrito a la base de datos pueden ser recuperados usando los datos que fueron registrados anteriormente. Una vez el sistema es restaurado, el usuario puede continuar con su trabajo justo a partir del momento antes ocurrir el fallo.

Los esperamos en próximas entradas.

{ Leer Más }


viernes, 10 de mayo de 2013

Introducción sobre Postgres, su evolución.

¿Qué es postgres?

Los sistemas de mantenimiento de Bases de Datos relacionales tradicionales (DBMS,s) soportan un modelo de datos que consisten en una colección de relaciones con nombre, que contienen atributos de un tipo específico. En los sistemas comerciales actuales, los tipos posibles incluyen numéricos de punto flotante, enteros, cadenas de caracteres, cantidades monetarias y fechas. Está generalmente reconocido que este modelo será inadecuado para las aplicaciones futuras de procesado de datos. El modelo relacional sustituyó modelos previos en parte por su "simplicidad espartana". Sin embargo, como se ha mencionado, esta simplicidad también hace muy difícil la implementación de ciertas aplicaciones. Postgres ofrece una potencia adicional sustancial al incorporar los conceptos de: clases, herencia, tipos y funciones en los que los usuarios pueden extender fácilmente el sistema. Además incorpora características esenciales como son:

  • Restricciones (Constraints)
  • Disparadores (triggers)
  • Reglas (rules)
  • Integridad transaccional

Postgres es un sistema de gestión de bases de datos objeto-relacional, de propósito general, multiusuario y de código abierto, debido a las características antes mencionadas que la colocan en este peldaño tan alto en el mundo de las base de datos. Sus versiones son liberadas bajo la licencia BSD y está diseñado para ambientes de misión crítica. Postgres tiene algunas características que son propias del mundo de las bases de datos orientadas a objetos. De hecho, algunas Bases de Datos comerciales han incorporado recientemente características en las que Postgres fue pionera.


Evolución

clip_image002

Ingris

Desarrollado en la Universidad de California entre 1977 y 1985. Fue mejorado por la Corporación Ingres, siendo uno de los primeros servidores de bases de datos relacionales comercialmente exitosos.

Postgres

Resultado de un estudio realizado a Ingres.

  • Tenía características únicas, comparadas con los servidores de bases de datos de aquellos días:
  • Soporte de arreglos.
  • Sistema de tipos de datos expansible.
  • Bases de datos activas basada en reglas.
  • Fue descontinuado en la versión 4.2.

Postgres95

  • El código fuente fue modificado y SQL fue añadido.
  • El lenguaje de consultas fue cambiado de Postquel a SQL.
  • El tamaño del programa fue reducido por reestructuración del código fuente en un 25%.
  • El programa fue recodificado en C, de acuerdo al estándar ANSI C.
  • El rendimiento fue mejorado (30-50% más rápido que Postgres 4.2).

PostgresSQL

  • Refleja la relación entre Postgres y sus características SQL.
  • La comunidad de PostgreSQL, llamada Grupo Global de Desarrollo de PostgreSQL, fue organizada en Internet en 1996, con un portal en la dirección www.postgresql.org.
  • La primera versión fue liberada en enero de 1997.

En 1996, se hizo evidente que el nombre “Postgres95” no resistiría el paso del tiempo. Por lo que se eligió un nuevo nombre, PostgreSQL, para reflejar la relación entre el Postgres original y las versiones más recientes con capacidades SQL. Al mismo tiempo se comienza a partir de la 6.0, volviendo a la secuencia seguida originalmente por el proyecto Postgres.

Durante el desarrollo de Postgres95 se hizo hincapié en identificar y entender los problemas en el código del motor de datos. Con PostgreSQL, el énfasis ha pasado a aumentar características y capacidades, aunque el trabajo continúa en todas las áreas.

Espérenos en un próximo artículo para que conozca ¨Las principales características y avances de PostgresSQL…¨

{ Leer Más }


IconIconIcon