Re: Fwd: Proposal: variant of regclass

Поиск
Список
Период
Сортировка
От Andres Freund
Тема Re: Fwd: Proposal: variant of regclass
Дата
Msg-id 20140407163658.GG4161@awork2.anarazel.de
обсуждение исходный текст
Ответ на Re: Fwd: Proposal: variant of regclass  (Robert Haas <robertmhaas@gmail.com>)
Ответы Re: Fwd: Proposal: variant of regclass  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
On 2014-04-04 11:18:10 -0400, Robert Haas wrote:
> On Wed, Apr 2, 2014 at 11:27 PM, Amit Kapila <amit.kapila16@gmail.com> wrote:
> > Right, it will get reset in error. However still we need to free for missing_ok
> > case and when it is successful in getting typeid. So don't you think it is
> > better to just free once before calling LookupTypeName()?
> >
> > The code is right in it's current form as well, it's just a minor suggestion
> > for improvement, so if you think current way the code written is okay, then
> > ignore this suggestion.
> 
> I see.  Here's an updated patch with a bit of minor refactoring to
> clean that up, and some improvements to the documentation.
> 
> I was all ready to commit this when I got cold feet.  What's bothering
> me is that the patch, as written, mimics the exact behavior of the
> text->regproc cast, including the fact that the supplying an OID,
> written as a number, will always return that OID, whether it exists or
> not:
> 
> rhaas=# select to_regclass('1259'), to_regclass('pg_class');
>  to_regclass | to_regclass
> -------------+-------------
>  pg_class    | pg_class
> (1 row)
> 
> rhaas=# select to_regclass('12590'), to_regclass('does_not_exist');
>  to_regclass | to_regclass
> -------------+-------------
>  12590       |
> (1 row)
> 
> I think that's unacceptably weird behavior.  My suggestion is to
> restructure the code so that to_regclass() only accepts a name, not an
> OID, and make its charter precisely to perform a name lookup and
> return an OID (as regclass) or NULL if there's no match.

There's actually another good reason to not copy regclass's behaviour:

postgres=# CREATE TABLE "123"();
CREATE TABLE
postgres=# SELECT '123'::regclass;regclass---------- 123 (1 row)

I don't think that's fixable for ::regclass, but we shouldn't copy it.

Greetings,

Andres Freund

-- Andres Freund                       http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training &
Services



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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Fwd: Proposal: variant of regclass
Следующее
От: Fabrízio de Royes Mello
Дата:
Сообщение: Re: Including replication slot data in base backups