1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-08 11:42:09 +03:00

Harden tableam against nonexistant / wrong kind of AMs.

Previously it was allowed to set default_table_access_method to an
empty string. That makes sense for default_tablespace, where that was
copied from, as it signals falling back to the database's default
tablespace. As there is no equivalent for table AMs, forbid that.

Also make sure to throw a usable error when creating a table using an
index AM, by using get_am_type_oid() to implement get_table_am_oid()
instead of a separate copy. Previously we'd error out only later, in
GetTableAmRoutine().

Thirdly remove GetTableAmRoutineByAmId() - it was only used in an
earlier version of 8586bf7ed8.

Add tests for the above (some for index AMs as well).
This commit is contained in:
Andres Freund
2019-04-04 17:17:50 -07:00
parent 344b7e11bb
commit ea97e440b8
9 changed files with 119 additions and 110 deletions

View File

@ -189,6 +189,16 @@ get_index_am_oid(const char *amname, bool missing_ok)
return get_am_type_oid(amname, AMTYPE_INDEX, missing_ok);
}
/*
* get_table_am_oid - given an access method name, look up its OID
* and verify it corresponds to an table AM.
*/
Oid
get_table_am_oid(const char *amname, bool missing_ok)
{
return get_am_type_oid(amname, AMTYPE_TABLE, missing_ok);
}
/*
* get_am_oid - given an access method name, look up its OID.
* The type is not checked.