Re: preserving forensic information when we freeze - Mailing list pgsql-hackers

From Robert Haas
Subject Re: preserving forensic information when we freeze
Date
Msg-id CA+TgmoYdWOZa_UiewbqE73AQCM2etpMjukkcmYPkGatH8kPTow@mail.gmail.com
Whole thread Raw
In response to Re: preserving forensic information when we freeze  (Stephen Frost <sfrost@snowman.net>)
Responses Re: preserving forensic information when we freeze
List pgsql-hackers
On Fri, Dec 27, 2013 at 9:24 PM, Stephen Frost <sfrost@snowman.net> wrote:
>> I'm not sure what you mean by "doesn't work", because it clearly does
>> work.  I've already posted a patch.  You may find it ugly, but that's
>> not the same as not working.
>
> I meant *practically*, it doesn't work.  By which, I mean, "it sucks" as
> a solution. :)

I fail to see why.  What is so ugly about this:

select x.* from pgbench_accounts a, pg_tuple_header(a.tableoid, a.ctid) x;

It may be true that that query wouldn't have worked before Tom added
LATERAL, but he did add LATERAL and we have it now and nobody's going
to care about this function on versions that haven't got LATERAL,
because it won't exist there anyway.  The whole point of adding
features like LATERAL (which doesn't even appear in that query,
interestingly enough) is that it was really annoying to use functions
like this before we had it.  But now we *do* have it, so the fact a
function like this would have been annoying to use in older releases
isn't a reason not to add it now.

I will admit that performance may be a reason.  After pgbench -i:

rhaas=# explain analyze select xmax from pgbench_accounts;                                                      QUERY
PLAN

------------------------------------------------------------------------------------------------------------------------Seq
Scanon pgbench_accounts  (cost=0.00..2640.00 rows=100000
 
width=4) (actual time=0.009..14.950 rows=100000 loops=1)Total runtime: 20.354 ms
(2 rows)

rhaas=# explain analyze select (pg_tuple_header(tableoid,ctid)).xmax
from pgbench_accounts;                                                       QUERY PLAN

--------------------------------------------------------------------------------------------------------------------------Seq
Scanon pgbench_accounts  (cost=0.00..2890.00 rows=100000
 
width=10) (actual time=0.023..314.783 rows=100000 loops=1)Total runtime: 322.714 ms
(2 rows)

>> > Hindsight being what it is, perhaps we should have stuffed the system
>> > columns into a complex type instead of having individual columns, but
>> > I'm not sure changing that now would be worth the backwards
>> > compatibility break (yes, I know they're system columns, but I've seen
>> > more than one case of using ctid to break ties in otherwise identical
>> > rows..).
>>
>> Well, if the consensus is in favor of adding more system columns,
>> that's not my first choice, but I'm OK with it.  However, I wonder how
>> we plan to name them.  If we add pg_infomask and pg_infomask2, it
>> won't be consistent with the existing naming convention which doesn't
>> include any kind of pg-prefix, but if we don't use such a prefix then
>> every column we add further pollutes the namespace.
>
> Yeah, I agree that it gets a bit ugly...  What would you think of doing
> *both*?  Keep the existing system columns for backwards compatibility,
> but then also have a complex 'pg_header' type which provides all of the
> existing columns, as well as infomask && infomask2 ...?

I don't really see what that accomplishes, TBH.  If we further modify
the header format in the future, we'll need to modify the definition
of that type, and that will be a backward-compatibility break for
anyone using it.  Adding new system columns is probably less
intrusive.

Maybe it's best to just add pg_infomask and pg_infomask2 as system
columns and not worry about the inconsistency with the naming
convention for existing columns.

Other opinions?

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



pgsql-hackers by date:

Previous
From: Robert Haas
Date:
Subject: Re: Show lossy heap block info in EXPLAIN ANALYZE for bitmap heap scan
Next
From: Robert Haas
Date:
Subject: Re: Bogus error handling in pg_upgrade