WIP: extensible enums

Started by Andrew Dunstanover 15 years ago125 messageshackers
Jump to latest
#1Andrew Dunstan
andrew@dunslane.net

Attached is a WIP patch that allows enums to be extended with additional
labels arbitrarily. As previously discussed, it works by adding an
explicit sort order column to pg_enum. It keeps track of whether the
labels are correctly sorted by oid value, and if so uses that for
comparison, so the possible performance impact on existing uses, and on
almost all cases where a label is added at the end of the list, should
be negligible.

Open items include

* some additional error checking required
* missing documentation
* pg_upgrade considerations

To add a label at the end of the list, do:

ALTER TYPE myenum ADD 'newlabel';

To add a label somewhere else, do:

ALTER TYPE myenum ADD 'newlabel' BEFORE 'existinglabel';

or

ALTER TYPE myenum ADD 'newlabel' AFTER 'existinglabel';

I'm not wedded to the syntax. Let the bikeshedding begin.

cheers

andrew

Attachments:

venum.patchtext/x-patch; name=venum.patchDownload+1091-414
#2Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Andrew Dunstan (#1)
Re: WIP: extensible enums

Excerpts from Andrew Dunstan's message of lun ago 23 05:35:09 -0400 2010:

To add a label at the end of the list, do:

ALTER TYPE myenum ADD 'newlabel';

To add a label somewhere else, do:

ALTER TYPE myenum ADD 'newlabel' BEFORE 'existinglabel';

or

ALTER TYPE myenum ADD 'newlabel' AFTER 'existinglabel';

What do you need AFTER for? Seems to me that BEFORE should be enough.
(You already have the unadorned syntax for adding an item after the last
one, which is the corner case that BEFORE alone doesn't cover).

--
Álvaro Herrera <alvherre@commandprompt.com>
The PostgreSQL Company - Command Prompt, Inc.
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

#3David E. Wheeler
david@kineticode.com
In reply to: Andrew Dunstan (#1)
Re: WIP: extensible enums

On Aug 23, 2010, at 2:35 AM, Andrew Dunstan wrote:

I'm not wedded to the syntax. Let the bikeshedding begin.

Seems pretty good to me as-is.

David

#4Andrew Dunstan
andrew@dunslane.net
In reply to: Alvaro Herrera (#2)
Re: WIP: extensible enums

On Mon, August 23, 2010 11:49 am, Alvaro Herrera wrote:

Excerpts from Andrew Dunstan's message of lun ago 23 05:35:09 -0400 2010:

To add a label at the end of the list, do:

ALTER TYPE myenum ADD 'newlabel';

To add a label somewhere else, do:

ALTER TYPE myenum ADD 'newlabel' BEFORE 'existinglabel';

or

ALTER TYPE myenum ADD 'newlabel' AFTER 'existinglabel';

What do you need AFTER for? Seems to me that BEFORE should be enough.
(You already have the unadorned syntax for adding an item after the last
one, which is the corner case that BEFORE alone doesn't cover).

You're right. Strictly speaking we don't need it. But it doesn't hurt much
to provide it for a degree of symmetry.

cheers

andrew

#5Andrew Dunstan
andrew@dunslane.net
In reply to: Alvaro Herrera (#2)
Re: WIP: extensible enums

On Mon, August 23, 2010 11:49 am, Alvaro Herrera wrote:

Excerpts from Andrew Dunstan's message of lun ago 23 05:35:09 -0400 2010:

To add a label at the end of the list, do:

ALTER TYPE myenum ADD 'newlabel';

To add a label somewhere else, do:

ALTER TYPE myenum ADD 'newlabel' BEFORE 'existinglabel';

or

ALTER TYPE myenum ADD 'newlabel' AFTER 'existinglabel';

What do you need AFTER for? Seems to me that BEFORE should be enough.
(You already have the unadorned syntax for adding an item after the last
one, which is the corner case that BEFORE alone doesn't cover).

You're right. Strictly speaking we don't need it. But it doesn't hurt much
to provide it for a degree of symmetry.

cheers

andrew

#6Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#4)
Re: WIP: extensible enums

"Andrew Dunstan" <andrew@dunslane.net> writes:

On Mon, August 23, 2010 11:49 am, Alvaro Herrera wrote:

What do you need AFTER for? Seems to me that BEFORE should be enough.
(You already have the unadorned syntax for adding an item after the last
one, which is the corner case that BEFORE alone doesn't cover).

You're right. Strictly speaking we don't need it. But it doesn't hurt much
to provide it for a degree of symmetry.

I'm with Alvaro: drop the AFTER variant. It provides more than one way
to do the same thing, which isn't that exciting, and it's also going to
make it harder to document the performance issues. Without that, you
can just say "ADD BEFORE will make the enum slower, but plain ADD won't"
(ignoring the issue of OID wraparound, which'll confuse matters in any
case).

regards, tom lane

#7Josh Berkus
josh@agliodbs.com
In reply to: Andrew Dunstan (#4)
Re: WIP: extensible enums

You're right. Strictly speaking we don't need it. But it doesn't hurt much
to provide it for a degree of symmetry.

Swami Josh predicts that if we don't add AFTER now, we'll be adding it
in 2 years when enough people complain about it.

--
-- Josh Berkus
PostgreSQL Experts Inc.
http://www.pgexperts.com

#8Thom Brown
thom@linux.com
In reply to: Andrew Dunstan (#1)
Re: WIP: extensible enums

On 23 August 2010 10:35, Andrew Dunstan <andrew@dunslane.net> wrote:

Attached is a WIP patch that allows enums to be extended with additional
labels arbitrarily. As previously discussed, it works by adding an explicit
sort order column to pg_enum. It keeps track of whether the labels are
correctly sorted by oid value, and if so uses that for comparison, so the
possible performance impact on existing uses, and on almost all cases where
a label is added at the end of the list, should be negligible.

Open items include

  * some additional error checking required
  * missing documentation
  * pg_upgrade considerations

To add a label at the end of the list, do:

 ALTER TYPE myenum ADD 'newlabel';

To add a label somewhere else, do:

 ALTER TYPE myenum ADD 'newlabel' BEFORE 'existinglabel';

or

 ALTER TYPE myenum ADD 'newlabel' AFTER 'existinglabel';

I'm not wedded to the syntax. Let the bikeshedding begin.

cheers

andrew

When you write the supporting doc changes, you might want to add a
note in to mention that you cannot remove a label once it has been
added.

Will the modified enums remain intact after a dump/restore?

--
Thom Brown
Registered Linux user: #516935

#9David Fetter
david@fetter.org
In reply to: Alvaro Herrera (#2)
Re: WIP: extensible enums

On Mon, Aug 23, 2010 at 11:49:41AM -0400, Alvaro Herrera wrote:

Excerpts from Andrew Dunstan's message of lun ago 23 05:35:09 -0400 2010:

To add a label at the end of the list, do:

ALTER TYPE myenum ADD 'newlabel';

To add a label somewhere else, do:

ALTER TYPE myenum ADD 'newlabel' BEFORE 'existinglabel';

or

ALTER TYPE myenum ADD 'newlabel' AFTER 'existinglabel';

What do you need AFTER for? Seems to me that BEFORE should be enough.
(You already have the unadorned syntax for adding an item after the last
one, which is the corner case that BEFORE alone doesn't cover).

Making things easier for the users is a good thing all by itself :)

+1 for including both BEFORE and AFTER. Would it be worth it to allow
something like FIRST and LAST?

ALTER TYPE myenum ADD 'newlabel' FIRST;

ALTER TYPE myenum ADD 'newlabel' LAST;

Cheers,
David.
--
David Fetter <david@fetter.org> http://fetter.org/
Phone: +1 415 235 3778 AIM: dfetter666 Yahoo!: dfetter
Skype: davidfetter XMPP: david.fetter@gmail.com
iCal: webcal://www.tripit.com/feed/ical/people/david74/tripit.ics

Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate

#10David Fetter
david@fetter.org
In reply to: Tom Lane (#6)
Re: WIP: extensible enums

On Mon, Aug 23, 2010 at 01:54:40PM -0400, Tom Lane wrote:

"Andrew Dunstan" <andrew@dunslane.net> writes:

On Mon, August 23, 2010 11:49 am, Alvaro Herrera wrote:

What do you need AFTER for? Seems to me that BEFORE should be
enough. (You already have the unadorned syntax for adding an
item after the last one, which is the corner case that BEFORE
alone doesn't cover).

You're right. Strictly speaking we don't need it. But it doesn't
hurt much to provide it for a degree of symmetry.

I'm with Alvaro: drop the AFTER variant. It provides more than one
way to do the same thing, which isn't that exciting,

Not to you, maybe, but to users, it's really handy to have intuitive,
rather than strictly orthogonal, ways to do things.

Cheers,
David.
--
David Fetter <david@fetter.org> http://fetter.org/
Phone: +1 415 235 3778 AIM: dfetter666 Yahoo!: dfetter
Skype: davidfetter XMPP: david.fetter@gmail.com
iCal: webcal://www.tripit.com/feed/ical/people/david74/tripit.ics

Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate

#11Tom Lane
tgl@sss.pgh.pa.us
In reply to: Josh Berkus (#7)
Re: WIP: extensible enums

Josh Berkus <josh@agliodbs.com> writes:

Swami Josh predicts that if we don't add AFTER now, we'll be adding it
in 2 years when enough people complain about it.

If it's not there, no one will ever miss it. You might as well argue
that there should be a way of creating a foreign key reference by
ALTER'ing the referenced table instead of the referencing table.
Sure, if the SQL committee was into symmetry, they might have provided
such a thing. But they didn't and no one misses it.

regards, tom lane

#12Joseph Adams
joeyadams3.14159@gmail.com
In reply to: Tom Lane (#6)
Re: WIP: extensible enums

On Mon, Aug 23, 2010 at 1:54 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

"Andrew Dunstan" <andrew@dunslane.net> writes:

On Mon, August 23, 2010 11:49 am, Alvaro Herrera wrote:

What do you need AFTER for?  Seems to me that BEFORE should be enough.
(You already have the unadorned syntax for adding an item after the last
one, which is the corner case that BEFORE alone doesn't cover).

You're right. Strictly speaking we don't need it. But it doesn't hurt much
to provide it for a degree of symmetry.

I'm with Alvaro: drop the AFTER variant.  It provides more than one way
to do the same thing, which isn't that exciting, and it's also going to
make it harder to document the performance issues.  Without that, you
can just say "ADD BEFORE will make the enum slower, but plain ADD won't"
(ignoring the issue of OID wraparound, which'll confuse matters in any
case).

But what if you want to insert an OID at the end? You can't do it if
all you've got is BEFORE:

CREATE TYPE colors AS ENUM ('red', 'green', 'blue');

If I want it to become ('red', 'green', 'blue', 'orange'), what am I to do?

#13Thom Brown
thom@linux.com
In reply to: Joseph Adams (#12)
Re: WIP: extensible enums

On 23 August 2010 19:25, Joseph Adams <joeyadams3.14159@gmail.com> wrote:

On Mon, Aug 23, 2010 at 1:54 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

"Andrew Dunstan" <andrew@dunslane.net> writes:

On Mon, August 23, 2010 11:49 am, Alvaro Herrera wrote:

What do you need AFTER for?  Seems to me that BEFORE should be enough.
(You already have the unadorned syntax for adding an item after the last
one, which is the corner case that BEFORE alone doesn't cover).

You're right. Strictly speaking we don't need it. But it doesn't hurt much
to provide it for a degree of symmetry.

I'm with Alvaro: drop the AFTER variant.  It provides more than one way
to do the same thing, which isn't that exciting, and it's also going to
make it harder to document the performance issues.  Without that, you
can just say "ADD BEFORE will make the enum slower, but plain ADD won't"
(ignoring the issue of OID wraparound, which'll confuse matters in any
case).

But what if you want to insert an OID at the end?  You can't do it if
all you've got is BEFORE:

CREATE TYPE colors AS ENUM ('red', 'green', 'blue');

If I want it to become ('red', 'green', 'blue', 'orange'), what am I to do?

ALTER TYPE colors ADD 'orange';

--
Thom Brown
Registered Linux user: #516935

#14Tom Lane
tgl@sss.pgh.pa.us
In reply to: Thom Brown (#13)
Re: WIP: extensible enums

Thom Brown <thom@linux.com> writes:

On 23 August 2010 19:25, Joseph Adams <joeyadams3.14159@gmail.com> wrote:

But what if you want to insert an OID at the end?

ALTER TYPE colors ADD 'orange';

Alternatively, if people are dead set on symmetry, what we should do
to simplify is drop *this* syntax, and just have the BEFORE and AFTER
variants.

regards, tom lane

#15Josh Berkus
josh@agliodbs.com
In reply to: Tom Lane (#11)
Re: WIP: extensible enums

If it's not there, no one will ever miss it. You might as well argue
that there should be a way of creating a foreign key reference by
ALTER'ing the referenced table instead of the referencing table.
Sure, if the SQL committee was into symmetry, they might have provided
such a thing. But they didn't and no one misses it.

That's a very different situation, since the relationship is not
symmetrical, and it would take far more than a single keyword. Analogy
fail.

And one of the reasons people don't miss it is because far too many
users don't use FKs in the first place. ;-( The only reason why users
wouldn't notice the absence of AFTER (or, more likely, try it and then
ask on IRC for error message diagnosis) is because they're not using the
feature. (In which case it doesn't matter how it operates)

Docs which say "Add new enums BEFORE the enum you want to add them to,
and if you need to add an enum at the end, then add it without the
BEFORE keyword" is unnecessarily confusing to users. Saying "Add new
enum values using the BEFORE or AFTER keyword before or after the
appropriate value" is vastly easier to understand.

I really don't see the value in making a command substantially less
intuitive in order to avoid a single keyword, unless it affects areas of
Postgres outside of this particular command.

--
-- Josh Berkus
PostgreSQL Experts Inc.
http://www.pgexperts.com

#16Heikki Linnakangas
heikki.linnakangas@enterprisedb.com
In reply to: Tom Lane (#14)
Re: WIP: extensible enums

On 23/08/10 22:06, Tom Lane wrote:

Thom Brown<thom@linux.com> writes:

On 23 August 2010 19:25, Joseph Adams<joeyadams3.14159@gmail.com> wrote:

But what if you want to insert an OID at the end?

ALTER TYPE colors ADD 'orange';

Alternatively, if people are dead set on symmetry, what we should do
to simplify is drop *this* syntax, and just have the BEFORE and AFTER
variants.

Then you need to know the last existing value to add a new one to the
end. Seems awkward.

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

#17Tom Lane
tgl@sss.pgh.pa.us
In reply to: Josh Berkus (#15)
Re: WIP: extensible enums

Josh Berkus <josh@agliodbs.com> writes:

I really don't see the value in making a command substantially less
intuitive in order to avoid a single keyword, unless it affects areas of
Postgres outside of this particular command.

It's the three variants to do two things that I find unintuitive.

As I mentioned a minute ago, dropping the "abbreviated" syntax and
just having BEFORE and AFTER would be a good way of achieving
symmetry if you find that important.

regards, tom lane

#18Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#14)
Re: WIP: extensible enums

On Mon, Aug 23, 2010 at 3:06 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Thom Brown <thom@linux.com> writes:

On 23 August 2010 19:25, Joseph Adams <joeyadams3.14159@gmail.com> wrote:

But what if you want to insert an OID at the end?

ALTER TYPE colors ADD 'orange';

Alternatively, if people are dead set on symmetry, what we should do
to simplify is drop *this* syntax, and just have the BEFORE and AFTER
variants.

FWIW, I think Andrew's originally proposed syntax is fine and useful,
and we should just go with it.

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

#19Andrew Dunstan
andrew@dunslane.net
In reply to: Heikki Linnakangas (#16)
Re: WIP: extensible enums

On Mon, August 23, 2010 3:20 pm, Heikki Linnakangas wrote:

On 23/08/10 22:06, Tom Lane wrote:

Thom Brown<thom@linux.com> writes:

On 23 August 2010 19:25, Joseph Adams<joeyadams3.14159@gmail.com>
wrote:

But what if you want to insert an OID at the end?

ALTER TYPE colors ADD 'orange';

Alternatively, if people are dead set on symmetry, what we should do
to simplify is drop *this* syntax, and just have the BEFORE and AFTER
variants.

Then you need to know the last existing value to add a new one to the
end. Seems awkward.

I agree. This is a non-starter, I think. The most common case in my
experience is where the user doesn't care at all about the order, and just
wants to add a new label. We should make that as easy as possible,
especially since it's the most efficient.

cheers

andrew

#20David E. Wheeler
david@kineticode.com
In reply to: Tom Lane (#17)
Re: WIP: extensible enums

On Aug 23, 2010, at 12:20 PM, Tom Lane wrote:

Josh Berkus <josh@agliodbs.com> writes:

I really don't see the value in making a command substantially less
intuitive in order to avoid a single keyword, unless it affects areas of
Postgres outside of this particular command.

It's the three variants to do two things that I find unintuitive.

I strongly suspect that you are in the minority on this one.

Best,

David

#21Josh Berkus
josh@agliodbs.com
In reply to: Tom Lane (#17)
#22Bruce Momjian
bruce@momjian.us
In reply to: Josh Berkus (#21)
#23Bruce Momjian
bruce@momjian.us
In reply to: Andrew Dunstan (#1)
#24Tom Lane
tgl@sss.pgh.pa.us
In reply to: David E. Wheeler (#20)
#25Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#23)
#26Andrew Dunstan
andrew@dunslane.net
In reply to: Bruce Momjian (#22)
#27Bruce Momjian
bruce@momjian.us
In reply to: Andrew Dunstan (#26)
#28Andrew Dunstan
andrew@dunslane.net
In reply to: Bruce Momjian (#23)
#29Andrew Dunstan
andrew@dunslane.net
In reply to: Andrew Dunstan (#28)
#30Andrew Dunstan
andrew@dunslane.net
In reply to: Andrew Dunstan (#29)
#31Andrew Dunstan
andrew@dunslane.net
In reply to: Andrew Dunstan (#30)
#32Dean Rasheed
dean.a.rasheed@gmail.com
In reply to: Andrew Dunstan (#31)
#33Andrew Dunstan
andrew@dunslane.net
In reply to: Dean Rasheed (#32)
#34Robert Haas
robertmhaas@gmail.com
In reply to: Andrew Dunstan (#33)
#35Andrew Dunstan
andrew@dunslane.net
In reply to: Robert Haas (#34)
#36Robert Haas
robertmhaas@gmail.com
In reply to: Andrew Dunstan (#35)
#37Dean Rasheed
dean.a.rasheed@gmail.com
In reply to: Robert Haas (#36)
#38Dean Rasheed
dean.a.rasheed@gmail.com
In reply to: Dean Rasheed (#37)
#39Andrew Dunstan
andrew@dunslane.net
In reply to: Dean Rasheed (#38)
#40Dean Rasheed
dean.a.rasheed@gmail.com
In reply to: Andrew Dunstan (#39)
#41Dean Rasheed
dean.a.rasheed@gmail.com
In reply to: Dean Rasheed (#40)
#42Andrew Dunstan
andrew@dunslane.net
In reply to: Dean Rasheed (#41)
#43Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#42)
#44Dean Rasheed
dean.a.rasheed@gmail.com
In reply to: Tom Lane (#43)
#45Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#43)
#46Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dean Rasheed (#44)
#47Dean Rasheed
dean.a.rasheed@gmail.com
In reply to: Tom Lane (#46)
#48Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dean Rasheed (#47)
#49Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#48)
#50Dean Rasheed
dean.a.rasheed@gmail.com
In reply to: Tom Lane (#49)
#51Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#48)
#52Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dean Rasheed (#50)
#53Andrew Dunstan
andrew@dunslane.net
In reply to: Dean Rasheed (#50)
#54Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#52)
#55Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#53)
#56Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#54)
#57Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#51)
#58Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#55)
#59Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#52)
#60Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#55)
#61Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#60)
#62Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#61)
#63Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#62)
#64Dean Rasheed
dean.a.rasheed@gmail.com
In reply to: Tom Lane (#61)
#65Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dean Rasheed (#64)
#66Andrew Dunstan
andrew@dunslane.net
In reply to: Dean Rasheed (#64)
#67Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#66)
#68Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#61)
#69Dean Rasheed
dean.a.rasheed@gmail.com
In reply to: Andrew Dunstan (#68)
#70Thom Brown
thom@linux.com
In reply to: Andrew Dunstan (#68)
#71Andrew Dunstan
andrew@dunslane.net
In reply to: Dean Rasheed (#69)
#72Magnus Hagander
magnus@hagander.net
In reply to: Thom Brown (#70)
#73Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Magnus Hagander (#72)
#74Andrew Dunstan
andrew@dunslane.net
In reply to: Andrew Dunstan (#68)
#75Andrew Dunstan
andrew@dunslane.net
In reply to: Andrew Dunstan (#74)
#76Robert Haas
robertmhaas@gmail.com
In reply to: Andrew Dunstan (#75)
#77Andrew Dunstan
andrew@dunslane.net
In reply to: Robert Haas (#76)
#78David Fetter
david@fetter.org
In reply to: Robert Haas (#76)
#79Robert Haas
robertmhaas@gmail.com
In reply to: David Fetter (#78)
#80Merlin Moncure
mmoncure@gmail.com
In reply to: Andrew Dunstan (#77)
#81Robert Haas
robertmhaas@gmail.com
In reply to: Merlin Moncure (#80)
#82Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#75)
#83Josh Berkus
josh@agliodbs.com
In reply to: Tom Lane (#82)
#84Tom Lane
tgl@sss.pgh.pa.us
In reply to: Josh Berkus (#83)
#85Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#82)
#86Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#85)
#87Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#86)
#88Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#87)
#89Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#82)
#90Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#89)
#91Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#88)
#92Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#90)
#93Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#91)
#94Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#93)
#95Bruce Momjian
bruce@momjian.us
In reply to: Robert Haas (#94)
#96Dean Rasheed
dean.a.rasheed@gmail.com
In reply to: Tom Lane (#93)
#97Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#95)
#98Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#97)
#99Dean Rasheed
dean.a.rasheed@gmail.com
In reply to: Tom Lane (#97)
#100Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#98)
#101Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dean Rasheed (#99)
#102Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#101)
#103Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#100)
#104Andrew Dunstan
andrew@dunslane.net
In reply to: Andrew Dunstan (#102)
#105Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#102)
#106Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#105)
#107Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#106)
#108Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#107)
#109Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#108)
#110Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#109)
#111Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#109)
#112Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#109)
#113Andrew Dunstan
andrew@dunslane.net
In reply to: Bruce Momjian (#112)
#114Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#113)
#115Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#114)
#116Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#115)
#117Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Bruce Momjian (#112)
#118Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#116)
#119Joshua D. Drake
jd@commandprompt.com
In reply to: Tom Lane (#116)
#120Bruce Momjian
bruce@momjian.us
In reply to: Joshua D. Drake (#119)
#121Andrew Dunstan
andrew@dunslane.net
In reply to: Bruce Momjian (#120)
#122Bruce Momjian
bruce@momjian.us
In reply to: Andrew Dunstan (#121)
#123Peter Eisentraut
peter_e@gmx.net
In reply to: Robert Haas (#118)
#124Robert Haas
robertmhaas@gmail.com
In reply to: Peter Eisentraut (#123)
#125Josh Berkus
josh@agliodbs.com
In reply to: Tom Lane (#116)