Uso de "implicit cast"

From: Ruben Fitó <r(dot)fito(at)ubiquat(dot)com>
To: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Uso de "implicit cast"
Date: 2019-08-08 09:58:39
Message-ID: CANiYpQx+9sRP2DCdus17wr99HwbEytdodEuCGL4H4RGBgUH=sg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola lista,

Como siempre acudo en su ayuda para resolver algunos inconvenientes que me
estoy encontrando.

Cuando migramos de PG8.4 a PG9.3, nos dimos cuenta que teníamos que
instalar casts ya que creo que fueron suprimidos en nuevas versiones. Por
internet encontramos un script que nos los creaba . Tomamos esta opción
porque era más sencillo que revisar nuestros aplicativos.

Ahora llega el momento de eliminar esta antigua dependencia y nos gustaría
saber en qué debemos fijar-nos para agilizar este proceso de cambio. Os
explico alguna las curiosidades que hemos encontrado:

- En primer lugar los "implicit cast" que instalamos "se superponen" a
otros que puedan tener por defecto postgres, ya que nos hemos fijado que al
eliminarlos tenemos que hacerlo en cascada porque hay vistas que dependen
de él. Hemos hecho la prueba de volver a crear la vista sin "implicit
casts" y nos ha funcionado (en concreto había un _entero_::text en la
vista).
- Por otro lado, tal y como hemos creado los "implicit cast", según el
script:

CREATE FUNCTION pg_catalog.text(integer) RETURNS text STRICT IMMUTABLE
LANGUAGE SQL AS 'SELECT textin(int4out($1));';
CREATE CAST (integer AS text) WITH FUNCTION pg_catalog.text(integer) AS
IMPLICIT;

- Dicho de otro modo, se crea primero la función y después el cast.
Sabéis si puedo monitorizar estas funciones para que me creen un log y me
indique en qué "SQL" o "lo que sea" se está utilizando?

Finalmente, nuestra propuesta inicial de cambio es que:

- En el entorno de desarrollo se eliminen estos "implicit cast".
- De manera sistemática modifiquemos las query para crear los casts
explícitamente. Ya sea en funciones, triggers, vistas y por suspesto en
cada uno de nuestros aplicativos.
- Una vez superadas las pruebas, publicar los cambios en producción (de
manera paulatina claro) y al finalizar las publicaciones eliminar los
"implicit casts".

Nuestras preguntas son:

- Hay algún método para agilizar la detección del uso de "implicit
casts"? Es que creemos que modificar de manera sistemática todas las query
nos llevará mucho trabajo y ni tan siquiera podremos simular todas las
funcionalidades de nuestras aplicaciones. Del mismo modo con las funciones,
triggers y vistas de base de datos. Entendemos que se están usando en :
- Comparaciones
- Cada cast que haces
- En concatenaciones tipo: SELECT 'a' || 0;
- Me dejo algo?
- Finalmente, me recomendáis alguna alternativa o tenemos que pasar por
este suplicio, (jajaja)?

PD: Si me preguntáis por qué queremos eliminar los "implicit casts" que
instalamos es por que no puedo hacer "pg_upgrade" entre 9.5 y 11.4. A pesar
de poder hacer alguna "trampilla" para solucionarlo, nos hemos propuesto
eliminarlos.

Siento este rollo.

Gracias por adelantado.

--
*Ruben Fitó *
Software Engineer
[image: Ubiquat Technologies, SL]
r(dot)fito(at)ubiquat(dot)com <j(dot)catarineu(at)ubiquat(dot)com>
www.ubiquat.com
Tota la informació continguda en aquest document i arxius adjunts és
CONFIDENCIAL protegida per llei de secret comercial. Si l'ha rebut per
error, si us plau elimini'l i posi's en contacte amb l'emissor.

All information contained in this document and any attachments are
CONFIDENTIAL and protected under trade secret laws. If you receive this
message by mistake, please delete it and notify it immediately to the
sender.

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Horacio Miranda 2019-08-08 10:41:59 Re: Problemas de tamaño/recodificacion
Previous Message kernel 2019-08-08 09:49:12 Re: Problemas de tamaño/recodificacion