Ensure COPY TO on an RLS-enabled table copies no more than it should.
authorTom Lane
Fri, 10 Mar 2023 18:52:28 +0000 (13:52 -0500)
committerTom Lane
Fri, 10 Mar 2023 18:52:28 +0000 (13:52 -0500)
commit53a53ea332131b3d29d8d69e1dc2823f4d6ff21a
tree2667de68eec9846a477c7fc16ffe05bf27add910
parentd811d74be353283a3c8282b46a0a6e75e89de5f9
Ensure COPY TO on an RLS-enabled table copies no more than it should.

The COPY documentation is quite clear that "COPY relation TO" copies
rows from only the named table, not any inheritance children it may
have.  However, if you enabled row-level security on the table then
this stopped being true, because the code forgot to apply the ONLY
modifier in the "SELECT ... FROM relation" query that it constructs
in order to allow RLS predicates to be attached.  Fix that.

Report and patch by Antonin Houska (comment adjustments and test case
by me).  Back-patch to all supported branches.

Discussion: https://postgr.es/m/3472.1675251957@antos
src/backend/commands/copy.c
src/backend/commands/copyto.c
src/test/regress/expected/rowsecurity.out
src/test/regress/sql/rowsecurity.sql