Version v1.01

Migración desde v1.0 a v1.01

Las siguientes notas son para beneficio de los usuarios que quieren migrar bases de datos de postgres95 1.0 a postgres95 1.01

Si está usted arrancando de nuevas con postgres95 1.01 y no necesita migrar bases de datos anteriores, no necesita usted leer lo siguiente.

Para que postgres95 versión 1.01 funcione con bases de datos creadas con postgres95 versión 1.0, se requieren los siguientes pasos:

  1. Fije la definición de NAMEDATALEN en src/Makefile.global a 16 y OIDNAMELEN a 20.

  2. Decida si quiere usted autenticación basada en el ordenador.

    1. Si lo hace, debe usted crear un fichero llamado "pg_hba" en su directorio de datos de nivel superior (típicamente el valor de su $PGDATA). src/libpq/pg_hba muestra un ejemplo de sintaxis.

    2. Si no quiere autenticación basada en el ordenador, puede usted comentar la línea

              HBA = 1
      en src/Makefile.global

      Compruebe que la autenticación basada en el ordenador se ha activado por defecto, y si no sigue los pasos A o B anteriores, el out-of-the-box 1.01 no le permitirá conectar a las bases de datos 1.0

  3. Compile e instale 1.01, pero NO ejecute el paso initdb.

  4. Antes de hacer ninguna otra cosa, pare su postmaster 1.0, y respalde su directorio $PGDATA existente.

  5. Fije su variable de entorno PGDATA a sus bases de datos 1.0, pero fijela de forma que los binarios 1.01 sean los que se utilizan.

  6. Modifique el fichero $PGDATA/PG_VERSION de 5.0 a 5.1

  7. Arranque un nuevo postmaster 1.01

  8. Añada las nuevas funciones y operadores incluidas en 1.01 sobre bases de datos 1.0. Esto se hace ejecutando el nuevo servidor 1.01 contra su propia base de datos 1.0, y aplicando las consultas unidas y salvadas en el fichero 1.0_to_1.01.sql. Se puede hacer facilmente desde psql. Si su base de datos se llama "testdb":

            % psql testdb -f 1.0_to_1.01.sql
    y entonces ejecute los siguientes comandos(copiar y pegar desde aquí):
    -- funciones incluidas añadidas que son nuevas en 1.01
    
    create function int4eqoid (int4, oid) returns bool as 'foo'
    language 'internal';
    create function oideqint4 (oid, int4) returns bool as 'foo'
    language 'internal';
    create function char2icregexeq (char2, text) returns bool as 'foo'
    language 'internal';
    create function char2icregexne (char2, text) returns bool as 'foo'
    language 'internal';
    create function char4icregexeq (char4, text) returns bool as 'foo'
    language 'internal';
    create function char4icregexne (char4, text) returns bool as 'foo'
    language 'internal';
    create function char8icregexeq (char8, text) returns bool as 'foo'
    language 'internal';
    create function char8icregexne (char8, text) returns bool as 'foo'
    language 'internal';
    create function char16icregexeq (char16, text) returns bool as 'foo'
    language 'internal';
    create function char16icregexne (char16, text) returns bool as 'foo'
    language 'internal';
    create function texticregexeq (text, text) returns bool as 'foo'
    language 'internal';
    create function texticregexne (text, text) returns bool as 'foo'
    language 'internal';
    
    -- funciones incluidas añadidas que son nuevas en 1.01
    
    create operator = (leftarg = int4, rightarg = oid, procedure = int4eqoid);
    create operator = (leftarg = oid, rightarg = int4, procedure = oideqint4);
    create operator ~* (leftarg = char2, rightarg = text, procedure = char2icregexeq);
    create operator !~* (leftarg = char2, rightarg = text, procedure = char2icregexne);
    create operator ~* (leftarg = char4, rightarg = text, procedure = char4icregexeq);
    create operator !~* (leftarg = char4, rightarg = text, procedure = char4icregexne);
    create operator ~* (leftarg = char8, rightarg = text, procedure = char8icregexeq);
    create operator !~* (leftarg = char8, rightarg = text, procedure = char8icregexne);
    create operator ~* (leftarg = char16, rightarg = text, procedure = char16icregexeq);
    create operator !~* (leftarg = char16, rightarg = text, procedure = char16icregexne);
    create operator ~* (leftarg = text, rightarg = text, procedure = texticregexeq);
    create operator !~* (leftarg = text, rightarg = text, procedure = texticregexne);

Lista Detallada de Cambios

Incompatibilidades:
 * 1.01 es compatible hacia atrás con 1.0 si el usuario sigue los pasos
   marcados en el fichero MIGRATION_from_1.0_to_1.01.
   En caso contrario, 1.01 no es compatible con la base de datos 1.0

Potenciaciones:
 * se añade PQdisplayTuples() a libpq y se modifican monitor y psql para que lo utilicen.
 * se añade la migración a NeXT (requiere la implementación de SysVIPC)
 * se añade la sintaxis CAST .. AS ...
 * se añaden las palabras clave ASC y DESC
 * se añade 'internal' como un posible lenguaje para CREATE FUNCTION
   las funciones internas son funciones en C que se han linkado estáticamente en el
   servidor de postgres.
 * se ha añadido un nuevo tipo "name" para identificadores de sistema (nombres de tablas,
   nombres de atributos, etc.)  Esto reemplaza al viejo tipo char16.
   La longitud del nombre se fija en la definición (#define)
   NAMEDATELEN de src/Makefile.global
 * un manual de referencia legible que describe el lenguaje de consulta.
 * se ha añadido un control de acceso basado en el ordenador.  Se utiliza un fichero de
   configuración ($PGDATA/pg_hba) para almacenar los datos de configuración.
   Si el control de acceso basado en el ordenador no es deseable, comente
   HBA=1 en src/Makefile.global.
 * cambiada la manipulación de reges para hacerla uniforme con el código regex de
   Henry Spencer sin mirar la plataforma.  Es código regex está incluido en la distribución.
 * añadidas funciones y operadores para expresiones regulares insensibles a las mayusculas.
   Los operadores son ~* y !~*.
 * pg_dump utiliza COPY en lugar de un bucle de SELECT para incrementar el rendimiento.

Errores corregidos:
 * corregido un error del optimizador que provocaba volcados de memoria cuando
   se utilizaban llamadas a funciones en comparaciones en la cláusula WHERE.
 * se cambian todos los usos de getuid a geteuid se modo que se utilicen los
   uids efectivos.
 * psql devuelve ahora status distintos de cero en los errores cuando se usa -c
 * se aplican los parches públicos 1-14