
Hi...

	I want to add the filename (index) to the error message:

FATAL 1:  btree: BTP_CHAIN flag was expected (access = 0)

	At least then I can figure out which index to drop and rebuild,
instead of having to do them all :)

	Now, looking at _bt_moveright(), it passes Relation, which, as
part of its structure, has 'rd_fd', which I'm assuming is the open file
descriptor for the index file its doing its search on...

	Is there a method of taking rd_fd and figuring out the file name
it is associated with?  I looked at fstat(), but that only appears to
return everything but the filename :(

	Ideas...


Marc G. Fournier                                
Systems Administrator @ hub.org 
primary: scrappy@hub.org           secondary: scrappy@{freebsd|postgresql}.org 


Fri, 10 Apr 1998 17:10:27 -0300 (ADT)
The Hermit Hacker <scrappy@hub.org>
reverse file descriptor to a file name...
> 
> 
> Hi...
> 
> 	I want to add the filename (index) to the error message:
> 
> FATAL 1:  btree: BTP_CHAIN flag was expected (access = 0)
> 
> 	At least then I can figure out which index to drop and rebuild,
> instead of having to do them all :)
> 
> 	Now, looking at _bt_moveright(), it passes Relation, which, as
> part of its structure, has 'rd_fd', which I'm assuming is the open file
> descriptor for the index file its doing its search on...
> 
> 	Is there a method of taking rd_fd and figuring out the file name
> it is associated with?  I looked at fstat(), but that only appears to
> return everything but the filename :(

You can't get a file name from a descriptor, because there can be more
than one.  The system just returns information about the inode, not
about the directory entries pointing to the inode.

For your purpose, you want:

	Relation->rd_rel->relname

Works like champ.

This is not a trivial question, because the structures in PostgreSQL are
very complicated until you get used to them.

-- 
Bruce Momjian                          |  830 Blythe Avenue
maillist@candle.pha.pa.us              |  Drexel Hill, Pennsylvania 19026
  +  If your life is a hard drive,     |  (610) 353-9879(w)
  +  Christ can be your backup.        |  (610) 853-3000(h)

Fri, 10 Apr 1998 17:07:06 -0400 (EDT)
Bruce Momjian <maillist@candle.pha.pa.us>
Re: [HACKERS] reverse file descriptor to a file name...
On Fri, 10 Apr 1998, Bruce Momjian wrote:

> For your purpose, you want:
> 
> 	Relation->rd_rel->relname
> 
> Works like champ.
> 
> This is not a trivial question, because the structures in PostgreSQL are
> very complicated until you get used to them.

	Damn...I knew I should have looked deeper :(  

Thanks...

Marc G. Fournier                                
Systems Administrator @ hub.org 
primary: scrappy@hub.org           secondary: scrappy@{freebsd|postgresql}.org 


Fri, 10 Apr 1998 19:03:07 -0300 (ADT)
The Hermit Hacker <scrappy@hub.org>
Re: [HACKERS] reverse file descriptor to a file name...
> You can't get a file name from a descriptor, because there can be more
> than one.  The system just returns information about the inode, not
> about the directory entries pointing to the inode.
> 
> For your purpose, you want:
> 
> 	Relation->rd_rel->relname
> 
> Works like champ.
> 
> This is not a trivial question, because the structures in PostgreSQL are
> very complicated until you get used to them.

Speaking of this, I always considered this comment in
optimizer/plan/planner.c to be a classic:

        /* reach right in there, why don't you? */
        if (tletype != reln->rd_att->attrs[i - 1]->atttypid)
            elog(ERROR, "function declared to return type %s does not retrieve (%s.all)", typeTypeName(typ), typeTypeName(typ));


-- 
Bruce Momjian                          |  830 Blythe Avenue
maillist@candle.pha.pa.us              |  Drexel Hill, Pennsylvania 19026
  +  If your life is a hard drive,     |  (610) 353-9879(w)
  +  Christ can be your backup.        |  (610) 853-3000(h)

Fri, 10 Apr 1998 18:57:47 -0400 (EDT)
Bruce Momjian <maillist@candle.pha.pa.us>
Re: [HACKERS] reverse file descriptor to a file name...
On Fri, 10 Apr 1998, The Hermit Hacker wrote:

> On Fri, 10 Apr 1998, Bruce Momjian wrote:
> 
> > For your purpose, you want:
> > 
> > 	Relation->rd_rel->relname
> > 
> > Works like champ.
> > 
> > This is not a trivial question, because the structures in PostgreSQL are
> > very complicated until you get used to them.
> 
> 	Damn...I knew I should have looked deeper :(  

	Oops...I must be using that wrong...I'm getting:

NOTICE:  Message from PostgreSQL backend: The Postmaster has informed me
	 that some other backend died abnormally and possibly corrupted
	 shared memory.  I have rolled back the current transaction and am
	 going to terminate your database system connection and exit. 
	 Please reconnect to the database system and repeat your query.


	relname is of type NameData ... NameData is a struct, so shouldn't
it be:

	Relation->rd_rel->relname->data

	But, NameData only has one component, data...why make it a struct?

Marc G. Fournier                                
Systems Administrator @ hub.org 
primary: scrappy@hub.org           secondary: scrappy@{freebsd|postgresql}.org 


Fri, 10 Apr 1998 20:23:11 -0300 (ADT)
The Hermit Hacker <scrappy@hub.org>
Re: [HACKERS] reverse file descriptor to a file name...
> 
> 	Oops...I must be using that wrong...I'm getting:
> 
> NOTICE:  Message from PostgreSQL backend: The Postmaster has informed me
> 	 that some other backend died abnormally and possibly corrupted
> 	 shared memory.  I have rolled back the current transaction and am
> 	 going to terminate your database system connection and exit. 
> 	 Please reconnect to the database system and repeat your query.
> 
> 
> 	relname is of type NameData ... NameData is a struct, so shouldn't
> it be:
> 
> 	Relation->rd_rel->relname->data
> 
> 	But, NameData only has one component, data...why make it a struct?

Yep, you are right.  They make is a struct so they can pass it around
by-value, rather than the normal pointer by-reference for normal arrays.

Perhaps I should do a layout for the PostgreSQL data structures as I
have done a flowchart for the backend program files.

-- 
Bruce Momjian                          |  830 Blythe Avenue
maillist@candle.pha.pa.us              |  Drexel Hill, Pennsylvania 19026
  +  If your life is a hard drive,     |  (610) 353-9879(w)
  +  Christ can be your backup.        |  (610) 853-3000(h)

Fri, 10 Apr 1998 21:58:11 -0400 (EDT)
Bruce Momjian <maillist@candle.pha.pa.us>
Re: [HACKERS] reverse file descriptor to a file name...
On Fri, 10 Apr 1998, Bruce Momjian wrote:

> > 
> > 	Oops...I must be using that wrong...I'm getting:
> > 
> > NOTICE:  Message from PostgreSQL backend: The Postmaster has informed me
> > 	 that some other backend died abnormally and possibly corrupted
> > 	 shared memory.  I have rolled back the current transaction and am
> > 	 going to terminate your database system connection and exit. 
> > 	 Please reconnect to the database system and repeat your query.
> > 
> > 
> > 	relname is of type NameData ... NameData is a struct, so shouldn't
> > it be:
> > 
> > 	Relation->rd_rel->relname->data
> > 
> > 	But, NameData only has one component, data...why make it a struct?
> 
> Yep, you are right.  They make is a struct so they can pass it around
> by-value, rather than the normal pointer by-reference for normal arrays.

	Well, that would explain *that* problem :)  

Marc G. Fournier                                
Systems Administrator @ hub.org 
primary: scrappy@hub.org           secondary: scrappy@{freebsd|postgresql}.org 


Sat, 11 Apr 1998 06:11:41 -0300 (ADT)
The Hermit Hacker <scrappy@hub.org>
Re: [HACKERS] reverse file descriptor to a file name...
On Fri, 10 Apr 1998, Bruce Momjian wrote:

> > 
> > 	Oops...I must be using that wrong...I'm getting:
> > 
> > NOTICE:  Message from PostgreSQL backend: The Postmaster has informed me
> > 	 that some other backend died abnormally and possibly corrupted
> > 	 shared memory.  I have rolled back the current transaction and am
> > 	 going to terminate your database system connection and exit. 
> > 	 Please reconnect to the database system and repeat your query.
> > 
> > 
> > 	relname is of type NameData ... NameData is a struct, so shouldn't
> > it be:
> > 
> > 	Relation->rd_rel->relname->data
> > 
> > 	But, NameData only has one component, data...why make it a struct?
> 
> Yep, you are right.  They make is a struct so they can pass it around
> by-value, rather than the normal pointer by-reference for normal arrays.

Odd...rel->rd_rel->relname->data produces:

nbtsearch.c: In function `_bt_moveright':
nbtsearch.c:223: invalid type argument of `->'

But...rel->rd_rel->relname.data works.

	Now, I really really hate pointers to start with...always
have...but can someone confirm which is (should be) right? :(

Marc G. Fournier                                
Systems Administrator @ hub.org 
primary: scrappy@hub.org           secondary: scrappy@{freebsd|postgresql}.org 


Sat, 11 Apr 1998 06:15:10 -0300 (ADT)
The Hermit Hacker <scrappy@hub.org>
Re: [HACKERS] reverse file descriptor to a file name...
> Odd...rel->rd_rel->relname->data produces:
> 
> nbtsearch.c: In function `_bt_moveright':
> nbtsearch.c:223: invalid type argument of `->'
> 
> But...rel->rd_rel->relname.data works.
> 
> 	Now, I really really hate pointers to start with...always
> have...but can someone confirm which is (should be) right? :(

Yep, that is right.  It takes a little trial-and-error to check the type
of each structure member, and reference it accordingly.

-- 
Bruce Momjian                          |  830 Blythe Avenue
maillist@candle.pha.pa.us              |  Drexel Hill, Pennsylvania 19026
  +  If your life is a hard drive,     |  (610) 353-9879(w)
  +  Christ can be your backup.        |  (610) 853-3000(h)

Sat, 11 Apr 1998 19:03:44 -0400 (EDT)
Bruce Momjian <maillist@candle.pha.pa.us>
Re: [HACKERS] reverse file descriptor to a file name...