mirror of
https://github.com/postgres/postgres.git
synced 2025-06-14 18:42:34 +03:00
Retain relkind too in RTE_SUBQUERY entries for views.
47bb9db75
modified the ApplyRetrieveRule()'s conversion of a view's
original RTE_RELATION entry into an RTE_SUBQUERY one to retain relid,
rellockmode, and perminfoindex so that the executor can lock the view
and check its permissions. It seems better to also retain
relkind for cross-checking that the exception of an
RTE_SUBQUERY entry being allowed to carry relation details only
applies to views, so do so.
Bump catversion because this changes the output format of
RTE_SUBQUERY RTEs.
Suggested-by: David Steele <david@pgmasters.net>
Reviewed-by: David Steele <david@pgmasters.net>
Reviewed-by: Álvaro Herrera <alvherre@alvh.no-ip.org>
Discussion: https://postgr.es/m/3953179e-9540-e5d1-a743-4bef368785b0%40pgmasters.net
This commit is contained in:
@ -595,6 +595,15 @@ ExecCheckPermissions(List *rangeTable, List *rteperminfos,
|
||||
if (rte->perminfoindex != 0)
|
||||
{
|
||||
/* Sanity checks */
|
||||
|
||||
/*
|
||||
* Only relation RTEs and subquery RTEs that were once relation
|
||||
* RTEs (views) have their perminfoindex set.
|
||||
*/
|
||||
Assert(rte->rtekind == RTE_RELATION ||
|
||||
(rte->rtekind == RTE_SUBQUERY &&
|
||||
rte->relkind == RELKIND_VIEW));
|
||||
|
||||
(void) getRTEPermissionInfo(rteperminfos, rte);
|
||||
/* Many-to-one mapping not allowed */
|
||||
Assert(!bms_is_member(rte->perminfoindex, indexset));
|
||||
|
Reference in New Issue
Block a user