postgresql/contrib
Alvaro Herrera a61b1f7482
Rework query relation permission checking
Currently, information about the permissions to be checked on relations
mentioned in a query is stored in their range table entries.  So the
executor must scan the entire range table looking for relations that
need to have permissions checked.  This can make the permission checking
part of the executor initialization needlessly expensive when many
inheritance children are present in the range range.  While the
permissions need not be checked on the individual child relations, the
executor still must visit every range table entry to filter them out.

This commit moves the permission checking information out of the range
table entries into a new plan node called RTEPermissionInfo.  Every
top-level (inheritance "root") RTE_RELATION entry in the range table
gets one and a list of those is maintained alongside the range table.
This new list is initialized by the parser when initializing the range
table.  The rewriter can add more entries to it as rules/views are
expanded.  Finally, the planner combines the lists of the individual
subqueries into one flat list that is passed to the executor for
checking.

To make it quick to find the RTEPermissionInfo entry belonging to a
given relation, RangeTblEntry gets a new Index field 'perminfoindex'
that stores the corresponding RTEPermissionInfo's index in the query's
list of the latter.

ExecutorCheckPerms_hook has gained another List * argument; the
signature is now:
typedef bool (*ExecutorCheckPerms_hook_type) (List *rangeTable,
					      List *rtePermInfos,
					      bool ereport_on_violation);
The first argument is no longer used by any in-core uses of the hook,
but we leave it in place because there may be other implementations that
do.  Implementations should likely scan the rtePermInfos list to
determine which operations to allow or deny.

Author: Amit Langote <amitlangote09@gmail.com>
Discussion: https://postgr.es/m/CA+HiwqGjJDmUhDSfv-U2qhKJjt9ST7Xh9JXC_irsAQ1TAUsJYg@mail.gmail.com
2022-12-06 16:09:24 +01:00
..
adminpack tests: Rename conflicting role names 2022-10-05 10:43:13 -07:00
amcheck Rename SetSingleFuncCall() to InitMaterializedSRF() 2022-10-18 10:22:35 +09:00
auth_delay Clean up some inconsistencies with GUC declarations 2022-10-31 12:44:48 +09:00
auto_explain meson: Add windows resource files 2022-10-05 09:56:05 -07:00
basebackup_to_shell meson: Add windows resource files 2022-10-05 09:56:05 -07:00
basic_archive Fix calculation related to temporary WAL segment name in basic_archive 2022-10-17 11:40:14 +09:00
bloom If wait_for_catchup fails under has_wal_read_bug, skip balance of test. 2022-11-12 11:19:50 -08:00
bool_plperl meson: Add windows resource files 2022-10-05 09:56:05 -07:00
btree_gin Produce more-optimal plans for bitmap scans on boolean columns. 2022-11-08 10:36:04 -05:00
btree_gist Use C library functions instead of Abs() for int64 2022-10-10 09:01:17 +02:00
citext meson: Add windows resource files 2022-10-05 09:56:05 -07:00
cube Remove unnecessary uses of Abs() 2022-10-07 13:29:33 +02:00
dblink Refactor aclcheck functions 2022-11-13 09:02:41 +01:00
dict_int meson: Add windows resource files 2022-10-05 09:56:05 -07:00
dict_xsyn meson: Add windows resource files 2022-10-05 09:56:05 -07:00
earthdistance meson: Add windows resource files 2022-10-05 09:56:05 -07:00
file_fdw Fix final warnings produced by -Wshadow=compatible-local 2022-10-07 13:13:27 +13:00
fuzzystrmatch Remove AssertArg and AssertState 2022-10-28 09:19:06 +02:00
hstore meson: Add support for building with precompiled headers 2022-10-06 17:19:30 -07:00
hstore_plperl meson: Add windows resource files 2022-10-05 09:56:05 -07:00
hstore_plpython meson: Add windows resource files 2022-10-05 09:56:05 -07:00
intagg meson: Add initial version of meson based build system 2022-09-21 22:37:17 -07:00
intarray Use fabsf() instead of Abs() or fabs() where appropriate 2022-10-08 13:43:26 +02:00
isn meson: Add windows resource files 2022-10-05 09:56:05 -07:00
jsonb_plperl meson: Add windows resource files 2022-10-05 09:56:05 -07:00
jsonb_plpython meson: Add windows resource files 2022-10-05 09:56:05 -07:00
lo meson: Add windows resource files 2022-10-05 09:56:05 -07:00
ltree Remove unnecessary uses of Abs() 2022-10-07 13:29:33 +02:00
ltree_plpython meson: Add windows resource files 2022-10-05 09:56:05 -07:00
oid2name meson: Add windows resource files 2022-10-05 09:56:05 -07:00
old_snapshot meson: Add windows resource files 2022-10-05 09:56:05 -07:00
pageinspect Mark pageinspect's disk-accessing functions as parallel restricted. 2022-11-21 15:37:10 -05:00
passwordcheck tests: Rename conflicting role names 2022-10-05 10:43:13 -07:00
pg_buffercache pg_buffercache: Add pg_buffercache_summary() 2022-10-13 09:55:46 -07:00
pg_freespacemap meson: Add windows resource files 2022-10-05 09:56:05 -07:00
pg_prewarm Clean up some inconsistencies with GUC declarations 2022-10-31 12:44:48 +09:00
pg_stat_statements pg_stat_statements: fetch stmt location/length before it disappears. 2022-11-01 12:48:01 -04:00
pg_surgery Refactor ownercheck functions 2022-11-13 08:12:37 +01:00
pg_trgm Clean up some inconsistencies with GUC declarations 2022-10-31 12:44:48 +09:00
pg_visibility meson: Add windows resource files 2022-10-05 09:56:05 -07:00
pg_walinspect Rename SetSingleFuncCall() to InitMaterializedSRF() 2022-10-18 10:22:35 +09:00
pgcrypto Remove redundant memset call following palloc0 2022-10-13 23:18:00 +02:00
pgrowlocks Rename SetSingleFuncCall() to InitMaterializedSRF() 2022-10-18 10:22:35 +09:00
pgstattuple meson: Add support for building with precompiled headers 2022-10-06 17:19:30 -07:00
postgres_fdw Rework query relation permission checking 2022-12-06 16:09:24 +01:00
seg Use fabsf() instead of Abs() or fabs() where appropriate 2022-10-08 13:43:26 +02:00
sepgsql Rework query relation permission checking 2022-12-06 16:09:24 +01:00
spi meson: Add windows resource files 2022-10-05 09:56:05 -07:00
sslinfo meson: Add windows resource files 2022-10-05 09:56:05 -07:00
start-scripts Remove contrib/start-scripts/osx/. 2017-11-17 12:53:20 -05:00
tablefunc meson: Add windows resource files 2022-10-05 09:56:05 -07:00
tcn meson: Add windows resource files 2022-10-05 09:56:05 -07:00
test_decoding Fix assertion failures while processing NEW_CID record in logical decoding. 2022-10-20 08:49:48 +05:30
tsm_system_rows meson: Add windows resource files 2022-10-05 09:56:05 -07:00
tsm_system_time meson: Add windows resource files 2022-10-05 09:56:05 -07:00
unaccent meson: Add windows resource files 2022-10-05 09:56:05 -07:00
uuid-ossp meson: Add windows resource files 2022-10-05 09:56:05 -07:00
vacuumlo meson: Add windows resource files 2022-10-05 09:56:05 -07:00
xml2 Rename SetSingleFuncCall() to InitMaterializedSRF() 2022-10-18 10:22:35 +09:00
Makefile Add contrib/pg_walinspect. 2022-04-08 00:26:44 -07:00
README Rename 'gmake' to 'make' in docs and recommended commands 2014-02-12 17:29:19 -05:00
contrib-global.mk Respect TEMP_CONFIG when pg_regress_check and friends are called 2016-02-27 12:28:21 -05:00
meson.build meson: Add initial version of meson based build system 2022-09-21 22:37:17 -07:00

README

The PostgreSQL contrib tree
---------------------------

This subtree contains porting tools, analysis utilities, and plug-in
features that are not part of the core PostgreSQL system, mainly
because they address a limited audience or are too experimental to be
part of the main source tree.  This does not preclude their
usefulness.

User documentation for each module appears in the main SGML
documentation.

When building from the source distribution, these modules are not
built automatically, unless you build the "world" target.  You can
also build and install them all by running "make all" and "make
install" in this directory; or to build and install just one selected
module, do the same in that module's subdirectory.

Some directories supply new user-defined functions, operators, or
types.  To make use of one of these modules, after you have installed
the code you need to register the new SQL objects in the database
system by executing a CREATE EXTENSION command.  In a fresh database,
you can simply do

    CREATE EXTENSION module_name;

See the PostgreSQL documentation for more information about this
procedure.