[HACKERS] Phantom command ids again

2007-01-29 Thread Heikki Linnakangas

Hi,

I was about to resubmit the phantom command ids patch for review, as I 
noticed a little problem.


In fmgr.c in record_C_func, we cache the xmin and cmin, and later in 
lookup_C_func we check that they match to determine if the cached 
information is still valid. With phantom command ids, the cmin is not 
valid outside the inserting transaction, which makes it unusable for 
that purpose.


Similar caching code is used for other PL languages as well.

The best solution I've come up with this far is to use the stored 
commandid, even if it's a phantom one, and a flag indicating if it's 
phantom or not. Any suggestions?


--
  Heikki Linnakangas
  EnterpriseDB   http://www.enterprisedb.com

---(end of broadcast)---
TIP 1: if posting/reading through Usenet, please send an appropriate
  subscribe-nomail command to [EMAIL PROTECTED] so that your
  message can get through to the mailing list cleanly


Re: [HACKERS] Phantom command ids again

2007-01-29 Thread Tom Lane
Heikki Linnakangas [EMAIL PROTECTED] writes:
 I was about to resubmit the phantom command ids patch for review, as I 
 noticed a little problem.

 In fmgr.c in record_C_func, we cache the xmin and cmin, and later in 
 lookup_C_func we check that they match to determine if the cached 
 information is still valid. With phantom command ids, the cmin is not 
 valid outside the inserting transaction, which makes it unusable for 
 that purpose.

I think that actually that's just belt-and-suspenders programming;
it should be sufficient to compare tuple TID and xmin.  AFAICS a single
transaction cannot fill the same TID twice, since VACUUM would never
dare remove a tuple entered by a still-in-progress transaction.  So the
cmin check doesn't seem necessary.

regards, tom lane

---(end of broadcast)---
TIP 4: Have you searched our list archives?

   http://archives.postgresql.org


Re: [HACKERS] Phantom command ids again

2007-01-29 Thread Heikki Linnakangas

Tom Lane wrote:

Heikki Linnakangas [EMAIL PROTECTED] writes:
I was about to resubmit the phantom command ids patch for review, as I 
noticed a little problem.


In fmgr.c in record_C_func, we cache the xmin and cmin, and later in 
lookup_C_func we check that they match to determine if the cached 
information is still valid. With phantom command ids, the cmin is not 
valid outside the inserting transaction, which makes it unusable for 
that purpose.


I think that actually that's just belt-and-suspenders programming;
it should be sufficient to compare tuple TID and xmin.  AFAICS a single
transaction cannot fill the same TID twice, since VACUUM would never
dare remove a tuple entered by a still-in-progress transaction.  So the
cmin check doesn't seem necessary.


We don't currently use tid in the up-to-dateness check. Just  Oid, xmin 
and cmin. Good point, tid would work. I'll change it do that in the patch.


--
  Heikki Linnakangas
  EnterpriseDB   http://www.enterprisedb.com

---(end of broadcast)---
TIP 9: In versions below 8.0, the planner will ignore your desire to
  choose an index scan if your joining column's datatypes do not
  match