public inbox for [email protected]
help / color / mirror / Atom feedFrom: Paul Jungwirth <[email protected]>
To: Peter Eisentraut <[email protected]>
To: jian he <[email protected]>
Cc: PostgreSQL Hackers <[email protected]>
Subject: Re: SQL:2011 application time
Date: Sat, 2 Dec 2023 10:41:01 -0800
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
References: <CA+renyUApHgSZF9-nd-a0+OPGharLQLO=mDHcY4_qQ0+noCUVg@mail.gmail.com>
<CACJufxGCWDSK2pYMwNdsyDGk6skbP_L5yvSBK67L6pxbGUF8OQ@mail.gmail.com>
<[email protected]>
<CACJufxG_iZc8hbdcfjkU6q81kLf4R2Fp=VyDZbyhocuTbMNVEw@mail.gmail.com>
<[email protected]>
<CACJufxGnN6-513copYkpgJia6Qq7vKtO6q7cigUpA=4Evozppg@mail.gmail.com>
<CACJufxGsjGXbKT-qbPYtspLxN74B8Q8dBXRZV+HfgqC0hh-ZNQ@mail.gmail.com>
<CACJufxGt4oYfa7UN2eAXymgOKH1irbhC5eY_oNkkdj30w-fefw@mail.gmail.com>
<CACJufxExyO_mN8-OkgaTdgqmE5OfE=RBoQXizf=8uRj4c-pAYw@mail.gmail.com>
<CACJufxGeUsmxOhnd2760kBv-hUWRwCy7A0s45pGSPTe8DJVTGw@mail.gmail.com>
<[email protected]>
<[email protected]>
<[email protected]>
<[email protected]>
<[email protected]>
On Thu, Nov 23, 2023 at 1:08 AM Peter Eisentraut <[email protected]> wrote:
> After further thought, I think the right solution is to change
> btree_gist (and probably also btree_gin) to use the common RT* strategy
> numbers.
Okay. That will mean bumping the version of btree_gist, and you must be running that version to use
the new temporal features, or you will get silly results. Right? Is there a way to protect users
against that and communicate they need to upgrade the extension?
This also means temporal features may not work in custom GIST opclasses. What we're saying is they
must have an appropriate operator for RTEqualStrategyNumber (18) and RTOverlapStrategyNumber (3).
Equal matters for the scalar key part(s), overlap for the range part. So equal is more likely to be
an issue, but overlap matters if we want to support non-ranges (which I'd say is worth doing).
Also if they get it wrong, we won't really have any way to report an error.
I did some research on other extensions in contrib, as well as PostGIS. Here is what I found:
## btree_gin:
3 is =
18 is undefined
same for all types: macaddr8, int2, int4, int8, float4, float8, oid, timestamp, timestamptz, time,
timetz, date, interval, inet, cidr, text, varchar, char, bytea, bit, varbit, numeric, anyenum, uuid,
name, bool, bpchar
## cube
3 is &&
18 is <=>
## intarray
3 is &&
18 is undefined
## ltree
3 is =
18 is undefined
## hstore
3 and 18 are undefined
## seg
3 is &&
18 is undefined
## postgis: geometry
3 is &&
18 is undefined
## postgis: geometry_nd
3 is &&&
18 is undefined
I thought about looking through pgxn for more, but I haven't yet. I may still do that.
But already it seems like there is not much consistency.
So what do you think of this idea instead?:
We could add a new (optional) support function to GiST that translates "well-known" strategy numbers
into the opclass's own strategy numbers. This would be support function 12. Then we can say
translateStrategyNumber(RTEqualStrategyNumber) and look up the operator with the result.
There is not a performance hit, because we do this for the DDL command (create pk/uq/fk), then store
the operator in the index/constraint.
If you don't provide this new support function, then creating the pk/uq/fk fails with a hint about
what you can do to make it work.
This approach means we don't change the rules about GiST opclasses: you can still use the stranums
how you like.
This function would also let me support non-range "temporal" foreign keys, where I'll need to build
queries with && and maybe other operators.
What do you think?
--
Paul ~{:-)
[email protected]
view thread (66+ messages) latest in thread
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: [email protected]
Cc: [email protected], [email protected], [email protected], [email protected]
Subject: Re: SQL:2011 application time
In-Reply-To: <[email protected]>
* 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