mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Add SQL-accessible functions for inspecting index AM properties.
Per discussion, we should provide such functions to replace the lost ability to discover AM properties by inspecting pg_am (cf commit65c5fcd35
). The added functionality is also meant to displace any code that was looking directly at pg_index.indoption, since we'd rather not believe that the bit meanings in that field are part of any client API contract. As future-proofing, define the SQL API to not assume that properties that are currently AM-wide or index-wide will remain so unless they logically must be; instead, expose them only when inquiring about a specific index or even specific index column. Also provide the ability for an index AM to override the behavior. In passing, document pg_am.amtype, overlooked in commit473b93287
. Andrew Gierth, with kibitzing by me and others Discussion: <87mvl5on7n.fsf@news-spur.riddles.org.uk>
This commit is contained in:
@ -2041,3 +2041,29 @@ btoptions(Datum reloptions, bool validate)
|
||||
{
|
||||
return default_reloptions(reloptions, validate, RELOPT_KIND_BTREE);
|
||||
}
|
||||
|
||||
/*
|
||||
* btproperty() -- Check boolean properties of indexes.
|
||||
*
|
||||
* This is optional, but handling AMPROP_RETURNABLE here saves opening the rel
|
||||
* to call btcanreturn.
|
||||
*/
|
||||
bool
|
||||
btproperty(Oid index_oid, int attno,
|
||||
IndexAMProperty prop, const char *propname,
|
||||
bool *res, bool *isnull)
|
||||
{
|
||||
switch (prop)
|
||||
{
|
||||
case AMPROP_RETURNABLE:
|
||||
/* answer only for columns, not AM or whole index */
|
||||
if (attno == 0)
|
||||
return false;
|
||||
/* otherwise, btree can always return data */
|
||||
*res = true;
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false; /* punt to generic code */
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user