RE: Crosstab

From: Pedro PG <pedropg(at)outlook(dot)com>
To: Jorge Tornero <jtorlistas(at)gmail(dot)com>, "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Crosstab
Date: 2014-03-18 22:21:28
Message-ID: BLU180-W42F5B5D5480B9AE8D5242AA77C0@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Bueno, lo solucione de la siguiente manera:
--Declaro la variableDECLARE txt_vista text;
--Elimino la vistaDROP VIEW IF EXISTS vw_menu_lista_detalle;--Elimino la tabla generada por la funcion pivotmytableDROP TABLE IF EXISTS tb_x_permiso_tmp;
--Ejecuto la funcion para crear la tablaPERFORM pivotmytable('tb_x_permiso','tb_x_permiso_tmp','idmenu','id','id','count',FALSE,'asc',FALSE);
--Asigno la instruccion SQL a la variabletxt_vista := 'CREATE VIEW vw_menu_lista_detalle AS SELECT vw_menu_lista.*, tb_x_permiso_tmp.* FROM vw_menu_lista LEFT OUTER JOIN tb_x_permiso_tmp ON ( vw_menu_lista.id = tb_x_permiso_tmp.idmenu ) ORDER BY key, orden';
--Ejecuto el contenido de la variableEXECUTE txt_vista;
Un detalle: al momento de ejecutar la función tuve que poner todos los parámetros, si no los pongo me aparece el mensaje "la función no existe".
Gracias Jorge por tu ayuda. Tu aporte me fue de mucha utilidad.Saludos.
Bach. Ing. de Sistemas Pedro Ricardo Pejerrey Gómez------------------------------------------------------------------------Área de TI en Provias Nacional - Zonal Piura - TumbesAnalista Programador && DBAFreeLancer MVC

Date: Tue, 18 Mar 2014 23:03:48 +0100
Subject: Re: [pgsql-es-ayuda] Crosstab
From: jtorlistas(at)gmail(dot)com
To: pedropg(at)outlook(dot)com

¡Madre mía! Lo que dices me suena... como a chino... es que yo no tengo un nivel demasiado allá de postgres... ¿podrías poner tu solución en la lista?
De momento, he actualizado la función y, al menos, puedes crear vistas directamente en lugar de tablas. De esta manera, al menos la tabla cruzada se actualiza al modificar la original

Un saludo
JOrge Tornero

El 18 de marzo de 2014, 17:52, Pedro PG <pedropg(at)outlook(dot)com> escribió:

Hola Jorge, gracias por tu respuesta, al final solucione mi problema poniendo la vista en una variable text y ejecutandolo posteriormente con un EXECUTE.
En fin ... gracias por tu aporte, esta muy buena tu función, seguramente me estaré contactando contigo luego.

Gracias nuevamente y saludos.

Bach. Ing. de Sistemas Pedro Ricardo Pejerrey Gómez------------------------------------------------------------------------
Área de TI en Provias Nacional - Zonal Piura - TumbesAnalista Programador && DBAFreeLancer MVC

Date: Tue, 18 Mar 2014 17:12:48 +0100
Subject: Re: [pgsql-es-ayuda] Crosstab
From: jtorlistas(at)gmail(dot)com

To: pedropg(at)outlook(dot)com; pgsql-es-ayuda(at)postgresql(dot)org

Hola, Pedro:

Voy a probar a añadir un parámetro a la función, por ejemplo as_view que sea un booleano que, mediante un if..., si está a true la función haga un create view en lugar del create table que está al final de la función (linea 232 del código fuente)

No sé si funcionaría y te serviría... ya veremos, seguimos en contacto

( Y si alguien se anima a probar, mejor... sobre todo los que saben bien de esto)

Saludos para todos
Jorge Tornero

Pedro PG <pedropg(at)outlook(dot)com> wrote:

Hola Jorge, gracias por el aporte me es de gran utilidad, hay un detalle ... la funcion pivotmytable la he colocado en un trigger, el problema es que la tabla resultante (generada por la funcion pivotmytable) la uso en una vista ....

Como puedo hacer para que la función vacíe la tabla en el caso exista e inserte los nuevos registros ... he intentado colocar un DROP TABLE antes de ejecutar pivotmytable pero como la tabla resultante es usada en un VIEW no lo permite ...

Gracias.
Hola, Pedro,

pues directamente creo que no, aunque hay soluciones por ahí. Yo, hace
tiempo, posteé en la lista una solución mía. Lo malo/bueno es que
necesita de plpython instalado para funcionar, y bajo mi punto de vista
(yo uso postgresql como una suerte de access bien hecho, es decir,
servidor local para uso propio) funciona de maravilla, pero quizá un
experto de la lista podría dar su opinión sobre su uso en entornos
"reales" (servidores de bases de datos de verdad, vamos)

El código de la función se encuentra en:

https://github.com/jtornero/pivotmytable

Y unas instrucciones de uso razonables las puedes encontrar en:

http://imasdemase.com/en/programacion-2/tablas-cruzadas-en-postgresql-pivotmytable/

Recibe un cordial saludo
Bach. Ing. de Sistemas Pedro Ricardo Pejerrey Gómez------------------------------------------------------------------------
Área de TI en Provias Nacional - Zonal Piura - TumbesAnalista Programador && DBAFreeLancer MVC

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message marcelo mendoza 2014-03-19 12:03:22 Recibir datos de un gps
Previous Message Gilberto Castillo 2014-03-18 19:31:14 Re: Vistas Materializadas