Order changes in PG16 since ICU introduction

Started by Regina Obealmost 3 years ago115 messageshackers
Jump to latest
#1Regina Obe
lr@pcorp.us

A couple of days ago, our PostGIS PG16 bots started failing with order
changes in text.
We have our tests set to locale=c

It seems since April 20th, our tests that rely on sorting characters
changed.
As noted in this ticket:

https://trac.osgeo.org/postgis/ticket/5375

I'm assuming it's result of icu change:
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=fcb21b3ac
dcb9a60313325618fd7080aa36f1626

I suspect all our bots are compiling with icu enabled. But I haven't
confirmed.

I'm assuming this is an expected change in behavior, but just want to
confirm.

Thanks,
Regina

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Regina Obe (#1)
Re: Order changes in PG16 since ICU introduction

"Regina Obe" <lr@pcorp.us> writes:

A couple of days ago, our PostGIS PG16 bots started failing with order
changes in text.
We have our tests set to locale=c

It seems since April 20th, our tests that rely on sorting characters
changed.
As noted in this ticket:

https://trac.osgeo.org/postgis/ticket/5375

I'm assuming it's result of icu change:
https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=fcb21b3ac
dcb9a60313325618fd7080aa36f1626

I suspect all our bots are compiling with icu enabled. But I haven't
confirmed.

If they actually are using locale C, I would say this is a bug.
That should designate memcmp sorting and nothing else.

regards, tom lane

#3Jeff Davis
pgsql@j-davis.com
In reply to: Regina Obe (#1)
Re: Order changes in PG16 since ICU introduction

On Fri, 2023-04-21 at 11:27 -0400, Regina Obe wrote:

A couple of days ago, our PostGIS PG16 bots started failing with
order
changes in text.
We have our tests set to locale=c

Are you sure it's still using the C locale? The results seem to be
explainable if the locale switched from "C" to "en-US-x-icu":

The results of the following are the same in v15 and v16:

select 'RM(25)/nodes|+|21|1' collate "C" < 'RM(25)/nodes|-|21|' collate
"C"; -- true

select 'RM(25)/nodes|+|21|1' collate "en-US-x-icu" < 'RM(25)/nodes|-
|21|' collate "en-US-x-icu"; -- false

I suspect when the initdb and configure defaults changed from libc to
ICU, then your locale changed.

Regards,
Jeff Davis

#4strk
strk@keybit.net
In reply to: Tom Lane (#2)
Re: Order changes in PG16 since ICU introduction

On Fri, Apr 21, 2023 at 11:48:51AM -0400, Tom Lane wrote:

"Regina Obe" <lr@pcorp.us> writes:

https://trac.osgeo.org/postgis/ticket/5375

If they actually are using locale C, I would say this is a bug.
That should designate memcmp sorting and nothing else.

Sounds like a bug to me. This is happening with a PostgreSQL cluster
created and served by a build of commit c04c6c5d6f :

=# select version();
PostgreSQL 16devel on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0, 64-bit
=# show lc_collate;
C
=# select '+' < '-';
f
=# select '+' < '-' collate "C";
t

I don't know if it should matter but also:

=# show lc_messages;
C

--strk;

#5Peter Eisentraut
peter_e@gmx.net
In reply to: strk (#4)
Re: Order changes in PG16 since ICU introduction

On 21.04.23 19:09, Sandro Santilli wrote:

On Fri, Apr 21, 2023 at 11:48:51AM -0400, Tom Lane wrote:

"Regina Obe" <lr@pcorp.us> writes:

https://trac.osgeo.org/postgis/ticket/5375

If they actually are using locale C, I would say this is a bug.
That should designate memcmp sorting and nothing else.

Sounds like a bug to me. This is happening with a PostgreSQL cluster
created and served by a build of commit c04c6c5d6f :

=# select version();
PostgreSQL 16devel on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0, 64-bit
=# show lc_collate;
C
=# select '+' < '-';
f

If the database is created with locale provider ICU, then lc_collate
does not apply here, so the result might be correct (depending on what
locale you have set).

Show quoted text

=# select '+' < '-' collate "C";
t

#6Jeff Davis
pgsql@j-davis.com
In reply to: strk (#4)
Re: Order changes in PG16 since ICU introduction

On Fri, 2023-04-21 at 19:09 +0200, Sandro Santilli wrote:

  =# select version();
  PostgreSQL 16devel on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu
11.3.0-1ubuntu1~22.04) 11.3.0, 64-bit
  =# show lc_collate;
  C
  =# select '+' < '-';
  f

What is the result of:

select datlocprovider, datcollate, daticulocale
from pg_database where datname=current_database();

  =# select '+' < '-' collate "C";
  t

Regards,
Jeff Davis

#7Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#5)
Re: Order changes in PG16 since ICU introduction

Peter Eisentraut <peter.eisentraut@enterprisedb.com> writes:

If the database is created with locale provider ICU, then lc_collate
does not apply here, so the result might be correct (depending on what
locale you have set).

FWIW, an installation created under LANG=C defaults to ICU locale
en-US-u-va-posix for me (see psql \l), and that still sorts as
expected on my RHEL8 box. We've not seen buildfarm problems either.

I am wondering however whether this doesn't mean that all our carefully
coded fast paths for C locale just went down the drain. Does the ICU
code have any of that? Has any performance testing been done to see
what impact this change had on C-locale installations? (The current
code coverage report for pg_locale.c is not encouraging.)

regards, tom lane

#8Regina Obe
lr@pcorp.us
In reply to: Tom Lane (#7)
RE: Order changes in PG16 since ICU introduction

Peter Eisentraut <peter.eisentraut@enterprisedb.com> writes:

If the database is created with locale provider ICU, then lc_collate
does not apply here, so the result might be correct (depending on what
locale you have set).

FWIW, an installation created under LANG=C defaults to ICU locale en-US-u-
va-posix for me (see psql \l), and that still sorts as expected on my

RHEL8 box.

We've not seen buildfarm problems either.

I am wondering however whether this doesn't mean that all our carefully
coded fast paths for C locale just went down the drain. Does the ICU code
have any of that? Has any performance testing been done to see what

impact

this change had on C-locale installations? (The current code coverage

report

for pg_locale.c is not encouraging.)

regards, tom lane

Just another metric.

On my mingw64 setup, I built a test database on PG16 (built with icu
support) and PG15 (no icu support)

CREATE DATABASE test TEMPLATE=template0 ENCODING = 'UTF8' LC_COLLATE = 'C'
LC_CTYPE = 'C';

I think the above is the similar setup we have when testing.

On PG15

SELECT '+' < '-' ; returns true

On PG 16 returns false

For PG 16, to strk's point, you have to do: to get a true
SELECT '+' COLLATE "C" < '-' COLLATE "C";

I would expect since I'm initializing my db in collate C they would both
behave the same

#9Tom Lane
tgl@sss.pgh.pa.us
In reply to: Regina Obe (#8)
Re: Order changes in PG16 since ICU introduction

"Regina Obe" <lr@pcorp.us> writes:

On my mingw64 setup, I built a test database on PG16 (built with icu
support) and PG15 (no icu support)

CREATE DATABASE test TEMPLATE=template0 ENCODING = 'UTF8' LC_COLLATE = 'C'
LC_CTYPE = 'C';

As has been pointed out already, setting LC_COLLATE/LC_CTYPE is
meaningless when the locale provider is ICU. You need to look
at what ICU locale is being chosen, or force it with LOCALE = 'C'.

regards, tom lane

#10Regina Obe
lr@pcorp.us
In reply to: Tom Lane (#9)
RE: Order changes in PG16 since ICU introduction

CREATE DATABASE test TEMPLATE=template0 ENCODING = 'UTF8'

LC_COLLATE = 'C'

LC_CTYPE = 'C';

As has been pointed out already, setting LC_COLLATE/LC_CTYPE is
meaningless when the locale provider is ICU. You need to look at what ICU
locale is being chosen, or force it with LOCALE = 'C'.

regards, tom lane

Okay got it was on IRC with RhodiumToad and he suggested:

CREATE DATABASE test2 TEMPLATE=template0 ENCODING = 'UTF8' LC_COLLATE = 'C'
LC_CTYPE = 'C' ICU_LOCALE='C';

Which gives expected result:
SELECT '+' < '-' ; -- true

but gives me a notice:
NOTICE: using standard form "en-US-u-va-posix" for locale "C"

#11Tom Lane
tgl@sss.pgh.pa.us
In reply to: Regina Obe (#10)
Re: Order changes in PG16 since ICU introduction

"Regina Obe" <lr@pcorp.us> writes:

Okay got it was on IRC with RhodiumToad and he suggested:
CREATE DATABASE test2 TEMPLATE=template0 ENCODING = 'UTF8' LC_COLLATE = 'C'
LC_CTYPE = 'C' ICU_LOCALE='C';

Which gives expected result:
SELECT '+' < '-' ; -- true

but gives me a notice:
NOTICE: using standard form "en-US-u-va-posix" for locale "C"

Yeah. My recommendation is just LOCALE:

regression=# CREATE DATABASE test1 TEMPLATE=template0 ENCODING = 'UTF8' LOCALE = 'C';
CREATE DATABASE
regression=# CREATE DATABASE test2 TEMPLATE=template0 ENCODING = 'UTF8' ICU_LOCALE = 'C';
NOTICE: using standard form "en-US-u-va-posix" for locale "C"
CREATE DATABASE

I think it's probably intentional that ICU_LOCALE is stricter
about being given a real ICU locale name, but I didn't write
any of that code.

regards, tom lane

#12Andrew Gierth
andrew@tao11.riddles.org.uk
In reply to: Peter Eisentraut (#5)
Re: Order changes in PG16 since ICU introduction

"Peter" == Peter Eisentraut <peter.eisentraut@enterprisedb.com> writes:

Peter> If the database is created with locale provider ICU, then
Peter> lc_collate does not apply here,

Having lc_collate return a value which is silently being ignored seems
to me rather hugely confusing.

Also, somewhere along the line someone broke initdb --no-locale, which
should result in C locale being the default everywhere, but when I just
tested it it picked 'en' for an ICU locale, which is not the right
thing.

--
Andrew (irc:RhodiumToad)

#13Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Gierth (#12)
Re: Order changes in PG16 since ICU introduction

Andrew Gierth <andrew@tao11.riddles.org.uk> writes:

"Peter" == Peter Eisentraut <peter.eisentraut@enterprisedb.com> writes:
Peter> If the database is created with locale provider ICU, then
Peter> lc_collate does not apply here,

Having lc_collate return a value which is silently being ignored seems
to me rather hugely confusing.

It's not *completely* ignored --- there are bits of code that are not
yet ICU-ified and will still use the libc facilities. So we can't
get rid of those options yet, even in an ICU-based database.

Also, somewhere along the line someone broke initdb --no-locale, which
should result in C locale being the default everywhere, but when I just
tested it it picked 'en' for an ICU locale, which is not the right
thing.

Confirmed:

$ LANG=en_US.utf8 initdb --no-locale
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

Using default ICU locale "en_US".
Using language tag "en-US" for ICU locale "en_US".
The database cluster will be initialized with this locale configuration:
provider: icu
ICU locale: en-US
LC_COLLATE: C
LC_CTYPE: C
...

That needs to be fixed: --no-locale should prevent any consideration
of initdb's LANG/LC_foo environment.

regards, tom lane

#14Regina Obe
lr@pcorp.us
In reply to: Tom Lane (#11)
RE: Order changes in PG16 since ICU introduction

Yeah. My recommendation is just LOCALE:

regression=# CREATE DATABASE test1 TEMPLATE=template0 ENCODING =
'UTF8' LOCALE = 'C'; CREATE DATABASE regression=# CREATE DATABASE test2
TEMPLATE=template0 ENCODING = 'UTF8' ICU_LOCALE = 'C';
NOTICE: using standard form "en-US-u-va-posix" for locale "C"
CREATE DATABASE

I think it's probably intentional that ICU_LOCALE is stricter about being

given

a real ICU locale name, but I didn't write any of that code.

regards, tom lane

CREATE DATABASE test1 TEMPLATE=template0 ENCODING = 'UTF8' LOCALE = 'C';

Doesn't seem to work at least not under mingw64 anyway.

SELECT '+' < '-' ;

Returns false

#15Tom Lane
tgl@sss.pgh.pa.us
In reply to: Regina Obe (#14)
Re: Order changes in PG16 since ICU introduction

"Regina Obe" <lr@pcorp.us> writes:

CREATE DATABASE test1 TEMPLATE=template0 ENCODING = 'UTF8' LOCALE = 'C';
Doesn't seem to work at least not under mingw64 anyway.

Hmm, doesn't work for me either:

$ LANG=en_US.utf8 initdb
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

Using default ICU locale "en_US".
Using language tag "en-US" for ICU locale "en_US".
The database cluster will be initialized with this locale configuration:
provider: icu
ICU locale: en-US
LC_COLLATE: en_US.utf8
LC_CTYPE: en_US.utf8
LC_MESSAGES: en_US.utf8
LC_MONETARY: en_US.utf8
LC_NUMERIC: en_US.utf8
LC_TIME: en_US.utf8
...
$ psql postgres
psql (16devel)
Type "help" for help.

postgres=# SELECT '+' < '-' ;
?column?
----------
f
(1 row)

(as expected, so far)

postgres=# CREATE DATABASE test1 TEMPLATE=template0 ENCODING = 'UTF8' LOCALE = 'C';
CREATE DATABASE
postgres=# \c test1
You are now connected to database "test1" as user "postgres".
test1=# SELECT '+' < '-' ;
?column?
----------
f
(1 row)

(wrong!)

test1=# \l
List of databases
Name | Owner | Encoding | Locale Provider | Collate | Ctype | ICU Locale | ICU Rules | Access privileges
-----------+----------+----------+-----------------+------------+------------+------------+-----------+-----------------------
postgres | postgres | UTF8 | icu | en_US.utf8 | en_US.utf8 | en-US | |
template0 | postgres | UTF8 | icu | en_US.utf8 | en_US.utf8 | en-US | | =c/postgres +
| | | | | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | icu | en_US.utf8 | en_US.utf8 | en-US | | =c/postgres +
| | | | | | | | postgres=CTc/postgres
test1 | postgres | UTF8 | icu | C | C | en-US | |
(4 rows)

Looks like the "pick en-US even when told not to" problem exists here too.

regards, tom lane

#16strk
strk@keybit.net
In reply to: Peter Eisentraut (#5)
Re: Order changes in PG16 since ICU introduction

On Fri, Apr 21, 2023 at 07:14:13PM +0200, Peter Eisentraut wrote:

On 21.04.23 19:09, Sandro Santilli wrote:

On Fri, Apr 21, 2023 at 11:48:51AM -0400, Tom Lane wrote:

"Regina Obe" <lr@pcorp.us> writes:

https://trac.osgeo.org/postgis/ticket/5375

If they actually are using locale C, I would say this is a bug.
That should designate memcmp sorting and nothing else.

Sounds like a bug to me. This is happening with a PostgreSQL cluster
created and served by a build of commit c04c6c5d6f :

=# select version();
PostgreSQL 16devel on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0, 64-bit
=# show lc_collate;
C
=# select '+' < '-';
f

If the database is created with locale provider ICU, then lc_collate does
not apply here, so the result might be correct (depending on what locale you
have set).

The database is created by a perl script which starts like this:

$ENV{"LC_ALL"} = "C";
$ENV{"LANG"} = "C";

And then runs:

createdb --encoding=UTF-8 --template=template0 --lc-collate=C

Should we tweak anything else to make the results predictable ?

--strk;

#17Andrew Gierth
andrew@tao11.riddles.org.uk
In reply to: Tom Lane (#13)
Re: Order changes in PG16 since ICU introduction

"Tom" == Tom Lane <tgl@sss.pgh.pa.us> writes:

Also, somewhere along the line someone broke initdb --no-locale,
which should result in C locale being the default everywhere, but
when I just tested it it picked 'en' for an ICU locale, which is not
the right thing.

Tom> Confirmed:

Tom> $ LANG=en_US.utf8 initdb --no-locale
Tom> The files belonging to this database system will be owned by user "postgres".
Tom> This user must also own the server process.

Tom> Using default ICU locale "en_US".
Tom> Using language tag "en-US" for ICU locale "en_US".
Tom> The database cluster will be initialized with this locale configuration:
Tom> provider: icu
Tom> ICU locale: en-US
Tom> LC_COLLATE: C
Tom> LC_CTYPE: C
Tom> ...

Tom> That needs to be fixed: --no-locale should prevent any
Tom> consideration of initdb's LANG/LC_foo environment.

Would it also not make sense to also take into account any --locale and
--lc-* options before choosing an ICU default locale? Right now if you
do, say, initdb --locale=fr_FR you get an ICU locale based on the
environment but lc_* settings based on the option, which seems maximally
confusing.

Also, what happens now to lc_collate_is_c() when the provider is ICU? Am
I missing something, or is it never true now, even if you specified C /
POSIX / en-US-u-va-posix as the ICU locale? This seems like it could be
an important pessimization.

Also also, we now have the problem that it is much harder to create a
'C' collation database within an existing cluster (e.g. for testing)
without knowing whether the default provider is ICU. In the past one
would have done:

CREATE DATABASE test TEMPLATE=template0 ENCODING = 'UTF8' LOCALE = 'C';

but now that creates a database that uses the same ICU locale as
template0 by default. If instead one tries:

CREATE DATABASE test TEMPLATE=template0 ENCODING = 'UTF8' LOCALE = 'C' ICU_LOCALE='C';

then one gets an error if the default locale provider is _not_ ICU. The
only option now seems to be:

CREATE DATABASE test TEMPLATE=template0 ENCODING = 'UTF8' LOCALE = 'C' LOCALE_PROVIDER = 'libc';

which of course doesn't work in older pg versions.

--
Andrew.

#18strk
strk@keybit.net
In reply to: Jeff Davis (#6)
Re: Order changes in PG16 since ICU introduction

On Fri, Apr 21, 2023 at 10:27:49AM -0700, Jeff Davis wrote:

On Fri, 2023-04-21 at 19:09 +0200, Sandro Santilli wrote:

� =# select version();
� PostgreSQL 16devel on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu
11.3.0-1ubuntu1~22.04) 11.3.0, 64-bit
� =# show lc_collate;
� C
� =# select '+' < '-';
� f

What is the result of:

select datlocprovider, datcollate, daticulocale
from pg_database where datname=current_database();

datlocprovider | i
datcollate | C
daticulocale | en-US

--strk;

#19Jeff Davis
pgsql@j-davis.com
In reply to: Tom Lane (#15)
Re: Order changes in PG16 since ICU introduction

On Fri, 2023-04-21 at 14:23 -0400, Tom Lane wrote:

postgres=# CREATE DATABASE test1 TEMPLATE=template0 ENCODING = 'UTF8'
LOCALE = 'C';

...

 test1     | postgres | UTF8     | icu             | C          |
C          | en-US      |           |
(4 rows)

Looks like the "pick en-US even when told not to" problem exists here
too.

Both provider (ICU) and the icu locale (en-US) are inherited from
template0. The LOCALE parameter to CREATE DATABASE doesn't affect
either of those things, because there's a separate parameter
ICU_LOCALE.

This happens the same way in v15, and although it matches the
documentation technically, it is not a great user experience.

I have a couple ideas:

1. Introduce a "none" provider to separate the concept of C/POSIX
locales from the libc provider. It's not really using a provider
anyway, it's just using memcmp(), and I think it causes confusion to
combine them. Saying "LOCALE_PROVIDER=none" is less error-prone than
"LOCALE_PROVIDER=libc LOCALE='C'".

2. Change the CREATE DATABASE syntax to catch these errors better at
the possible expense of backwards compatibility.

I am also having second thoughts about accepting "C" or "POSIX" as an
ICU locale and transforming it to "en-US-u-va-posix" in v16. It's not
terribly useful (why not just use memcmp()?), it's not fast in my
measurements (en-US is faster), so maybe it's better to just throw an
error and tell the user to use C (or provider=none as I suggest
above)? 

Obviously the user could manually type "en-US-u-va-posix" if that's the
locale they want. Throwing an error would be a backwards-compatibility
issue, but in v15 an ICU locale of "C" just gives the root locale
anyway, which is probably not what they want.

Regards,
Jeff Davis

#20Tom Lane
tgl@sss.pgh.pa.us
In reply to: Jeff Davis (#19)
Re: Order changes in PG16 since ICU introduction

Jeff Davis <pgsql@j-davis.com> writes:

I have a couple ideas:

1. Introduce a "none" provider to separate the concept of C/POSIX
locales from the libc provider. It's not really using a provider
anyway, it's just using memcmp(), and I think it causes confusion to
combine them. Saying "LOCALE_PROVIDER=none" is less error-prone than
"LOCALE_PROVIDER=libc LOCALE='C'".

I think I might like this idea, except for one thing: you're imagining
that the locale doesn't control anything except string comparisons.
What about to_upper/to_lower, character classifications in regexes, etc?
(I'm not sure whether those operations can get redirected to ICU today
or whether they still always go to libc, but we'll surely want to fix
it eventually if the latter is still true.)

In any case, that seems somewhat orthogonal to what we're on about here,
which is making the behavior of CREATE DATABASE less surprising and more
backwards-compatible. I'm not sure that provider=none can help with that.
Aside from the user-surprise issues discussed up to now, pg_dump scripts
emitted by pre-v15 pg_dump are not going to contain LOCALE_PROVIDER
clauses in CREATE DATABASE, and people are going to be very unhappy
if that means they suddenly get totally different locale semantics
after restoring into a new DB. I think we need some plan for mapping
libc-style locale specs into ICU locales so that we can make that
more nearly transparent.

2. Change the CREATE DATABASE syntax to catch these errors better at
the possible expense of backwards compatibility.

That is the exact opposite of what I think we need. Backwards
compatibility isn't optional.

Maybe this means we are not ready to do ICU-by-default in v16.
It certainly feels like there might be more here than we want to
start designing post-feature-freeze.

regards, tom lane

#21Jeff Davis
pgsql@j-davis.com
In reply to: strk (#16)
#22Jeff Davis
pgsql@j-davis.com
In reply to: Tom Lane (#7)
#23Robert Haas
robertmhaas@gmail.com
In reply to: Jeff Davis (#19)
#24Jeff Davis
pgsql@j-davis.com
In reply to: Andrew Gierth (#12)
#25Jeff Davis
pgsql@j-davis.com
In reply to: Tom Lane (#20)
#26Andrew Gierth
andrew@tao11.riddles.org.uk
In reply to: Jeff Davis (#24)
#27Jeff Davis
pgsql@j-davis.com
In reply to: Andrew Gierth (#26)
#28Andrew Gierth
andrew@tao11.riddles.org.uk
In reply to: Jeff Davis (#27)
#29Jeff Davis
pgsql@j-davis.com
In reply to: Robert Haas (#23)
#30Regina Obe
lr@pcorp.us
In reply to: Jeff Davis (#29)
#31Jeff Davis
pgsql@j-davis.com
In reply to: Robert Haas (#23)
#32Robert Haas
robertmhaas@gmail.com
In reply to: Jeff Davis (#29)
#33Peter Eisentraut
peter_e@gmx.net
In reply to: Peter Eisentraut (#5)
#34Peter Eisentraut
peter_e@gmx.net
In reply to: Jeff Davis (#31)
#35Jeff Davis
pgsql@j-davis.com
In reply to: Tom Lane (#20)
#36Daniel Verite
daniel@manitou-mail.org
In reply to: Jeff Davis (#35)
#37Tom Lane
tgl@sss.pgh.pa.us
In reply to: Daniel Verite (#36)
#38Jeff Davis
pgsql@j-davis.com
In reply to: Andrew Gierth (#28)
#39Daniel Verite
daniel@manitou-mail.org
In reply to: Jeff Davis (#38)
#40Jeff Davis
pgsql@j-davis.com
In reply to: Daniel Verite (#39)
#41Jeff Davis
pgsql@j-davis.com
In reply to: Jeff Davis (#40)
#42Jeff Davis
pgsql@j-davis.com
In reply to: Robert Haas (#32)
#43Tom Lane
tgl@sss.pgh.pa.us
In reply to: Jeff Davis (#41)
#44Jeff Davis
pgsql@j-davis.com
In reply to: Tom Lane (#43)
#45Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Peter Eisentraut (#33)
#46Jeff Davis
pgsql@j-davis.com
In reply to: Alvaro Herrera (#45)
#47Peter Eisentraut
peter_e@gmx.net
In reply to: Alvaro Herrera (#45)
#48Peter Eisentraut
peter_e@gmx.net
In reply to: Jeff Davis (#46)
#49Jeff Davis
pgsql@j-davis.com
In reply to: Jeff Davis (#41)
#50Alexander Lakhin
exclusion@gmail.com
In reply to: Jeff Davis (#44)
#51Peter Eisentraut
peter_e@gmx.net
In reply to: Jeff Davis (#49)
#52Jeff Davis
pgsql@j-davis.com
In reply to: Alexander Lakhin (#50)
#53Jeff Davis
pgsql@j-davis.com
In reply to: Jeff Davis (#44)
#54Alexander Lakhin
exclusion@gmail.com
In reply to: Jeff Davis (#52)
#55Jeff Davis
pgsql@j-davis.com
In reply to: Alexander Lakhin (#54)
#56Jonathan S. Katz
jkatz@postgresql.org
In reply to: Jeff Davis (#42)
#57Jeff Davis
pgsql@j-davis.com
In reply to: Jonathan S. Katz (#56)
#58Jeff Davis
pgsql@j-davis.com
In reply to: Jeff Davis (#57)
#59Jonathan S. Katz
jkatz@postgresql.org
In reply to: Jeff Davis (#58)
#60Jeff Davis
pgsql@j-davis.com
In reply to: Jonathan S. Katz (#59)
#61Jonathan S. Katz
jkatz@postgresql.org
In reply to: Jeff Davis (#60)
#62Matthias van de Meent
boekewurm+postgres@gmail.com
In reply to: Jeff Davis (#24)
#63Jeff Davis
pgsql@j-davis.com
In reply to: Jonathan S. Katz (#61)
#64Jeff Davis
pgsql@j-davis.com
In reply to: Matthias van de Meent (#62)
#65Daniel Verite
daniel@manitou-mail.org
In reply to: Jeff Davis (#64)
#66Tom Lane
tgl@sss.pgh.pa.us
In reply to: Jeff Davis (#60)
#67Jeff Davis
pgsql@j-davis.com
In reply to: Daniel Verite (#65)
#68Peter Eisentraut
peter_e@gmx.net
In reply to: Jeff Davis (#60)
#69Peter Eisentraut
peter_e@gmx.net
In reply to: Jeff Davis (#58)
#70Jeff Davis
pgsql@j-davis.com
In reply to: Peter Eisentraut (#48)
#71Jeff Davis
pgsql@j-davis.com
In reply to: Peter Eisentraut (#47)
#72Jeff Davis
pgsql@j-davis.com
In reply to: Peter Eisentraut (#68)
#73Daniel Verite
daniel@manitou-mail.org
In reply to: Jeff Davis (#67)
#74Jeff Davis
pgsql@j-davis.com
In reply to: Daniel Verite (#73)
#75Joe Conway
mail@joeconway.com
In reply to: Jeff Davis (#74)
#76Jeff Davis
pgsql@j-davis.com
In reply to: Peter Eisentraut (#51)
#77Jeff Davis
pgsql@j-davis.com
In reply to: Peter Eisentraut (#69)
#78Daniel Verite
daniel@manitou-mail.org
In reply to: Jeff Davis (#74)
#79Jeff Davis
pgsql@j-davis.com
In reply to: Daniel Verite (#78)
#80Jeff Davis
pgsql@j-davis.com
In reply to: Jeff Davis (#76)
#81Daniel Verite
daniel@manitou-mail.org
In reply to: Jeff Davis (#80)
#82Joe Conway
mail@joeconway.com
In reply to: Daniel Verite (#81)
#83Jeff Davis
pgsql@j-davis.com
In reply to: Joe Conway (#82)
#84Joe Conway
mail@joeconway.com
In reply to: Jeff Davis (#83)
#85Jeff Davis
pgsql@j-davis.com
In reply to: Daniel Verite (#81)
#86Joe Conway
mail@joeconway.com
In reply to: Jeff Davis (#85)
#87Tom Lane
tgl@sss.pgh.pa.us
In reply to: Joe Conway (#86)
#88Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#87)
#89Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#88)
#90Joe Conway
mail@joeconway.com
In reply to: Tom Lane (#89)
#91Jonathan S. Katz
jkatz@postgresql.org
In reply to: Joe Conway (#90)
#92Tom Lane
tgl@sss.pgh.pa.us
In reply to: Jonathan S. Katz (#91)
#93Andrew Gierth
andrew@tao11.riddles.org.uk
In reply to: Joe Conway (#90)
#94Peter Eisentraut
peter_e@gmx.net
In reply to: Jeff Davis (#71)
#95Daniel Verite
daniel@manitou-mail.org
In reply to: Jeff Davis (#85)
#96Peter Eisentraut
peter_e@gmx.net
In reply to: Jeff Davis (#80)
#97Peter Eisentraut
peter_e@gmx.net
In reply to: Jeff Davis (#80)
#98Jeff Davis
pgsql@j-davis.com
In reply to: Daniel Verite (#95)
#99Jeff Davis
pgsql@j-davis.com
In reply to: Peter Eisentraut (#97)
#100Tatsuo Ishii
t-ishii@sra.co.jp
In reply to: Jeff Davis (#98)
#101Joe Conway
mail@joeconway.com
In reply to: Jeff Davis (#99)
#102Tatsuo Ishii
t-ishii@sra.co.jp
In reply to: Tatsuo Ishii (#100)
#103Daniel Verite
daniel@manitou-mail.org
In reply to: Tatsuo Ishii (#100)
#104Daniel Verite
daniel@manitou-mail.org
In reply to: Jeff Davis (#98)
#105Jeff Davis
pgsql@j-davis.com
In reply to: Joe Conway (#101)
#106Joe Conway
mail@joeconway.com
In reply to: Jeff Davis (#105)
#107Jeff Davis
pgsql@j-davis.com
In reply to: Andrew Gierth (#93)
#108Daniel Verite
daniel@manitou-mail.org
In reply to: Jeff Davis (#107)
#109Jeff Davis
pgsql@j-davis.com
In reply to: Daniel Verite (#108)
#110Daniel Verite
daniel@manitou-mail.org
In reply to: Jeff Davis (#109)
#111Peter Eisentraut
peter_e@gmx.net
In reply to: Jeff Davis (#107)
#112Jeff Davis
pgsql@j-davis.com
In reply to: Peter Eisentraut (#111)
#113Jeff Davis
pgsql@j-davis.com
In reply to: Peter Eisentraut (#111)
#114Peter Eisentraut
peter_e@gmx.net
In reply to: Jeff Davis (#112)
#115Jeff Davis
pgsql@j-davis.com
In reply to: Peter Eisentraut (#114)