Re: sincronizar funciones en diferentes esquemas

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Mario Reyna <mayoreyna(at)hotmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: sincronizar funciones en diferentes esquemas
Date: 2010-02-09 01:38:41
Message-ID: 20100209013841.GB4113@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Mario Reyna escribió:
>
> Hola.. este es mi primer post..

Hola, bienvenido (otra vez)

> alguien que me puede ayudar
> por necesidades de diseño se cuenta con "n" esquemas en postgresql 8.4 que se comportan exactamente igual (cuentan con las mismas tablas, funciones etc);
>
> La idea principal es que las funciones que se desarrollen, sean ejecutadas en automaticos, en los esquemas almacenados en una tabla .

Este diseño es muy malo, porque te está forzando a cometer cosas como la
que sugieres.

> mi idea inicial seria hacer una funcion en pl/pgsql
> que se posicione atravez del search_path y compile le funcion.
> usando el commando de la consula \i

\i es una orden de psql, la cual es una aplicación cliente; como tal, no
puede funcionar en plpgsql, que es una implementación totalmente del
lado del servidor.

Si quieres hacer una función que escriba a otra función (cosa que no te
recomiendo; más bien, deberías replantear tu diseño para evitar estas
cosas), puedes hacer algo de este estilo:

create or replace function toastcheck_writer(text) returns text language plpgsql as $ff$

BEGIN

/* our function header */
func = $f$
CREATE OR REPLACE FUNCTION toastcheck__$f$ || $1 || $f$() RETURNS void LANGUAGE plpgsql AS $$
DECLARE
BEGIN
PERFORM 'some sin';
$f$;

/* And this is our constant footer */
func := func || $f$ col, sqlerrm;
END;
END LOOP;
END;
$$;
$f$;

RETURN func;
END;
$ff$;

Esto de arriba, lo que hace es retornar un string que contiene un CREATE
FUNCTION para crear una nueva función. Si quieres puedes usar 'EXECUTE
func' al final en lugar del RETURN, y en ese caso se va a ejecutar (y
por lo tanto se creará esa función).

Te lo planteo sólo como una idea, pero no debes creer ni remotamente que
te estoy sugiriendo usarla.

--
Alvaro Herrera Vendo parcela en Valdivia:
http://valdivia.vivastreet.cl/loteos-lotes+valdivia/parcela-en-cabo-blanco--valdivia/19288372
"La verdad no siempre es bonita, pero el hambre de ella sí"

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2010-02-09 01:48:07 Re: Vacuum: pg_statistic_relid_att_index, duplicate key violates
Previous Message Alvaro Herrera 2010-02-09 00:46:22 Re: Instalación postgresql-8.1 en Ubuntu 9.10