Postgres95 Beta 0.03

Lista Detallada de Cambios

Cambios incompatibles:
 * BETA-0.3 ES INCOMPATIBLE CON BASES DE DATOS CREADAS CON VERSIONES PREVIAS
   (debido a cambios en el catálogo del sistema y a cambios en la estructura de los índices).
 * las dobles comillas (") se desprecian como un carácter de limitación para cadenas literales;
   necesitarás convertirlas a apostrofes (').
 * el nombre de los agregados (como int4sum) se renombran de acuerdo con el SQL
   estándar (por ejemplo sum).
 * la sintaxis CHANGE ACL se reemplaza por la sintaxis GRANT/REVOKE.
 * los literales flotantes (como 3.14) son ahora del tipo float4 (en lugar del float8
   de versiones anteriores); deberá realizar un transformado de tipos si su instalación
   depende de que siga siendo float8.
   ¡Si rechaza realizar el transformado de tipos, y asigna un literal flotante a un
   campo de tipo float8, es posible que los valores almacenados sean incorrectos!
 * se ha recompuesto totalmente LIBPQ para que las aplicaciones cliente (frontend) puedan
   conectarse a multiples servidores (backend).
 * el campo usesysid de pg_user se ha cambiado de int2 a int4 para permitir mayores
   rangos de identificadores de usuarios de Unix.
 * los portes a los sistemas operativos netbsd/freebsd/bsd se han consolidado en un
   unico port derivado de BSD44. (Gracias a Alistair Crooks).

Cumplimento del estándar SQL (los siguientes detalles cambian para hacer a posgres95
más ajustado al estándar SQL-92):
 * se han incluido los siguientes tipos SQL: smallint, int(eger), float, real,
   char(N), varchar(N), date y time.

   Los siguientes son alias de los tipos postgres existentes:
                smallint -> int2
                integer, int -> int4
                float, real  -> float4
   char(N) y varchar(N) se han implementado como tipos text truncados.
 Además, char(N) rellena a blancos el espacio no utilizado.
 * se utiliza el apóstrofe (') para limitar cadenas literales; " (además de \') se soportan
   para permitir insertar un único límite en una cadena.
 * se utilizan los nombres de agregados de SQL estándar (MAX, MIN, AVG, SUM, COUNT)
   (También, se pueden ahora sobrecargar los agregados, es decir, puede usted definir
    su propio agregado MAX para disponer de un tipo definido por el usuario).
 * se ha eliminado CHANGE ACL. Se añade la sintaxis GRANT/REVOKE.
   - Se pueden dar privilegios a un grupo utilizando la palabra clave "GROUP".
            Por ejemplo:
                         GRANT SELECT ON mi_tabla TO GROUP mi_grupo;
            La palabra clave 'PUBLIC' también está soportada para autorizar a
            todos los usuarios.

      Sólo de pueden otorgar o retirar privilegios a un usuario o grupo cada vez.

      "WITH GRANT OPTION" no está soportado. Sólo los propietarios de clases pueden
      cambiar el control de acceso.

   - El control de acceso de defecto es autorizar a los usuarios sólo a leer.
     Deberá usted autorizar explícitamente el acceso en inserción/actualización a
     los usuarios. Para cambiar esto, deberá modificar la línea
                src/backend/utils/acl.h
     que define ACL_WORLD_DEFAULT

Errores corregidos:
 * se ha corregido el error segun el cual los agregados de tablas vacías no
   trabajaban adecuadamente. Ahora, los agregados ejecutados sobre tablas vacías
   devuelven las condiciones iniciales de los agregados. Así, COUNT de una tabla
   vacía devuelve correctamente el valor 0. MAX/MIN de una taba vacía devolverá
   una tupla de valor NULL.
 * se permite el uso de \; dentro del monitor.
 * el mecanismo de notificación asincrono LISTEN/NOTIFY ya trabaja.
 * NOTIFY en el cuerpo de las reglas de acción ya trabaja.
 * ya funcionan los índices hash, y los método de acceso en general deberían
   funcionar mejor. La creación de grandes índices btree debería ser mucho más
   rápida. (Gracias a Paul Aoki).

Otros cambios y potenciaciones:
 * se añade la instrucción EXPLAIN utilizada para analizar el plan de ejecución
   de una consulta. (es decir: "EXPLAIN SELECT * FROM EMP" muestra el plan de
   ejecución de la consulta).
 * los mensajes WARN y NOTICE ya no muestran tiempo de ejecución en sí mismos.
   Para activar el tiempo de ejecución en los mensajes de error, descomente en
       src/backend/utils/elog.h:
   la línea
        /* define ELOG_TIMESTAMPS */
 * En una violación del control de acceso, se dará el mensaje
        "Either no such class or insufficient privilege"
   Este es el mismo mensaje que se devuelve cuando no se encuentra una clase. Esto
   disuade a los usuarios no privilegiados de sospechar la existencia de clases
   privilegiadas.
 * se han hecho algunos cambios adicionales en el catálogo del sistema que no son
   visibles para el usuario.

cambios en libpgtcl:
 * se añade la opción -oid al comando de tcl "pg_result". pg_result -oid devolverá
   el oid de la última tupla insertada.  Si el último comando no fue una inserción,
   pg_result -oid devuelve "".
 * el interface de objetos largos está utilizable como comandos tcl pg_lo*:
   pg_lo_open, pg_lo_close, pg_lo_creat, etc.

Potenciaciones de la Portabilidad y Nuevas Migraciones:
 * Se han limpiado problemas con flex/lex.  Ahora, se debería poder utilizar flex
   en lugar de lex en cualquier plataforma.  Ya se harán asumciones sobre la forma
   de analizador sintáctico elegido basadas en la plataforma que utilice.
 * Ahora se soporta la migración a Linux-ELF. Se han probado varias configuraciones:
   Se sabe que la siguiente configuración funciona:
        kernel 1.2.10, gcc 2.6.3, libc 4.7.2, flex 2.5.2, bison 1.24
   todo en formato ELF.

Nuevas utilidades:
 * ipcclean añadido a la distribución
   habitualmente no se necesita ejecutar ipcclean, pero si cae su servidor y
   deja segmentos de memoria ocupados, ipcclean los limpiara para usted.

Nueva documentación:
 * se ha revisado el manual del usuario y se ha añadido la documentación de libpq.