Evolución y avances del
Gestor
Anthony R. Sotolongo León(asotolongo@uci.cu)
POSTGRESQL

•Sumario:
• Características de PostgreSQL.
• Evolución de las principales características por
versiones, hasta 9.2.
• “Posibles” mejoras de la versión 9.3.
POSTGRESQL

Característica
PostgreSQL.

globales

de

• Subconsultas, vistas, triggers, índices, reglas,
dominios.
• Propiedad ACID (100%)
• Manejo de usuarios.
• Funciones (procedimientos almacenados).
• Tipos de datos definidos por el usuario.
• Lenguage procedural interno(plpgsql).
• Otros lenguages procedurales
(plpython,plr,plperl, etc)
POSTGRESQL

Característica
PostgreSQL.
•
•
•

•

globales

de

Máximo tamaño de tabla 32 TB.
Máximo tamaño de campo 1 GB.
Máximo columnas por tabla 250 - 1600
dependiendo de los tipos de columnas.
Índices por tablas, ilimitados.
POSTGRESQL

Evolución de
PostgreSQL

las

versiones

• Los primeros escritos de POSTGRES 1986
• Postgre95 (SQL)
• PostgreSQL 6.0 (1996-1997)
POSTGRESQL

Evolución de
PostgreSQL
7.1 abr-2001
7.2 feb-2002
7.3 nov-2002
7.4 nov-2003

las

versiones

8.0 ene-2005
8.1 nov-2005
8.2 dic-2006
8.3 feb-2008
8.4 jul-2009

9.0 sep-2010
9.1 sep-2011
9.2 sep-2012
POSTGRESQL

PostgreSQL 7.1 [2001]
•Write-Ahead Log (WAL).
•Se eliminaron limitaciones antiguas sobre SQL.
•Permitieron hacer consultas más complejas.
POSTGRESQL

PostgreSQL 7.2 [2002]
•VACUUM mejorado.
•Optimizador de consultas mejorado.
•Se permitieron ver las estadísticas del servidor
con detalles.
POSTGRESQL

PostgreSQL 7.3 [2002]
•Schemas.
•Consultas preparadas.
•Privilegios sobre las funciones.
POSTGRESQL

PostgreSQL 7.4 [2003]
•Mejoran la búsqueda de texto contrib/tsearch2
•Agregan el information_schema.
•Considerables mejoras de optimización con
subconsultas.
•Agrega soporte tipos de datos IPv6.
POSTGRESQL

PostgreSQL 8.0 [2005]
•Primera versión para Windows.
•Tablespaces.
POSTGRESQL

PostgreSQL 8.1 [2005]
•Mejoras del uso de índices.
•Creación de ROLES.
•Particionado de tablas.
POSTGRESQL

PostgreSQL 8.2 [2006]
•Mejoras en las operaciones de ordenamiento.
•Cláusula RETURNING a las operaciones INSERT,
DELETE,UPDATE.

DELETE FROM persona WHERE edad<2
RETURNIG *
POSTGRESQL

PostgreSQL 8.3 [2008]
•Tipos de datos XML, ENUM, UUID.
•Mejoras en la operaciones con cursores
•Búsqueda de texto pasa al núcleo.

• CREATE TYPE colores AS ENUM
(„Blanco‟, ‟Negro‟);
POSTGRESQL

PostgreSQL 8.4 [2009]
•Permisos por columnas a usuarios.
•Funciones ventanas.
•Cláusula WITH(CTE).
POSTGRESQL

PostgreSQL 8.4 [2009]
•Funciones ventanas.
¿Cuál es la diferencia del salario de cada uno de
los empleados con respecto al mínimo salario de
su departamento?”
SELECT e1.empid, e1.departamento, e1.salario,
(select min(e2.salario) from empleado e2 where
e2.departamento=e1.departamento ) as minimo
FROM empleado e1;
POSTGRESQL

PostgreSQL 8.4 [2009]
•Funciones ventanas.
¿Cuál es la diferencia del salario de cada uno de
los empleados con respecto al mínimo salario de
su departamento?”
SELECT empid, departamento, salario, min(salario)
OVER (PARTITION BY departamento)
AS minimo FROM empleado ;
POSTGRESQL

PostgreSQL 8.4 [2009]
•Cláusula WITH(CTE).
WITH persona_edad AS (
SELECT empid from empleado where edad> 20
and edad<25)
INSERT INTO clasificados (select empid from
persona_edad) ;
POSTGRESQL

PostgreSQL 9.0 [2010]
•Replicación nativa asincrónica (Hot Standby &
Streaming Replication)
•Permisos por esquemas.
•Triggers por columnas y condicionales
•pg_upgrade.
POSTGRESQL

PostgreSQL 9.0 [2010]
•Triggers por columnas y condicionales
CREATE OR REPLACE TRIGGER nombre_trigger
[ AFTER | BEFORE ] [| UPDATE | ] of columna
ON nombre_tabla
FOR EACH [ROW | STATEMENT]
EXECUTE PROCEDURE function;
POSTGRESQL

PostgreSQL 9.0 [2010]
•Triggers por columnas y condicionales
CREATE OR REPLACE TRIGGER nombre_trigger
[ AFTER | BEFORE ] [ INSERT | UPDATE |
DELETE ]
ON nombre_tabla
FOR EACH [ROW | STATEMENT]
When (condición)
EXECUTE PROCEDURE function;
POSTGRESQL

PostgreSQL 9.1 [2011]
•Replicación nativa sincrónica (Hot Standby &
Streaming Replication)
•Tablas foráneas(FDW).
CREATE FOREIGN TABLE tablaforarea (atributos) server
miserver options (database 'basedatosexterna', table
tablaexterna');
POSTGRESQL

PostgreSQL 9.1 [2011]
•Tablas Unlogged(sin registro).
create table tablan (a int);
create unlogged table tablau (a int);
insert into tablan select generate_series(1,5000); INSERT 0
5000 Duración: 29,881 ms
insert into tablau select generate_series(1,5000);
INSERT 0 5000 Duración: 18,615 ms

-------Mejora en un 48 %------
POSTGRESQL

PostgreSQL 9.1 [2011]
•Extensiones (WWW.PGXN.ORG )
Existen + 90 extensiones

Replicación, FDW, Compatibilidad, administración ,
diccionarios, estadísticas y otros.
POSTGRESQL

PostgreSQL 9.1 [2011]
•Triggers en vistas.
CREATE TRIGGER trigger1 INSTEAD OF
INSERT OR UPDATE OR DELETE ON vista
FOR EACH ROW EXECUTE PROCEDURE
funcion();
POSTGRESQL

PostgreSQL 9.1 [2011]
•Mejoras a las clausula WITH

WITH mover_filas as
(delete FROM persona WHERE edad>0
and edad<10 returning *)
insert INTO persona_logs SELECT * from
mover_filas;
POSTGRESQL

PostgreSQL 9.2 [2012]
•Mejoras de rendimiento “muy considerables”.
•Replicación en cascada.
•Mejoras en los índices (only index).
•Soporte para tipos de datos JSON.
•Range Types (tipo de rango)
POSTGRESQL

PostgreSQL 9.2 [2012]
•Soporte para tipos de datos JSON.
Dos funciones:
select row_to_json (tabla1) from tabla1

•row_to_json()
•array_to json()
POSTGRESQL

PostgreSQL 9.2 [2012]
•Soporte para tipos de datos JSON.
Dos funciones:
CREATE TABLE tabla2( campo1 serial NOT
NULL, campo2 json);
POSTGRESQL

PostgreSQL
9.3
“posibles mejoras”

[2013]

•Mejoras en los tipos de datos JSON.
Más funciones:
json_object_keys()
json_each()
select * from json_each('{"name":“anthony","password":"super

simple”}‟)
key | value
name | “anthony"
password | "super simple”
POSTGRESQL

PostgreSQL
9.3
“posibles mejoras”

[2013]

•Mejoras en los tipos de datos JSON.
select '{ "name": “anthony", "password": "super
simple", "access_level": 1 }'::json->'name„ as
nombre;
nombre
“anthony"
POSTGRESQL

PostgreSQL
9.3
“posibles mejoras”
•Vistas actualizables.
•postgres_fdw.
•Lateral.
•trigger sobre eventos(DDL).
•Vistas materializadas.

[2013]
POSTGRESQL

Conclusiones
•PostgreSQL es un SGDB con más de dos décadas
de desarrollo.
•Su evolución esta sincronizada con el estándar
SQL.
•Posee avanzadas características de programación
al nivel de gestores privados.
Evolución y avances del
Gestor
Anthony R. Sotolongo León(asotolongo@uci.cu)

Evolución y avances del Gestor PostgreSQL