mirror of
https://github.com/postgres/postgres.git
synced 2025-07-11 10:01:57 +03:00
Add temporal PRIMARY KEY and UNIQUE constraints
Add WITHOUT OVERLAPS clause to PRIMARY KEY and UNIQUE constraints. These are backed by GiST indexes instead of B-tree indexes, since they are essentially exclusion constraints with = for the scalar parts of the key and && for the temporal part. Author: Paul A. Jungwirth <pj@illuminatedcomputing.com> Reviewed-by: Peter Eisentraut <peter@eisentraut.org> Reviewed-by: jian he <jian.universality@gmail.com> Discussion: https://www.postgresql.org/message-id/flat/CA+renyUApHgSZF9-nd-a0+OPGharLQLO=mDHcY4_qQ0+noCUVg@mail.gmail.com
This commit is contained in:
@ -1070,3 +1070,32 @@ gist_stratnum_identity(PG_FUNCTION_ARGS)
|
||||
|
||||
PG_RETURN_UINT16(strat);
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns the opclass's private stratnum used for the given strategy.
|
||||
*
|
||||
* Calls the opclass's GIST_STRATNUM_PROC support function, if any,
|
||||
* and returns the result.
|
||||
* Returns InvalidStrategy if the function is not defined.
|
||||
*/
|
||||
StrategyNumber
|
||||
GistTranslateStratnum(Oid opclass, StrategyNumber strat)
|
||||
{
|
||||
Oid opfamily;
|
||||
Oid opcintype;
|
||||
Oid funcid;
|
||||
Datum result;
|
||||
|
||||
/* Look up the opclass family and input datatype. */
|
||||
if (!get_opclass_opfamily_and_input_type(opclass, &opfamily, &opcintype))
|
||||
return InvalidStrategy;
|
||||
|
||||
/* Check whether the function is provided. */
|
||||
funcid = get_opfamily_proc(opfamily, opcintype, opcintype, GIST_STRATNUM_PROC);
|
||||
if (!OidIsValid(funcid))
|
||||
return InvalidStrategy;
|
||||
|
||||
/* Ask the translation function */
|
||||
result = OidFunctionCall1Coll(funcid, InvalidOid, UInt16GetDatum(strat));
|
||||
return DatumGetUInt16(result);
|
||||
}
|
||||
|
Reference in New Issue
Block a user