Re: [GENERAL] Dblink vs calling a function that returns void

2010-03-30 Thread Merlin Moncure
On Mon, Mar 29, 2010 at 12:12 PM, Tom Lane t...@sss.pgh.pa.us wrote:
 Boszormenyi Zoltan z...@cybertec.at writes:
 I need to call a function via dblink that returns a void, i.e.
 technically nothing.

 You're overthinking the problem.  Imagine void is just a datatype
 (which it is...)  This should work:

but it isn't! void returning functions may not be queried over the
binary protocol (why?), so if you used dblink w/void returning
functions, and dblink later supported binary results, your code would
break (i'm sure such a thing would be optional, but the point stands).

merlin

-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


Re: [GENERAL] Dblink vs calling a function that returns void

2010-03-30 Thread Tom Lane
Merlin Moncure mmonc...@gmail.com writes:
 You're overthinking the problem.  Imagine void is just a datatype
 (which it is...)  This should work:

 but it isn't! void returning functions may not be queried over the
 binary protocol (why?),

Probably because we never made a send function for type void.  Might
be worth fixing someday.

regards, tom lane

-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[GENERAL] Dblink vs calling a function that returns void

2010-03-29 Thread Boszormenyi Zoltan
Hi,

I need to call a function via dblink that returns a void, i.e.
technically nothing.

=# select public.dblink_exec('import', 'SELECT
import.add_one_word(''word'', true)');
ERROR:  statement returning results not allowed

=# select * from public.dblink('import', 'SELECT
import.add_one_word(''word'', true)') as x();
ERROR:  syntax error at or near )
LINE 1: ...ort', 'SELECT import.add_one_word(''iphon'', true)') as x();

=# select public.dblink('import', 'SELECT import.add_one_word(''word'',
true)') as x(x void);
ERROR:  syntax error at or near (
LINE 1: ...'SELECT import.add_one_word(''iphon'', true)') as x(x void);

And, although RETURNS VOID is indistinguishable from returning a NULL:

=# select * from public.dblink('import', 'SELECT
import.add_one_word(''word'', true)') as x(x int);
ERROR:  invalid input syntax for integer: 

So, how can I do it? Besides modifying the interface of the function,
say RETURNS int4 and using PG_RETURN_NULL()?

Best regards,
Zoltán Böszörményi

-- 
Bible has answers for everything. Proof:
But let your communication be, Yea, yea; Nay, nay: for whatsoever is more
than these cometh of evil. (Matthew 5:37) - basics of digital technology.
May your kingdom come - superficial description of plate tectonics

--
Zoltán Böszörményi
Cybertec Schönig  Schönig GmbH
http://www.postgresql.at/


-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


Re: [GENERAL] Dblink vs calling a function that returns void

2010-03-29 Thread Tom Lane
Boszormenyi Zoltan z...@cybertec.at writes:
 I need to call a function via dblink that returns a void, i.e.
 technically nothing.

You're overthinking the problem.  Imagine void is just a datatype
(which it is...)  This should work:

select * from public.dblink('import', 'SELECT import.add_one_word(''word'', 
true)') as x(x void);

regards, tom lane

-- 
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general