WIP: default values for function parameters

Started by Pavel Stehuleover 17 years ago122 messageshackers
Jump to latest
#1Pavel Stehule
pavel.stehule@gmail.com

Hello

I have problem with sending patch, so I am send link
http://www.pgsql.cz/patches/defaults.diff.gz

Example:
postgres=# create function fx(a int, b int default 30, c int default 40)
postgres-# returns int as $$ select $1 + $2 + $3; $$
postgres-# language sql;
CREATE FUNCTION
postgres=# select fx();
ERROR: function fx() does not exist
LINE 1: select fx();
^
HINT: No function matches the given name and argument types. You
might need to add explicit type casts.
postgres=# select fx(10);
fx
----
80
(1 row)

postgres=# select fx(10,11);
fx
----
61
(1 row)

postgres=# select fx(10,11,12);
fx
----
33
(1 row)

Know bugs:
blind ambiguous call detection

comments, ideas?

regards
Pavel Stehule

#2Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#1)
Re: WIP: default values for function parameters

Pavel Stehule wrote:

I have problem with sending patch, so I am send link
http://www.pgsql.cz/patches/defaults.diff.gz

Example:
postgres=# create function fx(a int, b int default 30, c int default 40)

Could you explain why you store the default expressions in a new posexpr
type rather than in an array of text (compare pg_attrdef.adbin)?

#3Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#2)
Re: WIP: default values for function parameters

2008/11/24 Peter Eisentraut <peter_e@gmx.net>:

Pavel Stehule wrote:

I have problem with sending patch, so I am send link
http://www.pgsql.cz/patches/defaults.diff.gz

Example:
postgres=# create function fx(a int, b int default 30, c int default 40)

Could you explain why you store the default expressions in a new posexpr
type rather than in an array of text (compare pg_attrdef.adbin)?

I would to implement named params - and there expressions, that are
used as default params, should not be continual. I don't store params
as array of text because I would to eliminate repeated expression's
parsing. So I use similar machanism used for rules or views.

Pavel

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#3)
Re: WIP: default values for function parameters

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

2008/11/24 Peter Eisentraut <peter_e@gmx.net>:

Could you explain why you store the default expressions in a new posexpr
type rather than in an array of text (compare pg_attrdef.adbin)?

I would to implement named params - and there expressions, that are
used as default params, should not be continual. I don't store params
as array of text because I would to eliminate repeated expression's
parsing. So I use similar machanism used for rules or views.

Say again? The representation Peter is suggesting *is* what is used
in rules and views. If you've re-invented that wheel, undo it.

regards, tom lane

#5Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#4)
Re: WIP: default values for function parameters

2008/11/24 Tom Lane <tgl@sss.pgh.pa.us>:

"Pavel Stehule" <pavel.stehule@gmail.com> writes:

2008/11/24 Peter Eisentraut <peter_e@gmx.net>:

Could you explain why you store the default expressions in a new posexpr
type rather than in an array of text (compare pg_attrdef.adbin)?

I would to implement named params - and there expressions, that are
used as default params, should not be continual. I don't store params
as array of text because I would to eliminate repeated expression's
parsing. So I use similar machanism used for rules or views.

Say again? The representation Peter is suggesting *is* what is used
in rules and views. If you've re-invented that wheel, undo it.

Then I am blind. I store serialised transformed expression, but if
better solution exists, then I'll use it.

regards
Pavel Stehule

Show quoted text

regards, tom lane

#6Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#3)
Re: WIP: default values for function parameters

On Monday 24 November 2008 11:40:31 Pavel Stehule wrote:

I would to implement named params - and there expressions, that are
used as default params, should not be continual. I don't store params
as array of text because I would to eliminate repeated expression's
parsing. So I use similar machanism used for rules or views.

You mean you want to avoid repeated parsing of expressions in case the same
expression is used as a default value for several parameters? How common
would that be?

#7Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#6)
Re: WIP: default values for function parameters

2008/11/24 Peter Eisentraut <peter_e@gmx.net>:

On Monday 24 November 2008 11:40:31 Pavel Stehule wrote:

I would to implement named params - and there expressions, that are
used as default params, should not be continual. I don't store params
as array of text because I would to eliminate repeated expression's
parsing. So I use similar machanism used for rules or views.

You mean you want to avoid repeated parsing of expressions in case the same
expression is used as a default value for several parameters? How common
would that be?

no - I am reading default parameters in call statement parsing.
Default parameters are implemented similar to variadic functions - so
no changes on PL part - all changes are on caller part.

Pavel

#8Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Pavel Stehule (#5)
Re: WIP: default values for function parameters

Pavel Stehule escribi�:

2008/11/24 Tom Lane <tgl@sss.pgh.pa.us>:

Say again? The representation Peter is suggesting *is* what is used
in rules and views. If you've re-invented that wheel, undo it.

Then I am blind. I store serialised transformed expression, but if
better solution exists, then I'll use it.

Seem to me you just want to store the output of nodeToString.

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

#9Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#7)
Re: WIP: default values for function parameters

On Monday 24 November 2008 23:21:15 Pavel Stehule wrote:

You mean you want to avoid repeated parsing of expressions in case the
same expression is used as a default value for several parameters? How
common would that be?

no - I am reading default parameters in call statement parsing.
Default parameters are implemented similar to variadic functions - so
no changes on PL part - all changes are on caller part.

Then I don't understand why you need this special data type instead of using
an array of text with nulls for parameters without default.

#10Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#9)
Re: WIP: default values for function parameters

2008/11/24 Peter Eisentraut <peter_e@gmx.net>:

On Monday 24 November 2008 23:21:15 Pavel Stehule wrote:

You mean you want to avoid repeated parsing of expressions in case the
same expression is used as a default value for several parameters? How
common would that be?

no - I am reading default parameters in call statement parsing.
Default parameters are implemented similar to variadic functions - so
no changes on PL part - all changes are on caller part.

Then I don't understand why you need this special data type instead of using
an array of text with nulls for parameters without default.

I expect some overhead with classic array - but this overhead will be
small and array of text with nulls is better variant, Tomorrow I'll
send updated version.

Regards
Pavel Stehule

#11Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#9)
Re: WIP: default values for function parameters

Peter Eisentraut <peter_e@gmx.net> writes:

On Monday 24 November 2008 23:21:15 Pavel Stehule wrote:

Default parameters are implemented similar to variadic functions - so
no changes on PL part - all changes are on caller part.

Then I don't understand why you need this special data type instead of using
an array of text with nulls for parameters without default.

I'm not even sure you need to store any nulls.  We're going to require
defaults to be provided for the last N parameters consecutively, right?
So that's just what the array contents are.  Or maybe it's not an array
at all but a single text item containing the representation of a List
--- compare the storage of index expressions.  There shouldn't be any
need to read the contents of the value during function resolution;
an appropriate representation will have the number of non-defaultable
parameters stored as a separate integer column.

regards, tom lane

#12Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#11)
Re: WIP: default values for function parameters

2008/11/25 Tom Lane <tgl@sss.pgh.pa.us>:

Peter Eisentraut <peter_e@gmx.net> writes:

On Monday 24 November 2008 23:21:15 Pavel Stehule wrote:

Default parameters are implemented similar to variadic functions - so
no changes on PL part - all changes are on caller part.

Then I don't understand why you need this special data type instead of using
an array of text with nulls for parameters without default.

I'm not even sure you need to store any nulls.  We're going to require
defaults to be provided for the last N parameters consecutively, right?
So that's just what the array contents are.  Or maybe it's not an array
at all but a single text item containing the representation of a List
--- compare the storage of index expressions.  There shouldn't be any
need to read the contents of the value during function resolution;
an appropriate representation will have the number of non-defaultable
parameters stored as a separate integer column.

this can be the most simple solution, I used special datatype because
a) I am afraid add more columns to system tables, b) I dislike
serialisation into text type, because simple select from this values
returns some "strange" values. But maybe I am thinking and searching
to much complicate solutions. I'll try to simplify patch.

Regards
Pavel Stehule

Show quoted text

regards, tom lane

#13Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#11)
Re: WIP: default values for function parameters

Hello

I am sending actualized versions - I accepted Tom's comments - default
expressions are serialised List stored in text field.

Regards
Pavel Stehule

2008/11/25 Tom Lane <tgl@sss.pgh.pa.us>:

Show quoted text

Peter Eisentraut <peter_e@gmx.net> writes:

On Monday 24 November 2008 23:21:15 Pavel Stehule wrote:

Default parameters are implemented similar to variadic functions - so
no changes on PL part - all changes are on caller part.

Then I don't understand why you need this special data type instead of using
an array of text with nulls for parameters without default.

I'm not even sure you need to store any nulls.  We're going to require
defaults to be provided for the last N parameters consecutively, right?
So that's just what the array contents are.  Or maybe it's not an array
at all but a single text item containing the representation of a List
--- compare the storage of index expressions.  There shouldn't be any
need to read the contents of the value during function resolution;
an appropriate representation will have the number of non-defaultable
parameters stored as a separate integer column.

regards, tom lane

Attachments:

defaults.diff.gzapplication/x-gzip; name=defaults.diff.gzDownload
#14Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#13)
Re: WIP: default values for function parameters

On Thursday 27 November 2008 00:14:19 Pavel Stehule wrote:

I am sending actualized versions - I accepted Tom's comments - default
expressions are serialised List stored in text field.

OK, this is looking pretty good.

There is a structural problem that we need to address. With your patch,
pg_dump produces something like this:

CREATE FUNCTION foo(a integer = 1, b integer = 2, c integer = 3) RETURNS
integer
LANGUAGE sql
AS $_$ SELECT $1 + $2 + $3; $_$;

ALTER FUNCTION public.foo(a integer = 1, b integer = 2, c integer = 3) OWNER
TO peter;

The second command is rejected because default values are only accepted in
CREATE FUNCTION.

There are two ways to fix this, both having some validity:

1. We create a second version of pg_get_function_arguments() that produces
arguments without default values decoration. This is probably the
technically sound thing to do.

2. We accept the default values specification and ignore it silently. Note
that we already silently ignore the argument names. ALTER FUNCTION foo(a
int, b int) will also act on a function defined as foo(x int, y int).

Comments?

#15Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#14)
Re: WIP: default values for function parameters

2008/11/30 Peter Eisentraut <peter_e@gmx.net>:

On Thursday 27 November 2008 00:14:19 Pavel Stehule wrote:

I am sending actualized versions - I accepted Tom's comments - default
expressions are serialised List stored in text field.

OK, this is looking pretty good.

There is a structural problem that we need to address. With your patch,
pg_dump produces something like this:

CREATE FUNCTION foo(a integer = 1, b integer = 2, c integer = 3) RETURNS
integer
LANGUAGE sql
AS $_$ SELECT $1 + $2 + $3; $_$;

ALTER FUNCTION public.foo(a integer = 1, b integer = 2, c integer = 3) OWNER
TO peter;

The second command is rejected because default values are only accepted in
CREATE FUNCTION.

There are two ways to fix this, both having some validity:

1. We create a second version of pg_get_function_arguments() that produces
arguments without default values decoration. This is probably the
technically sound thing to do.

2. We accept the default values specification and ignore it silently. Note
that we already silently ignore the argument names. ALTER FUNCTION foo(a
int, b int) will also act on a function defined as foo(x int, y int).

if this variant is possible, then will be simply implemented

regard
Pavel

Show quoted text

Comments?

#16Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#14)
Re: WIP: default values for function parameters

Peter Eisentraut <peter_e@gmx.net> writes:

There are two ways to fix this, both having some validity:

1. We create a second version of pg_get_function_arguments() that produces
arguments without default values decoration. This is probably the
technically sound thing to do.

Yes. I think that the argument for allowing parameter names in commands
like ALTER FUNCTION is that the user might consider them part of the
function's identity. This can hardly be claimed for default values.

Also, there's a third possibility: we could revert the decision to allow
pg_dump to depend on pg_get_function_arguments in the first place. That
was really the lazy man's approach to begin with. The more we allow
pg_dump to depend on backend functions that work in a SnapshotNow world,
the more risk we have of producing inconsistent dumps.

regards, tom lane

#17David E. Wheeler
david@kineticode.com
In reply to: Tom Lane (#16)
Re: WIP: default values for function parameters

On Nov 30, 2008, at 6:49 PM, Tom Lane wrote:

Peter Eisentraut <peter_e@gmx.net> writes:

There are two ways to fix this, both having some validity:

1. We create a second version of pg_get_function_arguments() that
produces
arguments without default values decoration. This is probably the
technically sound thing to do.

Yes. I think that the argument for allowing parameter names in
commands
like ALTER FUNCTION is that the user might consider them part of the
function's identity. This can hardly be claimed for default values.

Agreed, default values should not be a part of function signatures,
although it might be nice if ALTER FUNCTION to allow default values to
be changed.

Best,

David

#18Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#16)
Re: WIP: default values for function parameters

2008/11/30 Tom Lane <tgl@sss.pgh.pa.us>:

Peter Eisentraut <peter_e@gmx.net> writes:

There are two ways to fix this, both having some validity:

1. We create a second version of pg_get_function_arguments() that produces
arguments without default values decoration. This is probably the
technically sound thing to do.

I'll prepare new patch with this change.

Yes. I think that the argument for allowing parameter names in commands
like ALTER FUNCTION is that the user might consider them part of the
function's identity. This can hardly be claimed for default values.

Also, there's a third possibility: we could revert the decision to allow
pg_dump to depend on pg_get_function_arguments in the first place. That
was really the lazy man's approach to begin with. The more we allow
pg_dump to depend on backend functions that work in a SnapshotNow world,
the more risk we have of producing inconsistent dumps.

I don't understand well. Transactions is spanish village for me. So
there will be some finalizing necessary from You or Peter.

Regards
Pavel Stehule

Show quoted text

regards, tom lane

#19Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#14)
Re: WIP: default values for function parameters

2008/11/30 Peter Eisentraut <peter_e@gmx.net>:

On Thursday 27 November 2008 00:14:19 Pavel Stehule wrote:

I am sending actualized versions - I accepted Tom's comments - default
expressions are serialised List stored in text field.

OK, this is looking pretty good.

There is a structural problem that we need to address. With your patch,
pg_dump produces something like this:

CREATE FUNCTION foo(a integer = 1, b integer = 2, c integer = 3) RETURNS
integer
LANGUAGE sql
AS $_$ SELECT $1 + $2 + $3; $_$;

ALTER FUNCTION public.foo(a integer = 1, b integer = 2, c integer = 3) OWNER
TO peter;

The second command is rejected because default values are only accepted in
CREATE FUNCTION.

There are two ways to fix this, both having some validity:

1. We create a second version of pg_get_function_arguments() that produces
arguments without default values decoration. This is probably the
technically sound thing to do.

I did it. new version is attached

Regards
Pavel Stehule

Show quoted text

2. We accept the default values specification and ignore it silently. Note
that we already silently ignore the argument names. ALTER FUNCTION foo(a
int, b int) will also act on a function defined as foo(x int, y int).

Comments?

Attachments:

defaults0112.diff.gzapplication/x-gzip; name=defaults0112.diff.gzDownload+1-1
#20Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#19)
Re: WIP: default values for function parameters

It's committed.

#21Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#20)
#22Jim Nasby
Jim.Nasby@BlueTreble.com
In reply to: David E. Wheeler (#17)
#23Grzegorz Jaskiewicz
gj@pointblue.com.pl
In reply to: Jim Nasby (#22)
#24Pavel Stehule
pavel.stehule@gmail.com
In reply to: Grzegorz Jaskiewicz (#23)
#25Peter Eisentraut
peter_e@gmx.net
In reply to: Jim Nasby (#22)
#26Peter Eisentraut
peter_e@gmx.net
In reply to: Grzegorz Jaskiewicz (#23)
#27Grzegorz Jaskiewicz
gj@pointblue.com.pl
In reply to: Pavel Stehule (#24)
#28Peter Eisentraut
peter_e@gmx.net
In reply to: Grzegorz Jaskiewicz (#27)
#29Tom Lane
tgl@sss.pgh.pa.us
In reply to: Grzegorz Jaskiewicz (#23)
#30Pavel Stehule
pavel.stehule@gmail.com
In reply to: Grzegorz Jaskiewicz (#27)
#31Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#30)
#32Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#31)
#33Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#32)
#34Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#33)
#35Robert Haas
robertmhaas@gmail.com
In reply to: Pavel Stehule (#34)
#36Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#34)
#37Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#36)
#38Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#37)
#39Bruce Momjian
bruce@momjian.us
In reply to: Pavel Stehule (#34)
#40Pavel Stehule
pavel.stehule@gmail.com
In reply to: Bruce Momjian (#39)
#41Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#40)
#42Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#41)
#43Bruce Momjian
bruce@momjian.us
In reply to: Pavel Stehule (#40)
#44Pavel Stehule
pavel.stehule@gmail.com
In reply to: Bruce Momjian (#43)
#45Bruce Momjian
bruce@momjian.us
In reply to: Pavel Stehule (#44)
#46Pavel Stehule
pavel.stehule@gmail.com
In reply to: Bruce Momjian (#45)
#47Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#44)
#48Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#47)
#49Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#48)
#50Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#49)
#51Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#50)
#52Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#51)
#53Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#52)
#54Bruce Momjian
bruce@momjian.us
In reply to: Pavel Stehule (#53)
#55Tom Lane
tgl@sss.pgh.pa.us
In reply to: Pavel Stehule (#53)
#56Kevin Grittner
Kevin.Grittner@wicourts.gov
In reply to: Tom Lane (#51)
#57Pavel Stehule
pavel.stehule@gmail.com
In reply to: Tom Lane (#55)
#58Pavel Stehule
pavel.stehule@gmail.com
In reply to: Kevin Grittner (#56)
#59Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#58)
#60Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#59)
#61David E. Wheeler
david@kineticode.com
In reply to: Bruce Momjian (#54)
#62Ian Caulfield
ian.caulfield@gmail.com
In reply to: David E. Wheeler (#61)
#63Dimitri Fontaine
dimitri@2ndQuadrant.fr
In reply to: Ian Caulfield (#62)
#64Pavel Stehule
pavel.stehule@gmail.com
In reply to: Dimitri Fontaine (#63)
#65Tom Lane
tgl@sss.pgh.pa.us
In reply to: David E. Wheeler (#61)
#66David E. Wheeler
david@kineticode.com
In reply to: Dimitri Fontaine (#63)
#67David E. Wheeler
david@kineticode.com
In reply to: Tom Lane (#65)
#68Tom Lane
tgl@sss.pgh.pa.us
In reply to: David E. Wheeler (#67)
#69Pavel Stehule
pavel.stehule@gmail.com
In reply to: David E. Wheeler (#67)
#70Rod Taylor
rbt@rbt.ca
In reply to: Pavel Stehule (#69)
#71Tom Lane
tgl@sss.pgh.pa.us
In reply to: Rod Taylor (#70)
#72Pavel Stehule
pavel.stehule@gmail.com
In reply to: Pavel Stehule (#69)
#73David E. Wheeler
david@kineticode.com
In reply to: Pavel Stehule (#69)
#74Sam Mason
sam@samason.me.uk
In reply to: Rod Taylor (#70)
#75Robert Haas
robertmhaas@gmail.com
In reply to: David E. Wheeler (#67)
#76Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#71)
#77Heikki Linnakangas
heikki.linnakangas@enterprisedb.com
In reply to: David E. Wheeler (#61)
#78Pavel Stehule
pavel.stehule@gmail.com
In reply to: Heikki Linnakangas (#77)
#79David E. Wheeler
david@kineticode.com
In reply to: Pavel Stehule (#78)
#80Pavel Stehule
pavel.stehule@gmail.com
In reply to: David E. Wheeler (#79)
#81Bruce Momjian
bruce@momjian.us
In reply to: Pavel Stehule (#78)
#82David E. Wheeler
david@kineticode.com
In reply to: Bruce Momjian (#81)
#83Tom Lane
tgl@sss.pgh.pa.us
In reply to: David E. Wheeler (#79)
#84David E. Wheeler
david@kineticode.com
In reply to: Pavel Stehule (#80)
#85Tom Lane
tgl@sss.pgh.pa.us
In reply to: Heikki Linnakangas (#77)
#86Dimitri Fontaine
dimitri@2ndQuadrant.fr
In reply to: Bruce Momjian (#81)
#87Bruce Momjian
bruce@momjian.us
In reply to: Dimitri Fontaine (#86)
#88Doug McNaught
doug@mcnaught.org
In reply to: Bruce Momjian (#87)
#89David E. Wheeler
david@kineticode.com
In reply to: Tom Lane (#83)
#90Michael Meskes
meskes@postgresql.org
In reply to: Tom Lane (#83)
#91Tom Lane
tgl@sss.pgh.pa.us
In reply to: Michael Meskes (#90)
#92David E. Wheeler
david@kineticode.com
In reply to: Tom Lane (#91)
#93Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#91)
#94Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#93)
#95Asko Oja
ascoja@gmail.com
In reply to: Tom Lane (#91)
#96Peter Eisentraut
peter_e@gmx.net
In reply to: Tom Lane (#91)
#97Albert Cervera i Areny
albert@nan-tic.com
In reply to: Peter Eisentraut (#96)
#98Dimitri Fontaine
dimitri@2ndQuadrant.fr
In reply to: Peter Eisentraut (#96)
#99Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dimitri Fontaine (#98)
#100Bruce Momjian
bruce@momjian.us
In reply to: Dimitri Fontaine (#98)
#101David E. Wheeler
david@kineticode.com
In reply to: Tom Lane (#99)
#102Tom Lane
tgl@sss.pgh.pa.us
In reply to: David E. Wheeler (#101)
#103David E. Wheeler
david@kineticode.com
In reply to: Tom Lane (#102)
#104Tom Lane
tgl@sss.pgh.pa.us
In reply to: David E. Wheeler (#103)
#105Bruce Momjian
bruce@momjian.us
In reply to: David E. Wheeler (#103)
#106Grzegorz Jaskiewicz
gj@pointblue.com.pl
In reply to: Tom Lane (#102)
#107Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#99)
#108Dimitri Fontaine
dimitri@2ndQuadrant.fr
In reply to: Tom Lane (#99)
#109Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dimitri Fontaine (#108)
#110Dimitri Fontaine
dimitri@2ndQuadrant.fr
In reply to: Tom Lane (#109)
#111Robert Haas
robertmhaas@gmail.com
In reply to: Dimitri Fontaine (#108)
#112Bruce Momjian
bruce@momjian.us
In reply to: Robert Haas (#111)
#113Robert Haas
robertmhaas@gmail.com
In reply to: Bruce Momjian (#112)
#114Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#112)
#115David E. Wheeler
david@kineticode.com
In reply to: Tom Lane (#114)
#116Pavel Stehule
pavel.stehule@gmail.com
In reply to: Bruce Momjian (#112)
#117Zeugswetter Andreas ADI SD
Andreas.Zeugswetter@s-itsolutions.at
In reply to: Pavel Stehule (#69)
#118Pavel Stehule
pavel.stehule@gmail.com
In reply to: Zeugswetter Andreas ADI SD (#117)
#119Peter Eisentraut
peter_e@gmx.net
In reply to: David E. Wheeler (#115)
#120Peter Eisentraut
peter_e@gmx.net
In reply to: Pavel Stehule (#116)
#121Pavel Stehule
pavel.stehule@gmail.com
In reply to: Peter Eisentraut (#120)
#122David E. Wheeler
david@kineticode.com
In reply to: Peter Eisentraut (#119)