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
|
| Список | 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 по дате отправления: