pgsql: Perform RLS WITH CHECK before constraints, etc - Mailing list pgsql-committers

From Stephen Frost
Subject pgsql: Perform RLS WITH CHECK before constraints, etc
Date
Msg-id E1Ylo3y-00083d-EJ@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Perform RLS WITH CHECK before constraints, etc

The RLS capability is built on top of the WITH CHECK OPTION
system which was added for auto-updatable views, however, unlike
WCOs on views (which are mandated by the SQL spec to not fire until
after all other constraints and checks are done), it makes much more
sense for RLS checks to happen earlier than constraint and uniqueness
checks.

This patch reworks the structure which holds the WCOs a bit to be
explicitly either VIEW or RLS checks and the RLS-related checks are
done prior to the constraint and uniqueness checks.  This also allows
better error reporting as we are now reporting when a violation is due
to a WITH CHECK OPTION and when it's due to an RLS policy violation,
which was independently noted by Craig Ringer as being confusing.

The documentation is also updated to include a paragraph about when RLS
WITH CHECK handling is performed, as there have been a number of
questions regarding that and the documentation was previously silent on
the matter.

Author: Dean Rasheed, with some kabitzing and comment changes by me.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/e89bd02f58ac07e44e0388a32b7ee1b42f1fd7c6

Modified Files
--------------
doc/src/sgml/ref/create_policy.sgml                |    8 +++
src/backend/executor/execMain.c                    |   64 +++++++++++++++-----
src/backend/executor/nodeModifyTable.c             |   58 +++++++++++++++---
src/backend/nodes/copyfuncs.c                      |    3 +-
src/backend/nodes/equalfuncs.c                     |    3 +-
src/backend/nodes/outfuncs.c                       |    3 +-
src/backend/nodes/readfuncs.c                      |    3 +-
src/backend/rewrite/rewriteHandler.c               |    3 +-
src/backend/rewrite/rowsecurity.c                  |   26 +++++---
src/include/executor/executor.h                    |    2 +-
src/include/nodes/execnodes.h                      |    2 +-
src/include/nodes/parsenodes.h                     |   15 ++++-
.../test_rls_hooks/expected/test_rls_hooks.out     |   24 ++++----
src/test/regress/expected/rowsecurity.out          |   13 ++--
src/test/regress/sql/rowsecurity.sql               |    4 ++
15 files changed, 175 insertions(+), 56 deletions(-)


pgsql-committers by date:

Previous
From: Noah Misch
Date:
Subject: pgsql: Build every ECPG library with -DFRONTEND.
Next
From: Stephen Frost
Date:
Subject: pgsql: Fix file comment for test_rls_hooks.c