Обсуждение: strange behavior, hoping for an explanation

Поиск
Список
Период
Сортировка

strange behavior, hoping for an explanation

От
Chris Travers
Дата:
Hi;

I have found recently that tables in certain contexts seem to have a
name pseudocolumn.  I was wondering if there is any documentation as
to what this is and what it signifies.

postgres=# CREATE table TEST2 (a text, b text);
CREATE TABLE
postgres=# INSERT INTO test2 values ('aaaa', 'bbbb');
INSERT 0 1
postgres=# select t.name FROM test2 t;
    name
-------------
 (aaaa,bbbb)
(1 row)

However:


postgres=# select name FROM test2 t;
ERROR:  column "name" does not exist
LINE 1: select name FROM test2 t;

This isn't making any sense to me.  Are there certain circumstances
where a tuple is cast to something like varchar(63)?  Does this pose
pitfals for any columns named 'name' in other contexts?

Best Wishes,
Chris Travers

Re: strange behavior, hoping for an explanation

От
Tom Lane
Дата:
Chris Travers <chris.travers@gmail.com> writes:
> I have found recently that tables in certain contexts seem to have a
> name pseudocolumn.  I was wondering if there is any documentation as
> to what this is and what it signifies.

I/O conversion cast from composite type to string.  You might find
this 9.1 patch informative:
http://git.postgresql.org/gitweb/?p=postgresql.git&a=commitdiff&h=543d22fc7423747afd59fe7214f2ddf6259efc62
There's also relevant discussion in the mailing lists shortly before
that.

            regards, tom lane

Re: strange behavior, hoping for an explanation

От
pasman pasmański
Дата:
See documentation, chapter Viii.E.2.2.2

2011/11/11, Chris Travers <chris.travers@gmail.com>:
> Hi;
>
> I have found recently that tables in certain contexts seem to have a
> name pseudocolumn.  I was wondering if there is any documentation as
> to what this is and what it signifies.
>
> postgres=# CREATE table TEST2 (a text, b text);
> CREATE TABLE
> postgres=# INSERT INTO test2 values ('aaaa', 'bbbb');
> INSERT 0 1
> postgres=# select t.name FROM test2 t;
>     name
> -------------
>  (aaaa,bbbb)
> (1 row)
>
> However:
>
>
> postgres=# select name FROM test2 t;
> ERROR:  column "name" does not exist
> LINE 1: select name FROM test2 t;
>
> This isn't making any sense to me.  Are there certain circumstances
> where a tuple is cast to something like varchar(63)?  Does this pose
> pitfals for any columns named 'name' in other contexts?
>
> Best Wishes,
> Chris Travers
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>


--
------------
pasman

Re: strange behavior, hoping for an explanation

От
"Albe Laurenz"
Дата:
Chris Travers wrote:
> I have found recently that tables in certain contexts seem to have a
> name pseudocolumn.  I was wondering if there is any documentation as
> to what this is and what it signifies.
>
> postgres=# CREATE table TEST2 (a text, b text);
> CREATE TABLE
> postgres=# INSERT INTO test2 values ('aaaa', 'bbbb');
> INSERT 0 1
> postgres=# select t.name FROM test2 t;
>     name
> -------------
>  (aaaa,bbbb)
> (1 row)
>
> However:
>
>
> postgres=# select name FROM test2 t;
> ERROR:  column "name" does not exist
> LINE 1: select name FROM test2 t;
>
> This isn't making any sense to me.  Are there certain circumstances
> where a tuple is cast to something like varchar(63)?  Does this pose
> pitfals for any columns named 'name' in other contexts?

I tried to your sample in 9.1.1 and 9.2devel, and both gave me
  ERROR:  column t.name does not exist
as expected.

Yours,
Laurenz Albe