mirror of
https://github.com/postgres/postgres.git
synced 2025-11-04 20:11:56 +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:
@@ -1056,13 +1056,13 @@ typedef struct RangeTblEntry
|
||||
* this RTE in the containing struct's list of same; 0 if permissions need
|
||||
* not be checked for this RTE.
|
||||
*
|
||||
* As a special case, relid, rellockmode, and perminfoindex can also be
|
||||
* set (nonzero) in an RTE_SUBQUERY RTE. This occurs when we convert an
|
||||
* RTE_RELATION RTE naming a view into an RTE_SUBQUERY containing the
|
||||
* view's query. We still need to perform run-time locking and permission
|
||||
* checks on the view, even though it's not directly used in the query
|
||||
* anymore, and the most expedient way to do that is to retain these
|
||||
* fields from the old state of the RTE.
|
||||
* As a special case, relid, relkind, rellockmode, and perminfoindex can
|
||||
* also be set (nonzero) in an RTE_SUBQUERY RTE. This occurs when we
|
||||
* convert an RTE_RELATION RTE naming a view into an RTE_SUBQUERY
|
||||
* containing the view's query. We still need to perform run-time locking
|
||||
* and permission checks on the view, even though it's not directly used
|
||||
* in the query anymore, and the most expedient way to do that is to
|
||||
* retain these fields from the old state of the RTE.
|
||||
*
|
||||
* As a special case, RTE_NAMEDTUPLESTORE can also set relid to indicate
|
||||
* that the tuple format of the tuplestore is the same as the referenced
|
||||
|
||||
Reference in New Issue
Block a user