pg_depend

Started by Bruce Momjianover 24 years ago123 messageshackers
Jump to latest
#1Bruce Momjian
bruce@momjian.us

I have found that many TODO items would benefit from a pg_depend table
that tracks object dependencies. TODO updated.

---------------------------------------------------------------------------

DEPENDENCY CHECKING / pg_depend

* Auto-destroy sequence on DROP of table with SERIAL, perhaps with a
separate SERIAL type
* Prevent column dropping if column is used by foreign key
* Propagate column or table renaming to foreign key constraints
* Automatically drop constraints/functions when object is dropped
* Make constraints clearer in dump file
* Make foreign keys easier to identify

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#2Peter Eisentraut
peter_e@gmx.net
In reply to: Bruce Momjian (#1)
Re: pg_depend

Bruce Momjian writes:

I have found that many TODO items would benefit from a pg_depend table
that tracks object dependencies. TODO updated.

I'm not so convinced on that idea. Assume you're dropping object foo.
You look at pg_depend and see that objects 145928, 264792, and 1893723
depend on it. Great, what do you do now?

Every system catalog (except the really badly designed ones) already
contains dependency information. What might help is that we make the
internal API for altering and dropping any kind of object more consistent
and general so that they can call each other in the dependency case.
(E.g., make sure none of them require whereToSendOutput or parser state as
an argument.)

--
Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter

#3Bruce Momjian
bruce@momjian.us
In reply to: Peter Eisentraut (#2)
Re: pg_depend

Bruce Momjian writes:

I have found that many TODO items would benefit from a pg_depend table
that tracks object dependencies. TODO updated.

I'm not so convinced on that idea. Assume you're dropping object foo.
You look at pg_depend and see that objects 145928, 264792, and 1893723
depend on it. Great, what do you do now?

Every system catalog (except the really badly designed ones) already
contains dependency information. What might help is that we make the
internal API for altering and dropping any kind of object more consistent
and general so that they can call each other in the dependency case.
(E.g., make sure none of them require whereToSendOutput or parser state as
an argument.)

Yes, it is not simple. The table is just one part of it. Code has to
do lookups and have cascade/failure options based on what it finds.

Things can get quite complicated, especially circular dependencies. It
needs a general overhaul and has to hit every area. We need a central
location to keep all this info.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#4Alex Pilosov
alex@pilosoft.com
In reply to: Peter Eisentraut (#2)
Re: pg_depend

On Mon, 16 Jul 2001, Peter Eisentraut wrote:

Bruce Momjian writes:

I have found that many TODO items would benefit from a pg_depend table
that tracks object dependencies. TODO updated.

I'm not so convinced on that idea. Assume you're dropping object foo.
You look at pg_depend and see that objects 145928, 264792, and 1893723
depend on it. Great, what do you do now?

I believe someone else previously suggested this:

drop <type> object [RESTRICT | CASCADE]

to make use of dependency info.

Every system catalog (except the really badly designed ones) already
contains dependency information. What might help is that we make the
internal API for altering and dropping any kind of object more consistent
and general so that they can call each other in the dependency case.
(E.g., make sure none of them require whereToSendOutput or parser state as
an argument.)

Yes, that's definitely requirement to implement the above...

#5Peter Eisentraut
peter_e@gmx.net
In reply to: Alex Pilosov (#4)
Re: pg_depend

Alex Pilosov writes:

I'm not so convinced on that idea. Assume you're dropping object foo.
You look at pg_depend and see that objects 145928, 264792, and 1893723
depend on it. Great, what do you do now?

I believe someone else previously suggested this:

drop <type> object [RESTRICT | CASCADE]

to make use of dependency info.

That was me. The point, however, was, given object id 145928, how the
heck to you know what table this comes from?

--
Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter

#6Alex Pilosov
alex@pilosoft.com
In reply to: Peter Eisentraut (#5)
Re: pg_depend

On Tue, 17 Jul 2001, Peter Eisentraut wrote:

Alex Pilosov writes:

I'm not so convinced on that idea. Assume you're dropping object foo.
You look at pg_depend and see that objects 145928, 264792, and 1893723
depend on it. Great, what do you do now?

I believe someone else previously suggested this:

drop <type> object [RESTRICT | CASCADE]

to make use of dependency info.

That was me. The point, however, was, given object id 145928, how the
heck to you know what table this comes from?

have a view pg_objecttype which is a UNION across all the [relevant]
system tables sounds fine to me, but maybe I'm missing something?

#7Bruce Momjian
bruce@momjian.us
In reply to: Peter Eisentraut (#5)
Re: pg_depend

Alex Pilosov writes:

I'm not so convinced on that idea. Assume you're dropping object foo.
You look at pg_depend and see that objects 145928, 264792, and 1893723
depend on it. Great, what do you do now?

I believe someone else previously suggested this:

drop <type> object [RESTRICT | CASCADE]

to make use of dependency info.

That was me. The point, however, was, given object id 145928, how the
heck to you know what table this comes from?

I think we will need the relid of the system table. I imagine four
columns:

object relid
object oid
reference relid
references oid

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#8Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#5)
Re: pg_depend

Peter Eisentraut <peter_e@gmx.net> writes:

You look at pg_depend and see that objects 145928, 264792, and 1893723
depend on it. Great, what do you do now?

I believe someone else previously suggested this:
drop <type> object [RESTRICT | CASCADE]
to make use of dependency info.

That was me. The point, however, was, given object id 145928, how the
heck to you know what table this comes from?

Even more to the point, what guarantee can we have that that OID even
defines a unique object at all? We have unique indexes that ensure
there are not two tables with the same OID, or two functions with the
same OID, etc --- but none that ensure uniqueness across system
catalogs.

The objects would need to be identified by two-part IDs, one part
specifying the object type and one giving its OID (which is known unique
within that type). Possibly object type would be best handled by giving
the OID of the system catalog containing the object's definition row.
In any case, looking at the type part would let users of the pg_depend
catalog figure out what they needed to do.

BTW, pg_description is broken because it assumes that OID alone is a
sufficient identifier ... but since it's such a noncritical function,
I haven't gotten too excited about it.

regards, tom lane

#9Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#8)
Re: pg_depend

Let me clearify. I am suggesting system table relid for each entry:

object sysrelid
object oid
reference sysrelid
references oid

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#10Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#8)
Re: pg_depend

The objects would need to be identified by two-part IDs, one part
specifying the object type and one giving its OID (which is known unique
within that type). Possibly object type would be best handled by giving
the OID of the system catalog containing the object's definition row.
In any case, looking at the type part would let users of the pg_depend
catalog figure out what they needed to do.

Yes, exactly. Also, I can see code that will handles dependencies
differently if it is a pg_class or pg_type row that is mentioned in
pg_depend.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#11Bill Studenmund
wrstuden@zembu.com
In reply to: Peter Eisentraut (#5)
Re: pg_depend

On Tue, 17 Jul 2001, Peter Eisentraut wrote:

Alex Pilosov writes:

I'm not so convinced on that idea. Assume you're dropping object foo.
You look at pg_depend and see that objects 145928, 264792, and 1893723
depend on it. Great, what do you do now?

I believe someone else previously suggested this:

drop <type> object [RESTRICT | CASCADE]

to make use of dependency info.

That was me. The point, however, was, given object id 145928, how the
heck to you know what table this comes from?

You have three columns, depender, dependee, and the third the oid of the
entry of pg_class describing what the depender is. Oh, actually you'd
probably need four columns, depender, dependee, depender in pg_class, and
dependee in pg_class.

Take care,

Bill

#12Hiroshi Inoue
Inoue@tpf.co.jp
In reply to: Peter Eisentraut (#5)
Re: pg_depend

Peter Eisentraut wrote:

Alex Pilosov writes:

I'm not so convinced on that idea. Assume you're dropping object foo.
You look at pg_depend and see that objects 145928, 264792, and 1893723
depend on it. Great, what do you do now?

I believe someone else previously suggested this:

drop <type> object [RESTRICT | CASCADE]

to make use of dependency info.

That was me. The point, however, was, given object id 145928, how the
heck to you know what table this comes from?

Is it really determined that *DROP OBJECT* drops the objects
which are dependent on it ?

regards,
Hiroshi Inoue

#13Bill Studenmund
wrstuden@zembu.com
In reply to: Hiroshi Inoue (#12)
Re: pg_depend

On Tue, 17 Jul 2001, Hiroshi Inoue wrote:

Peter Eisentraut wrote:

Alex Pilosov writes:

drop <type> object [RESTRICT | CASCADE]

to make use of dependency info.

That was me. The point, however, was, given object id 145928, how the
heck to you know what table this comes from?

Is it really determined that *DROP OBJECT* drops the objects
which are dependent on it ?

If you used DROP OBJECT CASCADE, yes. That's what CASCADE is saying.

I think the idea is that you can say what happens - delete dependents, or
do something else.

Take care,

Bill

#14Tom Lane
tgl@sss.pgh.pa.us
In reply to: Hiroshi Inoue (#12)
Re: pg_depend

Hiroshi Inoue <Inoue@tpf.co.jp> writes:

Is it really determined that *DROP OBJECT* drops the objects
which are dependent on it ?

DROP object CASCADE should work that way, because that's what the spec
says.

Whether the default DROP behavior should be CASCADE, RESTRICT, or the
current laissez-faire behavior remains to be debated ;-). The spec
is no help since it has no default: DROP *requires* a CASCADE or
RESTRICT option in SQL92. But I doubt our users will let us get away
with changing the syntax that way. So, once we have the CASCADE and
RESTRICT options implemented, we'll need to decide what an unadorned
DROP should do. Opinions anyone?

regards, tom lane

#15Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#14)
Re: pg_depend

Hiroshi Inoue <Inoue@tpf.co.jp> writes:

Is it really determined that *DROP OBJECT* drops the objects
which are dependent on it ?

DROP object CASCADE should work that way, because that's what the spec
says.

Whether the default DROP behavior should be CASCADE, RESTRICT, or the
current laissez-faire behavior remains to be debated ;-). The spec
is no help since it has no default: DROP *requires* a CASCADE or
RESTRICT option in SQL92. But I doubt our users will let us get away
with changing the syntax that way. So, once we have the CASCADE and
RESTRICT options implemented, we'll need to decide what an unadorned
DROP should do. Opinions anyone?

Don't forget RENAME.

And what do we do if two items depend on the same object.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#16Christopher Kings-Lynne
chriskl@familyhealth.com.au
In reply to: Tom Lane (#14)
RE: pg_depend

Whether the default DROP behavior should be CASCADE, RESTRICT, or the
current laissez-faire behavior remains to be debated ;-). The spec
is no help since it has no default: DROP *requires* a CASCADE or
RESTRICT option in SQL92. But I doubt our users will let us get away
with changing the syntax that way. So, once we have the CASCADE and
RESTRICT options implemented, we'll need to decide what an unadorned
DROP should do. Opinions anyone?

Hmmm...an unadorned drop could remove the object without RESRICTing it or
CASCADEing it. Hence, if there are objects that depend on it, the object
will be removed anyway, and dependent objects will not be touched. It's one
of those things that gives the DBA power, but might let them munge their
database. (Although it's exactly the same as the current way things happen)

Chris

#17Hiroshi Inoue
Inoue@tpf.co.jp
In reply to: Christopher Kings-Lynne (#16)
Re: pg_depend

Christopher Kings-Lynne wrote:

Whether the default DROP behavior should be CASCADE, RESTRICT, or the
current laissez-faire behavior remains to be debated ;-). The spec
is no help since it has no default: DROP *requires* a CASCADE or
RESTRICT option in SQL92. But I doubt our users will let us get away
with changing the syntax that way. So, once we have the CASCADE and
RESTRICT options implemented, we'll need to decide what an unadorned
DROP should do. Opinions anyone?

Hmmm...an unadorned drop could remove the object without RESRICTing it or
CASCADEing it. Hence, if there are objects that depend on it, the object
will be removed anyway, and dependent objects will not be touched.

We could mark the objects(and their dependent objects) as *INVALID*.
They would revive when reference objects revive in the world of *name*s.

regards,
Hiroshi Inoue

#18Peter Eisentraut
peter_e@gmx.net
In reply to: Bruce Momjian (#7)
Re: pg_depend

Bruce Momjian writes:

That was me. The point, however, was, given object id 145928, how the
heck to you know what table this comes from?

I think we will need the relid of the system table. I imagine four
columns:

object relid
object oid
reference relid
references oid

I'm not seeing the point. You're essentially duplicating the information
that's already available in the system catalogs. This is bound to become
a catastrophe the minute a user steps in and does manual surgery on some
catalog. (And yes, manual surgery should still be possible.)

--
Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter

#19Bruce Momjian
bruce@momjian.us
In reply to: Peter Eisentraut (#18)
Re: pg_depend

Bruce Momjian writes:

That was me. The point, however, was, given object id 145928, how the
heck to you know what table this comes from?

I think we will need the relid of the system table. I imagine four
columns:

object relid
object oid
reference relid
references oid

I'm not seeing the point. You're essentially duplicating the information
that's already available in the system catalogs. This is bound to become
a catastrophe the minute a user steps in and does manual surgery on some
catalog. (And yes, manual surgery should still be possible.)

But how then do you find the system table that uses the given oid?
Wasn't that your valid complaint?

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#20Peter Eisentraut
peter_e@gmx.net
In reply to: Bruce Momjian (#19)
Re: pg_depend

Bruce Momjian writes:

I'm not seeing the point. You're essentially duplicating the information
that's already available in the system catalogs. This is bound to become
a catastrophe the minute a user steps in and does manual surgery on some
catalog. (And yes, manual surgery should still be possible.)

But how then do you find the system table that uses the given oid?

It's implied by the column you're looking at.

--
Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter

#21Bruce Momjian
bruce@momjian.us
In reply to: Peter Eisentraut (#20)
#22Peter Eisentraut
peter_e@gmx.net
In reply to: Bruce Momjian (#21)
#23Bruce Momjian
bruce@momjian.us
In reply to: Peter Eisentraut (#22)
#24Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#20)
#25Bruce Momjian
bruce@momjian.us
In reply to: Peter Eisentraut (#22)
#26Peter Eisentraut
peter_e@gmx.net
In reply to: Tom Lane (#24)
#27Bruce Momjian
bruce@momjian.us
In reply to: Peter Eisentraut (#26)
#28Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#26)
#29Bill Studenmund
wrstuden@zembu.com
In reply to: Peter Eisentraut (#26)
#30Bill Studenmund
wrstuden@zembu.com
In reply to: Tom Lane (#28)
#31Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bill Studenmund (#30)
#32Bill Studenmund
wrstuden@zembu.com
In reply to: Tom Lane (#31)
#33Hiroshi Inoue
Inoue@tpf.co.jp
In reply to: Peter Eisentraut (#18)
#34Bruce Momjian
bruce@momjian.us
In reply to: Hiroshi Inoue (#33)
#35Hiroshi Inoue
Inoue@tpf.co.jp
In reply to: Bruce Momjian (#34)
#36Bruce Momjian
bruce@momjian.us
In reply to: Hiroshi Inoue (#35)
#37Philip Warner
pjw@rhyme.com.au
In reply to: Hiroshi Inoue (#35)
#38Ross J. Reedstrom
reedstrm@rice.edu
In reply to: Tom Lane (#31)
#39Ross J. Reedstrom
reedstrm@rice.edu
In reply to: Philip Warner (#37)
#40Philip Warner
pjw@rhyme.com.au
In reply to: Ross J. Reedstrom (#39)
#41Bruce Momjian
bruce@momjian.us
In reply to: Philip Warner (#40)
#42Tom Lane
tgl@sss.pgh.pa.us
In reply to: Hiroshi Inoue (#35)
#43Tom Lane
tgl@sss.pgh.pa.us
In reply to: Philip Warner (#37)
#44Philip Warner
pjw@rhyme.com.au
In reply to: Tom Lane (#43)
#45Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#42)
#46Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#43)
#47Tom Lane
tgl@sss.pgh.pa.us
In reply to: Philip Warner (#44)
#48Hiroshi Inoue
Inoue@tpf.co.jp
In reply to: Tom Lane (#42)
#49Bill Studenmund
wrstuden@zembu.com
In reply to: Hiroshi Inoue (#35)
#50Tom Lane
tgl@sss.pgh.pa.us
In reply to: Hiroshi Inoue (#48)
#51Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#46)
#52Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#51)
#53Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#52)
#54Lamar Owen
lamar.owen@wgcr.org
In reply to: Tom Lane (#53)
#55Tom Lane
tgl@sss.pgh.pa.us
In reply to: Lamar Owen (#54)
#56Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#53)
#57Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#55)
#58Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#57)
#59Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#58)
#60Lamar Owen
lamar.owen@wgcr.org
In reply to: Tom Lane (#58)
#61Tom Lane
tgl@sss.pgh.pa.us
In reply to: Lamar Owen (#60)
#62Rod Taylor
rbt@rbt.ca
In reply to: Bruce Momjian (#57)
#63Mikheev, Vadim
vmikheev@SECTORBASE.COM
In reply to: Rod Taylor (#62)
#64Bruce Momjian
bruce@momjian.us
In reply to: Rod Taylor (#62)
#65Bruce Momjian
bruce@momjian.us
In reply to: Mikheev, Vadim (#63)
#66Larry Rosenman
ler@lerctr.org
In reply to: Rod Taylor (#62)
#67Bruce Momjian
bruce@momjian.us
In reply to: Larry Rosenman (#66)
#68Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#67)
#69Mikheev, Vadim
vmikheev@SECTORBASE.COM
In reply to: Tom Lane (#68)
#70Larry Rosenman
ler@lerctr.org
In reply to: Tom Lane (#68)
#71Lamar Owen
lamar.owen@wgcr.org
In reply to: Bruce Momjian (#65)
#72Tom Lane
tgl@sss.pgh.pa.us
In reply to: Mikheev, Vadim (#69)
#73Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#59)
#74Tom Lane
tgl@sss.pgh.pa.us
In reply to: Larry Rosenman (#70)
#75Rod Taylor
rbt@rbt.ca
In reply to: Bruce Momjian (#64)
#76Ross J. Reedstrom
reedstrm@rice.edu
In reply to: Tom Lane (#58)
#77Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#72)
#78Hiroshi Inoue
Inoue@tpf.co.jp
In reply to: Bruce Momjian (#65)
#79Tom Lane
tgl@sss.pgh.pa.us
In reply to: Lamar Owen (#71)
#80Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#77)
#81Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#80)
#82Tom Lane
tgl@sss.pgh.pa.us
In reply to: Ross J. Reedstrom (#76)
#83Tom Lane
tgl@sss.pgh.pa.us
In reply to: Hiroshi Inoue (#78)
#84Hiroshi Inoue
Inoue@tpf.co.jp
In reply to: Bruce Momjian (#65)
#85Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#81)
#86Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#85)
#87Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#86)
#88Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#87)
#89Tatsuo Ishii
t-ishii@sra.co.jp
In reply to: Tom Lane (#53)
#90Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tatsuo Ishii (#89)
#91Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#90)
#92Hiroshi Inoue
Inoue@tpf.co.jp
In reply to: Bill Studenmund (#49)
#93Horst Herb
horst@hherb.com
In reply to: Bruce Momjian (#59)
#94Lincoln Yeoh
lyeoh@pop.jaring.my
In reply to: Lamar Owen (#71)
#95Hiroshi Inoue
Inoue@tpf.co.jp
In reply to: Bruce Momjian (#65)
#96Horst Herb
hherb@malleenet.net.au
In reply to: Lincoln Yeoh (#94)
#97Tom Lane
tgl@sss.pgh.pa.us
In reply to: Lamar Owen (#71)
#98Tom Lane
tgl@sss.pgh.pa.us
In reply to: Hiroshi Inoue (#95)
#99Lamar Owen
lamar.owen@wgcr.org
In reply to: Tom Lane (#97)
#100Lamar Owen
lamar.owen@wgcr.org
In reply to: Tom Lane (#79)
#101Ashley Cambrell
ash@freaky-namuh.com
In reply to: Bruce Momjian (#65)
#102Philip Warner
pjw@rhyme.com.au
In reply to: Tom Lane (#97)
#103Hiroshi Inoue
Inoue@tpf.co.jp
In reply to: Bruce Momjian (#65)
#104Daniel Kalchev
daniel@digsys.bg
In reply to: Bruce Momjian (#56)
#105Philip Warner
pjw@rhyme.com.au
In reply to: Tom Lane (#47)
#106Tom Lane
tgl@sss.pgh.pa.us
In reply to: Hiroshi Inoue (#103)
#107J-P Guy
grizzlouca@yahoo.ca
In reply to: Tom Lane (#106)
#108Mikheev, Vadim
vmikheev@SECTORBASE.COM
In reply to: J-P Guy (#107)
#109Tom Lane
tgl@sss.pgh.pa.us
In reply to: Philip Warner (#102)
#110Bill Studenmund
wrstuden@zembu.com
In reply to: Hiroshi Inoue (#92)
#111Hiroshi Inoue
Inoue@tpf.co.jp
In reply to: Bill Studenmund (#110)
#112Bill Studenmund
wrstuden@zembu.com
In reply to: Hiroshi Inoue (#111)
#113Ross J. Reedstrom
reedstrm@rice.edu
In reply to: Hiroshi Inoue (#111)
#114Hiroshi Inoue
Inoue@tpf.co.jp
In reply to: Bruce Momjian (#65)
#115John Scott
jmscott@yahoo.com
In reply to: Lamar Owen (#71)
#116Alessio Bragadini
alessio@albourne.com
In reply to: Tom Lane (#91)
#117Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#72)
#118Zeugswetter Andreas SB
ZeugswetterA@wien.spardat.at
In reply to: Bruce Momjian (#117)
#119Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#117)
#120Hiroshi Inoue
Inoue@tpf.co.jp
In reply to: Zeugswetter Andreas SB (#118)
#121Henshall, Stuart - WCP
SHenshall@westcountrypublications.co.uk
In reply to: Hiroshi Inoue (#120)
#122Hiroshi Inoue
Inoue@tpf.co.jp
In reply to: Henshall, Stuart - WCP (#121)
#123Henshall, Stuart - WCP
SHenshall@westcountrypublications.co.uk
In reply to: Hiroshi Inoue (#122)