Re: Sumar TIMESTAMP + TIME desde el código fuente

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Luis D(dot) García <ldgarc(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Sumar TIMESTAMP + TIME desde el código fuente
Date: 2007-03-30 12:42:11
Message-ID: 20070330124211.GA4215@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Luis D. García escribió:

> Ahora, las funciones get_rel_frequency_measure() y
> get_rel_last_valid_time(), son funciones que extraen los valores del
> interval y el timestamp respectivamente, los cuales están almacenados
> en el pg_class como (CHAR *). Ahora, al cambiarlos a forma interna por
> medio de las funciones timestamp_in e interval_in, los valores
> resultantes son vacíos (NULL), y por ende, el valor resultante de
> timestamp_pl_interval también.
>
> Tienes alguna idea de por qué sucede esto???

Huh, supongo que hay bugs en estas funciones (get_rel_frequency_measure,
etc) :-)

> >Esto obviamente no va a funcionar. Ademas, usar "char *" creo que es un
> >poco torpe. Considera usar el tipo TimestampTz para guardar el
> >timestamp. Ademas, si lo que quieres hacer con el TIME es sumarselo a
> >un TIMESTAMP, entonces es mala idea usar TIME; debes usar Interval.
> >Para almacenarlo, usa el tipo Interval (en C).
>
> 1. Almacenar los valores como TIMESTAMP e INTERVAL directamente: hacer
> esto me llevaría a realizar una gran cantidad de cambios en funciones
> que ya desarrollé en los últimos meses, por lo cual me sería bastante
> complicado cambiar a estos tipos de datos.

Sugiero que cambiar los char * a los tipos internos, si bien te va a
tomar bastante trabajo, va a ser mas facil. El trabajo que tienes que
hacer es solamente tedioso, no dificil. En cambio, corregir los bugs y
asegurarte que lo que tienes es correcto, no va a ser nada de tedioso
pero si muy dificil.

No se si ya te comente, pero hay una funcion TimestampTzPlusMilliseconds()
(o algo asi) que toma un TimestampTz y un numero de milisegundos y
entrega la suma. Es mucho mas sencillo de usar, y por cierto muchisimo
mas eficiente, que todo la maquinaria de timestamp_in() y todo el resto
que estaba usando antes!

Recuerda lo que decia Fred Brooks: "prepare to throw one away; you will
anyway" (o algo por ahi). Es decir, la primera version del codigo
siempre la vas a tener que botar y reescribirla completamente. Si no lo
haces, vas a gastar mucho de tu tiempo en hacerlo de a poco de todas
formas, lo cual va a ser mas dificil, mas doloroso, y te va a tomar mas
tiempo.

> 2. Utilizar en vez de TIMESTAMP, TIMESTAMP_TZ: esto no puedo hacerlo
> para estas funciones, ya que por la definición con la cual estoy
> trabajando (de acuerdo a los requerimientos planteados) se estará
> trabajando con TIMESTAMP sin TIME ZONE.

Aca ya es asunto tuyo, era solamente una sugerencia.

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Mario Gonzalez 2007-03-30 12:43:26 Re: Importar fichero CSV
Previous Message Marcos Renedo 2007-03-30 12:37:30 Re: creacion de triggers