Special column trivia

Started by Greg Smithalmost 16 years ago3 messagesdocs
Jump to latest
#1Greg Smith
gsmith@gregsmith.com

I was just reading
http://www.postgresql.org/docs/9.0/static/ddl-system-columns.html and
noted that the second part about the ctid being unstable: "a row's ctid
will change if it is updated or moved by VACUUM FULL" is probably not
true anymore. Is that worth updating?

What got me reading that section was a rather weird documentation
question/addition from Edmund Horner. He noted that the following works
on PG8.4 and 9.0:

postgres=# select (row(1,2)).name;
name
-------
(1,2)

Having not worked on earlier versions (this from 8.3):

postgres=# select (row(1,2)).name;
ERROR: could not identify column "name" in record data type

I didn't see anything that documents the ability to use "name" to refer
to the composite record like this. Since it's not an area of the code
I'm familiar with, so I'm just baffled as Edmund. "Row Constructors" at
http://www.postgresql.org/docs/current/interactive/sql-expressions.html
and "Composite Value Input" at
http://www.postgresql.org/docs/current/interactive/rowtypes.html both
seem relevant, but don't seem to explain what's happening. That second
one is where he pointed out confusion can really creep in, because
"name" is also a field in the inventory_item table, which makes it
particularly easy for a coding error to refer to the wrong thing oddly.

--
Greg Smith 2ndQuadrant US Baltimore, MD
PostgreSQL Training, Services and Support
greg@2ndQuadrant.com www.2ndQuadrant.us

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Greg Smith (#1)
Re: Special column trivia

Greg Smith <greg@2ndquadrant.com> writes:

I was just reading
http://www.postgresql.org/docs/9.0/static/ddl-system-columns.html and
noted that the second part about the ctid being unstable: "a row's ctid
will change if it is updated or moved by VACUUM FULL" is probably not
true anymore. Is that worth updating?

It's still true. VACUUM FULL still reassigns ctids.

What got me reading that section was a rather weird documentation
question/addition from Edmund Horner. He noted that the following works
on PG8.4 and 9.0:

postgres=# select (row(1,2)).name;

This is the cast-a-composite-type-to-string-type issue that's come up in
several guises before, eg most recently at
http://archives.postgresql.org/pgsql-general/2010-05/msg01126.php

regards, tom lane

#3Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#2)
Re: Special column trivia

Tom Lane wrote:

What got me reading that section was a rather weird documentation
question/addition from Edmund Horner. He noted that the following works
on PG8.4 and 9.0:

postgres=# select (row(1,2)).name;

This is the cast-a-composite-type-to-string-type issue that's come up in
several guises before, eg most recently at
http://archives.postgresql.org/pgsql-general/2010-05/msg01126.php

Do we need additional documentation?

--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ None of us is going to be here forever. +