doing %-expansion in plpgsql RAISE USING

Started by Alvaro Herreraover 16 years ago4 messageshackers
Jump to latest
#1Alvaro Herrera
alvherre@2ndquadrant.com

Hi,

It seems there's no way to do %-expansion in plpgsql when one is using
RAISE USING:

alvherre=# create or replace function f () returns void language plpgsql as $$
begin
raise using message = 'hello %' || 'world';
return;
end;
$$;
CREATE FUNCTION
alvherre=# select f();
ERROR: hello %world

I would like the % to be expanded to some argument, but obviously
there's no way to pass the arguments that it should expand to. We could
do something like

RAISE USING message = 'hello %st %', args = 1, 'world'

but this is obviously going to be difficult, if not impossible, to
implement in the grammar. Perhaps
RAISE USING message = 'brave %st %', args = (1, 'world')

Thoughts?

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Alvaro Herrera (#1)
Re: doing %-expansion in plpgsql RAISE USING

Alvaro Herrera <alvherre@commandprompt.com> writes:

It seems there's no way to do %-expansion in plpgsql when one is using
RAISE USING:

That's intentional. Just use string concatenation if you need a
run-time-variable message.

regards, tom lane

#3Pavel Stehule
pavel.stehule@gmail.com
In reply to: Alvaro Herrera (#1)
Re: doing %-expansion in plpgsql RAISE USING

Hello

2009/8/4 Alvaro Herrera <alvherre@commandprompt.com>:

Hi,

It seems there's no way to do %-expansion in plpgsql when one is using
RAISE USING:

alvherre=# create or replace function f () returns void language plpgsql as $$
begin
 raise using message = 'hello %' || 'world';
 return;
end;
$$;
CREATE FUNCTION
alvherre=# select f();
ERROR:  hello %world

parameter is expression, so we could to define operator % like

text % any

% isn't defined for text so this is possible. This operator should be
generally used, not only in RAISE attribs.

I would like the % to be expanded to some argument, but obviously
there's no way to pass the arguments that it should expand to.  We could
do something like

RAISE USING message = 'hello %st %', args = 1, 'world'

RAISE USING message = 'hello %st %' % (1, 'world')

??

or simple use custom variadic function

RAISE USING message= subst('hello %st %', 1, 'world')

good example for parser hook :)

Pavel

Show quoted text

but this is obviously going to be difficult, if not impossible, to
implement in the grammar.  Perhaps
RAISE USING message = 'brave %st %', args = (1, 'world')

Thoughts?

--
Alvaro Herrera                                http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

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

#4Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Tom Lane (#2)
Re: doing %-expansion in plpgsql RAISE USING

Tom Lane wrote:

Alvaro Herrera <alvherre@commandprompt.com> writes:

It seems there's no way to do %-expansion in plpgsql when one is using
RAISE USING:

That's intentional. Just use string concatenation if you need a
run-time-variable message.

Yes, I can do that, but it's really ugly and gets unmaintainable
quickly.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support