Re: BUG #13805: plpgsql execute using expression evaluate wrong

Поиск
Список
Период
Сортировка
От David Gould
Тема Re: BUG #13805: plpgsql execute using expression evaluate wrong
Дата
Msg-id 20151207220847.4da716e1@engels
обсуждение исходный текст
Ответ на BUG #13805: plpgsql execute using expression evaluate wrong  (amutu@amutu.com)
Ответы Re: BUG #13805: plpgsql execute using expression evaluate wrong  (Jov <amutu@amutu.com>)
Re: BUG #13805: plpgsql execute using expression evaluate wrong  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-bugs
On Tue, 08 Dec 2015 03:54:44 +0000
amutu@amutu.com wrote:


> execute $$select ('$1 month')::interval $$ into rt2 using n;
> raise notice 'rt2 : %',rt2;
>=20
> execute $$select ($1::varchar || ' month')::interval $$ into rt2 using n;
> raise notice 'rt2 : %',rt2;
> end;

> NOTICE: rt2 : 1 mon-----wrong=EF=BC=8Cshould 4 mons
> NOTICE: rt2 : 4 mons

You may have found a bug, but if so, it is not where you think it is. The
expression: '$1 month' is a text literal. PL/PGsql does not interpolate $n
like a shell, it only does the substitution where a variable could
ordinarily exist.

However, it does seem a little odd that the literal syntax for
intervals accepts the '$':

postgres=3D# select '$1 month'::interval, '$4 month'::interval;
 interval | interval=20
----------+----------
 1 mon    | 4 mons
(1 row)

I would have expected it to raise an error. The documentation does not shed
any light on this. Anyone?

-dg=20

--=20
David Gould              510 282 0869         daveg@sonic.net
If simplicity worked, the world would be overrun with insects.

В списке pgsql-bugs по дате отправления:

Предыдущее
От: amutu@amutu.com
Дата:
Сообщение: BUG #13805: plpgsql execute using expression evaluate wrong
Следующее
От: Jov
Дата:
Сообщение: Re: BUG #13805: plpgsql execute using expression evaluate wrong