Allow non-btree speculative insertion indexes
Previously, only btrees were supported as the arbiter index for speculative insertion because there was no way to get the equality strategy number for other index methods. We have this now (commit c09e5a6a016), so we can support this. At the moment, only btree supports unique indexes, so this does not change anything in practice, but it would allow another index method that has amcanunique to be supported. Co-authored-by: Mark Dilger <mark.dilger@enterprisedb.com> Discussion: https://www.postgresql.org/message-id/flat/E72EAA49-354D-4C2E-8EB9-255197F55330@enterprisedb.com
This commit is contained in:
parent
bfe21b760e
commit
b92c03342d
@ -2677,9 +2677,6 @@ BuildSpeculativeIndexInfo(Relation index, IndexInfo *ii)
|
||||
*/
|
||||
Assert(ii->ii_Unique);
|
||||
|
||||
if (index->rd_rel->relam != BTREE_AM_OID)
|
||||
elog(ERROR, "unexpected non-btree speculative unique index");
|
||||
|
||||
ii->ii_UniqueOps = (Oid *) palloc(sizeof(Oid) * indnkeyatts);
|
||||
ii->ii_UniqueProcs = (Oid *) palloc(sizeof(Oid) * indnkeyatts);
|
||||
ii->ii_UniqueStrats = (uint16 *) palloc(sizeof(uint16) * indnkeyatts);
|
||||
@ -2691,7 +2688,12 @@ BuildSpeculativeIndexInfo(Relation index, IndexInfo *ii)
|
||||
/* We need the func OIDs and strategy numbers too */
|
||||
for (i = 0; i < indnkeyatts; i++)
|
||||
{
|
||||
ii->ii_UniqueStrats[i] = BTEqualStrategyNumber;
|
||||
ii->ii_UniqueStrats[i] =
|
||||
IndexAmTranslateCompareType(COMPARE_EQ,
|
||||
index->rd_rel->relam,
|
||||
index->rd_opfamily[i],
|
||||
index->rd_opcintype[i],
|
||||
false);
|
||||
ii->ii_UniqueOps[i] =
|
||||
get_opfamily_member(index->rd_opfamily[i],
|
||||
index->rd_opcintype[i],
|
||||
|
Loading…
x
Reference in New Issue
Block a user