Re: 7.1.2 release

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: 7.1.2 release
Дата
Msg-id 2600.989558902@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: 7.1.2 release  (Philip Warner <pjw@rhyme.com.au>)
Ответы Re: 7.1.2 release  (Philip Warner <pjw@rhyme.com.au>)
Список pgsql-hackers
Philip Warner <pjw@rhyme.com.au> writes:
> Yes - it's waiting on the problem Zoltan reported (the select from
> pg_rewrite etc). I can't reproduce the problem on any of my DBs.

I've just realized that the problem is a lot simpler than it appears.
The given string is too long for a NAME:

regression=# select ('_RET' || 'szallitolevel_tetele_ervenyes')::name;           ?column?
---------------------------------_RETszallitolevel_tetele_erveny
(1 row)

When you write
select oid from pg_rewrite where        rulename='_RETszallitolevel_tetele_ervenyes'

the unknown-type literal is coerced to NAME --- ie truncated --- and
then the comparison works.  But when you write
select oid from pg_rewrite where        rulename='_RET' || 'szallitolevel_tetele_ervenyes'

the result of the || will be type TEXT not type NAME.  So the rulename
gets promoted to TEXT and texteq is used ... with the result that
_RETszallitolevel_tetele_ervenye does not match
_RETszallitolevel_tetele_ervenyes.

Solution: don't use ||, or explicitly cast its result to NAME:
select oid from pg_rewrite where        rulename=('_RET' || 'szallitolevel_tetele_ervenyes')::name
        regards, tom lane


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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: 7.1.2 release
Следующее
От: Klaus Reger
Дата:
Сообщение: Re: Converting PL/SQL to PL/PGSQL