agora inbox for pgsql-hackers@postgresql.org  
help / color / mirror / Atom feed
From: Stephen Frost <sfrost@snowman.net>
To: Thomas Munro <thomas.munro@enterprisedb.com>
Cc: Douglas Doole <dougdoole@gmail.com>
Cc: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
Cc: Christoph Berg <myon@debian.org>
Cc: Pg Hackers <pgsql-hackers@postgresql.org>
Subject: Re: Collation versioning
Date: Tue, 18 Sep 2018 21:16:07 -0400
Message-ID: <20180919011607.GU4184@tamriel.snowman.net> (raw)
In-Reply-To: <CAEepm=3WYE1xqkXk8vV59dzHCZ_qpqk1ptQ9Q0p0YRh-8inK=Q@mail.gmail.com>
References: <CADE5jYKn6FA0a35P+_HJuSb_abq-D5Z-nE6rO9brjpu8jBTMgA@mail.gmail.com>
	<CAEepm=3-rxTzk3anR1QA=tuNrbAQ_ejJ2rj5Hp_y5hdJQr=rEw@mail.gmail.com>
	<20180916210215.GE4184@tamriel.snowman.net>
	<CAEepm=1wPRi4-YZaSvLXhpzO-6BEyPjBz0qBGpuQ-nmYKAhuvQ@mail.gmail.com>
	<20180918124835.GZ4184@tamriel.snowman.net>
	<CAEepm=1XCyNbhEaU+1tG_dFDVje=q98dg2uQJoJPWMu6HEjW2g@mail.gmail.com>
	<20180918215451.GQ4184@tamriel.snowman.net>
	<CADE5jYL9MRNTRacvCAcPo9bpBo095ReGC1CSYHy-qmuPisX2iw@mail.gmail.com>
	<20180918220931.GS4184@tamriel.snowman.net>
	<CAEepm=3WYE1xqkXk8vV59dzHCZ_qpqk1ptQ9Q0p0YRh-8inK=Q@mail.gmail.com>

Greetings,

* Thomas Munro (thomas.munro@enterprisedb.com) wrote:
> On Wed, Sep 19, 2018 at 10:09 AM Stephen Frost <sfrost@snowman.net> wrote:
> > * Douglas Doole (dougdoole@gmail.com) wrote:
> > > > The CHECK constraint doesn't need to directly track that information-
> > > > it should have a dependency on the column in the table and that's where
> > > > the information would be recorded about the current collation version.
> > >
> > > Just to have fun throwing odd cases out, how would something like this be
> > > recorded?
> > >
> > > Database default collation: en_US
> > >
> > > CREATE TABLE t (c1 TEXT, c2 TEXT, c3 TEXT,
> > >      CHECK (c1 COLLATE "fr_FR" BETWEEN c2 COLLATE "fr_FR" AND c3 COLLATE
> > > "fr_FR"));
> > >
> > > You could even be really warped and apply multiple collations on a single
> > > column in a single constraint.
> >
> > Once it gets to an expression and not just a simple check, I'd think
> > we'd record it in the expression..
> 
> Maybe I misunderstood, but I don't think it makes sense to have a
> collation version "on the column in the table", because (1) that fails
> to capture the fact that two CHECK constraints that were defined at
> different times might have become dependent on two different versions
> (you created one constraint before upgrading and the other after, now
> the older one is invalidated and sounds the alarm but the second one
> is fine), and (2) the table itself doesn't care about collation
> versions since heap tables are unordered; there is no particular
> operation on the table that would be the correct time to update the
> collation version on a table/column.  What we're trying to track is
> when objects that in some way depend on the version become
> invalidated, so wherever we store it there's going to have to be a
> version recorded per dependent object at its creation time, so that's
> either new columns on every interested catalog table, or ...

Today, we work out what operators to use for a given column based on the
data type.  This is why I was trying to get at the idea of using typmod
earlier, but if we can't make that work then I'm inclined to try and
figure out a way to get it as close as possible to being associated with
the type.

Yes, the heap is unordered, but the type *is* ordered and we track that
with the type system.  Maybe we just extend that somehow, rather than
using the typmod or adding columns into catalogs where we store type
information (such as pg_attribute).  Perhaps typmod could be made larger
to be able to support this, that might be another approach.

No where in this does it strike me that it makes sense to push this into
pg_depend though.

Thanks!

Stephen

Attachments:

  [application/pgp-signature] signature.asc (818B, ../20180919011607.GU4184@tamriel.snowman.net/2-signature.asc)
  download

view thread (188+ messages)  latest in thread

Message-ID: <20180919011607.GU4184@tamriel.snowman.net>
Permalink:  ../20180919011607.GU4184@tamriel.snowman.net/
Also on:    postgresql.org/message-id/20180919011607.GU4184@tamriel.snowman.net

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-hackers@postgresql.org
  Cc: sfrost@snowman.net, thomas.munro@enterprisedb.com, dougdoole@gmail.com, peter.eisentraut@2ndquadrant.com, myon@debian.org
  Subject: Re: Collation versioning
  In-Reply-To: <20180919011607.GU4184@tamriel.snowman.net>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox