[DOCS] Special column trivia

2010-06-06 Thread Greg Smith
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
[email protected]   www.2ndQuadrant.us


--
Sent via pgsql-docs mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-docs


Re: [DOCS] Special column trivia

2010-06-06 Thread Tom Lane
Greg Smith  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

-- 
Sent via pgsql-docs mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-docs