Version 6.5

Esta version marca un avance grande en el conocimiento que el equipo de desarrollo tiene del codigo fuente que heredamos de Berkeley. Veras que podemos aņadir mayores features mas facilmente, gracias al incremento en tamaņo y experiencia de nuestro mundialmente extenso equipo de desarrollo.

He aqui un conciso sumario de los mas notables cambios:

Control de concurrencia multi-version(MVCC en ingles Multi-version concurrency control)

Esto elimina nuestro viejo bloqueo a nivel de tabla, y lo reemplaza con un bloqueo del sistema que es superior a la mayoria de los sistemas de bases de datos comerciales. En un sistema tradicional, cada registro que es modificado se bloquea hasta que se confirma la transaccion, previniendo lecturas por otros usuario. MVCC utiliza de modo natural el caracter multi-version de PostgreSQL para permitir que las lecturas continuen leyendo datos consistentes durante la actividad de escritura. Las escrituras continuan utilizando el sistemas de transacciones compacto pg_log. Todo esto se realiza sin tener que reservar un bloqueo para cada registro como en los sistemas tradicionales de base de datos. Asi que, basicamente, ya no estaremos restringidos por mas tiempo por el bloqueo simple a nivel de tabla; tenemos algo mejor que el bloqueo a nivel de registro.

Copias de seguridad en caliente con pg_dump

pg_dump se beneficia de las nuevas prestaciones de MVCC para dar consistencia a un dump/backup mientras la base de dato pemanece en linea y disponible para ser consultada.

Tipos de datos numericos

Ahora tenemos tipos de datos verdaderamente numericos, con precision especificada por el usuario.

Tablas temporales

Se garantiza que las tablas temporales tienen nombres unicos durante una sesion en la base de datos, y que son destruidas al salir de la sesion.

Nuevas prestaciones SQL

Ahora tenemos soporte para declaraciones CASE, INTERSECT, and EXCEPT. Tenemos nuevos LIMIT/OFFSET, SET TRANSACTION ISOLATION LEVEL, SELECT ... FOR UPDATE, y un mejorado comando LOCK TABLE.

Aceleramiento

Continuamos acelerando PostgreSQL, gracias a la variedad de talentos que hay en nuetsro equipo. Hemos acelerdo la asignacion de memoria, la optimizacion, las uniones de tablas (table join), y las rutinas de transferencias de registros.

Portes

Continuamos ampliando nuestra lista de portes, esta vez incluimos WinNT/ix86 y NetBSD/arm32.

Interfaces

La mayoria de interfaces tienen una nueva version, y la funcionalidad existentes ha sido mejorada.

Documentacion

Nuevo y actualizado material esta presente por toda la documentacion. Se han aportado nuevas FAQs para las plataformas SGI y AIX. El Tutorial tiene informacion introductoria sobre SQL de Stefan Simkovics. Para la Guia del Usuario, hay paginas de referencia cubriendo la utilidad postmaster y mas programas de utilidad, un apendice nuevo contiene detalles sobre el comportamiento de date/time. La Guia del Administrador tiene un nuevo capitulo sobre resolucion de problemas de Tom Lane. Y la Guia del Programador tiene una descripcion del proceso de interrogacion, tambien de Stefan, y detalles acerca de como obtener el arbol del codigo fuente de Postgres por CVS anonimo y CVSup.

Migracion to v6.5

Un dump/restore utilizando pg_dump es necesario para aquellos que deseen migrar datos de cualquier version previa de Postgres. pg_upgrade not puede ser utilizado para actualizar esta version porque la estructura en disco de las tablas ha cambiado comparada con versiones precedentes.

La nueva caracteristica de Control de Concurrencia Multi-Version (MVCC, en ingles) puede dar comportamientos un poco diferentes en entornos multiusuarios. Lea y comprenda la seccion siguiente para asegurar que sus aplicaciones existentes le proporcionaran el comportamiento que necesita.

Control de Concurrencia Multi-Version

A causa de que las lecturas en 6.5 no bloquean los datos, a pesar del nivel de aislamiento de transaccion, los datos leidos por una transaccion pueden ser sobre escritos por otra. En otras palabras, si un registro es devuelto por SELECT eso no significa que este registro exista realmente en el momento en que es devuelto. (i.e algunas veces despues de que la sentencia o la transaccion comience) ni tampoco que el registro este protegido de ser borrado o actualizado por una transaccion en concurrente antes de que la transccion en curso haga commit o rollback.

Para asegurar la existencia actual de un registro y protegerlo contra actulizaciones concurrentes se debe utilizar SELECT FOR UPDATE o una sentencia LOCK TABLE apropiada. Esto deberia ser tenido en cuento cuando se porten aplicaciones desde versiones precedentes de Postgres y otros entornos.

Tenga todo lo anterior en mente su utiliza triggers contrib/refint.* para integridad referencial. Ahora se requieren tecnicas adicionales. Un modo es utilizar el comando LOCK parent_table IN SHARE ROW EXCLUSIVE MODE si una transaccion va a actualizar/borrar una clave primaria y utilizar el comando LOCK parent_table IN SHARE MODE si una transaccion va a actualizar/insertar una clave foranea.

Nota

Notese que si ejecuta una transaccion en modo SERIALIZABLE entonces debe ejecutar el comando LOCK anterior antes de la ejecucion de cualquier sentencia DML (SELECT/INSERT/DELETE/UPDATE/FETCH/COPY_TO) en la transaccion.

Esto inconvenientes desapareceran en el futuro cuando la habilidad para leer datos sucios (no confirmados) (a pesar del nivel de aislamiento) y la verdadera integridad referencial sea implementada.

Lista Detalla de Cambios

Correciones de errores
---------
Correcion de las funciones de conversion text<->float8 y text<->float4(Thomas)
Correcion para creacion de tablas con constraints con mixed-case(Billy)
Cambiado comportamiento de exp()/pow() para generar error en underflow/overflow(Jan)
Correcion de error en pg_dump -z
Limpiezas de invasiones de memoria(Tatsuo)
Correcion para abortos de lo_import(Tatsuo)
Ajustes en el manejo de nombres de tipo de datos para suprimir dobles comillas(Thomas)
Uso de coersion de tipo para emparejar columnas y DEFAULT(Thomas)
Correccion de deadlock de este modo solo verifica una vez despues de un segundo de espera(Bruce)
Correciones para agregaciones y PL/pgsql(Hiroshi)
Correcion para aborto de subquery(Vadim)
Correccion de libpq para la funcion PQfnumber y nombres que no distinguen mayusculas-minusculas(Bahman Rafatjoo)
Correcion para objetos grandes escritos-en-medio, no bloques extra, consumo de memoria(Tatsuo)
Correcion para pg_dump -d o -D y entrecomillado de caracteres especiales en INSERT
Reparados serios problemas con dynahash(Tom)
Correjidos problemas de portabilidad para INET/CIDR
Correcion de problema con error de selectividad en ALTER TABLE ADD COLUMN(Bruce)
Correcion del ejecutor de ese modo trabaja merjejoin de diferentes tipos de columnas(Tom)
Correcion de error para selectividad de OR en Alpha
Correcion para problema de selectividad de indice OR(Bruce)
Correcion \d para que muestre de ese modo la extension apropiada para char()/varchar()(Ryan)
Correcion en el codigo del tutorial(Clark)
Mejoras en la comprobacion de destroyuser(Oliver)
Correcion para Kerberos(Rodney McDuff)
Correcion para borrado de la base de datos mientras los buffers no se han limpiado(Bruce)
Correcion la secuencia nextval() para que pueda asi distinguir mayusculas-minusculas
Correcion para operador !!=
Borrado de buffers antes de destruir los ficheros de las base de datos(Bruce)
Correcion del caso en que el ejecutor evalua las funciones dos veces(Tatsuo)
Se permite a las acciones de secuencia netxval distinguir mayusculas-minusculas(Bruce)
Correcion de optimizador de indexacion para que no trabaje para numeros negativos(Bruce)
Correcion de perdidas de memoria en ejecuciones con fjIsNull
Correcion de perdidas de memoria para aggregate(Erik Riedel)
Se permite que username contenga una almohadilla (#, dash en ingles) en los permisos GRANT
Limpieza de NULL en los tipos inet
Limpieza de errores en tablas del sistema(Tom)
Correcion de problemas de PAGER y del comando \?(Masaaki Sakaida)
Reducido el tamaņo de fichero de multi-segment por defecto a 1GB(Peter)
Correcion del volcado de CREATE OPERATOR(Tom)
Correccion para escaneo hacia atras de cursores(Hiroshi Inoue)
Correccion para COPY FROM STDIN cuando se utiliza \i(Tom)
Correcion para una subselect cuando es comparada dentro de una expresion(Jan)
Correcion para manejo de devolucion de error mientras se duelven registros(Tom)
Correcion de problemas con referencia a tipos de array(Tom,Jan)
Se previene oid de UPDATE SET (Jan)
Correcion de pg_dump asi ņa opcion -t puede manejar nombres de tabla en mayusculas-minusculas
Correciones para GROUP BY es casos especiales(Tom, Jan)
Correcion de perdidas de memoria en queries falladas(Tom)
DEFAULT soporta ahora identificadores mixed-case(Tom)
Correcion para que multi-sefment utilice DROP/RENAME de tabla, de indice(Ole Gjerde)
Dehabilitacion de uso de pg_dump con las dos opciones -o y -d(Bruce)
Se permite a pg_dump volver adecuadamente permisos de GROUP(Bruce)
Correcion para GROYP BY en INSERT INTO table SELECT * FROM table2(Jan)
Correccion para computaciones en vistas(Jan)
Correciones para agregaciones en array con indices(Tom)
Correccion para como maneja DEFAULT entrecomillado simple en valores que requieren demasiadas comillas
Correccion de problema de seguridad con no super-usuarios que importan/exportan objectos de gran tamaņo.(Tom)
Vuelta atras de transaccion que crea table la limpia adecuadamente(Tom)
Correccion para permitir que tablas largas y nombres de columnas generen nombres en serie adecuados(Tom)

Mejoras
------------
Aņadida la utilidad "vacuumdb"
Se acelera libpq por mejor asignacion de memoria(Tom)
EXPLAIN utiliza todos los indices(Tom)
Implementadas las expresiones CASE, COALESCE, NULLIF(Thomas)
Nuevo formato de salida de pg_dump(Constantin)
Aņadida la cadena min()/max() a las funciones(Thomas)
Extendidas nuevo tipo de coersiones para agregaciones(Thomas)
Nueva contribucion moddatetime (Terry)
Actualizacion a pgaccess 0.96(Constantin)
Aņadida rutina para byte unico en tipo de caracter "char"(Thomas)
Mejorada la funcion substr()(Thomas)
Mejorado el manejo de  multi-byte (Tatsuo)
Control de concurrencia Multi-version /MVCC(Vadim)
Nuevo modo Serialized(Vadim)
Correcion para tablas por encima de 2gigs(Peter)
Nuevo SET TRANSACTION ISOLATION LEVEL(Vadim)
Nuevo LOCK TABLE IN ... MODE(Vadim)
Actualizado el driver ODBC(Byron)
Nuevo tipo de datos NUMERIC(Jan)
Nueva SELECT FOR UPDATE(Vadim)
Manejo de "NaN" e "Infinity" para valores de entrada(Jan)
Mejorado el manejo de date/year(Thomas)
Mejorado el manejo de conexiones con el motor de base de datos(backend)(Magnus)
Nuevas opciones ELOG_TIMESTAMPS y la opcion USE_SYSLOG para ficheros de registro(Massimo)
Nueva opcion TCL_ARRAYS (Massimo)
Nueva INTERSECT y EXCEPT(Stefan)
Nuevo pg_index.indisprimary para restro de claves primarias(D'Arcy)
Nuevas opcion pg_dump para permitir el borrado de tablas antes de su creacion(Brook)
Acelaracion de las rutinas de salida de registro(Tom)
Nuevo nivel de aislamiento de READ COMMITTED (Vadim)
Nuevas tablas/indices TEMP (Bruce)
Se evita el ordenamiento si el resultado ya esta ordenado(Jan)
Nueva optimizacin para la asignacion de memoria(Jan)
Se permite a psql ejecutar \p\g(Bruce)
Se permiten multiples reglas de acciones(Jan)
Aņadida funcionalidad LIMIT/OFFSET (Jan)
Mejorado el optimizador cuando se unen un numero grande de tablas(Bruce)
Nueva introduccion a SQL de La Tesis de Doctorado de S. Simkovics(Stefan, Thomas)
Nueva introduccion a procesamiento del motor de base de datos (backend) de la Tesis de Doctorado de S. Simkovics(Stefan)
Mejorado el soporte para int8(Ryan Bradetich, Thomas, Tom)
Nuevas rutinas para convertir entre tipos int8 y text/varchar(Thomas)
Nuevos planes arboreos, donde se unen meta-tablas(Bruce)
Habilitadas consultas por la mano derecha por defecto(Bruce)
Se permite que el numero maximo de procesos en servidor (backends) se parametrice en el momento de la configuracion
      (--with-maxbackends and postmaster switch (-N backends))(Tom)
GEQO por defecto tenga ahora 10 tablas porque el optimizador se acelera(Tom)
Se permite NULL=Var para MS-SQL portabilidad(Michael, Bruce)
Modificados contrib check_primary_key() y consecuentemente "automatic" or "dependent"(Anand)
Se permite que psql \d en una vista muestre la consulta(Ryan)
Se acelera el LIKE(Bruce)
Correciones/prestaciones Ecpg , vease fichero src/interfaces/ecpg/ChangeLog(Michael)
Correciones/prestacines JDBC , vease src/interfaces/jdbc/CHANGELOG(Peter)
Se hace que el operador % tenga precedencia como /(Bruce)
Aņadida la nueva opcion postgres -O para permitir cambios en la estructura de tablas del sistema(Bruce)
Actualizado el script contrib/pginterface/findoidjoins (Tom)
Major aceleracion en vacuum de lineas borradas con indices(Vadim)
Se permitte la ejecucion de diferentes versiones de funciones no-SQL basadas en argumentos(Tom)
Aņadida la opcion -E que muestra las consultas actuales enviadas pro \dt y sus amigos(Masaaki Sakaida)
Aņadido numero de version en los banners de arranque de psql(Masaaki Sakaida)
Nuevo contrib/vacuumlo que elimina objetos grandes no referenciados(Peter)
Nueva inicializacion para tamaņos de tablas, asi las tablas no vacuumeadas se ejecutan mejor(Tom)
Mejorados los mensajes de error cuando una conexion es rechazada(Tom)
Soporte para array de campos char() y varchar() (Massimo)
Revision del codigo has para incrementar fiabilidad y prestaciones(Tom)
Actualizacion a PyGreSQL 2.4(D'Arcy)
Cambiadas las opciones de depuracion asi -d4 y -d5 producen diferentes displays de nodos(Jan)
nuevas opciones: pretty_plan, pretty_parse, pretty_rewritten(Jan)
Mejor optimizacion de estadisticas para los accesos a tablas del sistema(Tom)
Mejor manejo de tamaņo de bloque no por defecto(Massimo)
Mejorado el optmizador de comsumo de memoria GEQO(Tom)
UNION soporta ahora ORDER BY de columnas que no estan en la lista de target(Jan)
Mejoras grandes en libpq++ (Vince Vielhaber)
pg_dump utiliza ahora -z(ACL's) por omision(Bruce)
cache de procesos en servidor (backend), aceleracion de memoria(Tom)
Se hace que pg_dump lo haga todo en una transaccion snapshot(Vadim)
correcion de perdidas de memoria para objetos grandes, correccion para pg_dumping(Tom)
INET escribe ahora respecto a la netmask para comparaciones
Se hace que VACUUM ANALYZE solo utilice un readlock(Vadim)
Se permiten vistas (VIEW) en UNIONS(Jan)
pg_dump puede generar ahora snapshots consistentes en bases de datos activas(Vadim)

Cambios en el Arbol Fuente
-------------------
Mejorado el emparejamiento en el porte(Tom)
Correcciones de portabilidad para SunOS
Aņadido porte para NT/Win32 del proceso en el servidor (backend) y se habilita carga dinamica(Magnus and Daniel Horak)
Nuevo porte a Cobalt Qube(Mips) ejecutando Linux(Tatsuo)
Porte a NetBSD/m68k(Mr. Mutsuki Nakajima)
Porte a NetBSD/sun3(Mr. Mutsuki Nakajima)
Porte a NetBSD/macppc(Toshimi Aoki)
Correccion para configuracion de tcl/tk(Vince)
Eliminada la clave CURRENT para consultas por regla(Jan)
carga dinamica en NT ahora funciona(Daniel Horak)
Aņadido soporte para ARM32(Andrew McMurry)
Mejor soporte para HPUX 11 y Unixware
Mejorado el manejo de ficheros para ser mas uniforme, previene lagunas en los descriptores de ficheros.(Tom)
Nuevos comandos de instalacion para plpgsql(Jan)