Re: problema con dblink

From: Juan <smalltalker(dot)marcelo(at)gmail(dot)com>
To: Jaime Casanova <jaime(at)2ndquadrant(dot)com>
Cc: Anthony Rafael Sotolongo Leon <asotolongo(at)uci(dot)cu>, Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: problema con dblink
Date: 2012-11-15 17:10:13
Message-ID: CAKizN9zkN8PF-3XpFCuNCq6KbkgrhgWVauRpbpmw6Z1bgrBKSA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Jaime , lista

Jaime, no se si entendi tu respuesta
el escenario es muy simple

declare sql varchar = null ;
...

sql = 'perform update_or_insert_nacionalidades( ' ;
sql = sql || quote_literal( v_cod2 ) || ' ::text ,' ;
sql = sql || quote_literal(v_nombre ) || ' ::text );' ;

/* * sql CONTIENE ESTO: perform update_or_insert_nacionalidades( '22'
::text ,'Colombiana' ::text ); * */

perform dblink_exec('testconnect'::text , sql ::text ); --> FALLA... (
VER ERROR)
perform dblink_disconnect('testconnect'::text);

ESTE ES EL *ERROR*:

NOTICE: 'perform update_or_insert_nacionalidades( '22' ::text
,'Colombiana' ::text );'

ERROR: syntax error at or near "perform"
CONTEXT: Error occurred on dblink connection named "unnamed": could not
execute command.
SQL statement "SELECT dblink_exec('testconnect'::text , sql ::text )"
PL/pgSQL function "tr_datos_dominio" line 113 at PERFORM

ya probe con select. en lugar de perform
tambien probe que al invocarlo use select.

perform 'select update_or_insert_nacionalidades( '22' ::text ,'Colombiana'
::text )' ;

Cualquier idea sera agradecida.
saludos

jmdc

2012/11/15 Jaime Casanova <jaime(at)2ndquadrant(dot)com>

> 2012/11/14 Juan <smalltalker(dot)marcelo(at)gmail(dot)com>
> >
> > Lista , Anthony
> > ))
> > si yo pregunto por lo que no sea select ,como llamar a una funcion,
>
> lo que pasa es que en postgresql se llama a una funcion a traves de SELECT.
> PERFORM es intercambiable con SELECT pero: 1) descarta resultados y 2)
> solo es reconocido dentro de codigo plpgsql (osea dentro de funciones)
>
> podrias escribir una funcion y adentro ejecutar: PERFORM * FROM tabla
>
> > tambien una cosa de la que se queja el dblink es que si pongo un select
> > me dice algo como que no puede recibir resultado... o algo asi, ahora
> estoy
> > lejos de esa pc.
>
> eso es porque debes indicarle que valores regresa y que tipos de datos son
>
> SELECT * FROM dblink() as foo(arg1 tipo1, arg2 tipo2)
>
> > ademas por eso y porque busque en el api, no encontre que dblink_exec
> devuelva algo, sino es
> > el error basado en un parametro del dblink_exec( stringToExecute,
> parametroBooleanQuediceElErrorOno)
> > o algo asi ahora no tengo la pc a mano.
> >
>
> dblink_exec retorna el estado en formato texto. parece que es mas para
> cosas que no retornan valores como INSERT, UPDATE, DELETE.
> para selects que retornan un valor debes usar dblink(), parece legal
> sin embargo usar dblink_exec() con una llamada a una funcion que
> retorne void, algo como:
>
> SELECT dblink_exec('SELECT funcion(1, 1);');
>
> --
> Jaime Casanova www.2ndQuadrant.com
> Professional PostgreSQL: Soporte 24x7 y capacitación
> Phone: +593 4 5107566 Cell: +593 987171157
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Rodriguez Fernando 2012-11-15 17:15:32 Re: error al restaurar una BD
Previous Message Yanier Barbier Montoya 2012-11-15 16:49:27 error al restaurar una BD