@@ -1649,7 +1649,8 @@ ERROR: new row violates row-level security policy for table "document"
1649
1649
--
1650
1650
SET SESSION AUTHORIZATION rls_regress_user0;
1651
1651
CREATE TABLE z1 (a int, b text);
1652
- GRANT SELECT ON z1 TO rls_regress_group1, rls_regress_group2,
1652
+ CREATE TABLE z2 (a int, b text);
1653
+ GRANT SELECT ON z1,z2 TO rls_regress_group1, rls_regress_group2,
1653
1654
rls_regress_user1, rls_regress_user2;
1654
1655
INSERT INTO z1 VALUES
1655
1656
(1, 'aaa'),
@@ -1678,6 +1679,46 @@ EXPLAIN (COSTS OFF) SELECT * FROM z1 WHERE f_leak(b);
1678
1679
Filter: ((a % 2) = 0)
1679
1680
(4 rows)
1680
1681
1682
+ PREPARE plancache_test AS SELECT * FROM z1 WHERE f_leak(b);
1683
+ EXPLAIN EXECUTE plancache_test;
1684
+ QUERY PLAN
1685
+ ---------------------------------------------------------------
1686
+ Subquery Scan on z1 (cost=0.00..29.11 rows=2 width=36)
1687
+ Filter: f_leak(z1.b)
1688
+ -> Seq Scan on z1 z1_1 (cost=0.00..29.05 rows=6 width=36)
1689
+ Filter: ((a % 2) = 0)
1690
+ (4 rows)
1691
+
1692
+ PREPARE plancache_test2 AS WITH q AS (SELECT * FROM z1 WHERE f_leak(b)) SELECT * FROM q,z2;
1693
+ EXPLAIN EXECUTE plancache_test2;
1694
+ QUERY PLAN
1695
+ -----------------------------------------------------------------------
1696
+ Nested Loop (cost=29.11..86.78 rows=2540 width=72)
1697
+ CTE q
1698
+ -> Subquery Scan on z1 (cost=0.00..29.11 rows=2 width=36)
1699
+ Filter: f_leak(z1.b)
1700
+ -> Seq Scan on z1 z1_1 (cost=0.00..29.05 rows=6 width=36)
1701
+ Filter: ((a % 2) = 0)
1702
+ -> CTE Scan on q (cost=0.00..0.04 rows=2 width=36)
1703
+ -> Materialize (cost=0.00..29.05 rows=1270 width=36)
1704
+ -> Seq Scan on z2 (cost=0.00..22.70 rows=1270 width=36)
1705
+ (9 rows)
1706
+
1707
+ PREPARE plancache_test3 AS WITH q AS (SELECT * FROM z2) SELECT * FROM q,z1 WHERE f_leak(z1.b);
1708
+ EXPLAIN EXECUTE plancache_test3;
1709
+ QUERY PLAN
1710
+ ---------------------------------------------------------------------------
1711
+ Nested Loop (cost=22.70..108.97 rows=2540 width=72)
1712
+ CTE q
1713
+ -> Seq Scan on z2 (cost=0.00..22.70 rows=1270 width=36)
1714
+ -> CTE Scan on q (cost=0.00..25.40 rows=1270 width=36)
1715
+ -> Materialize (cost=0.00..29.12 rows=2 width=36)
1716
+ -> Subquery Scan on z1 (cost=0.00..29.11 rows=2 width=36)
1717
+ Filter: f_leak(z1.b)
1718
+ -> Seq Scan on z1 z1_1 (cost=0.00..29.05 rows=6 width=36)
1719
+ Filter: ((a % 2) = 0)
1720
+ (9 rows)
1721
+
1681
1722
SET ROLE rls_regress_group1;
1682
1723
SELECT * FROM z1 WHERE f_leak(b);
1683
1724
NOTICE: f_leak => bbb
@@ -1697,6 +1738,43 @@ EXPLAIN (COSTS OFF) SELECT * FROM z1 WHERE f_leak(b);
1697
1738
Filter: ((a % 2) = 0)
1698
1739
(4 rows)
1699
1740
1741
+ EXPLAIN EXECUTE plancache_test;
1742
+ QUERY PLAN
1743
+ ---------------------------------------------------------------
1744
+ Subquery Scan on z1 (cost=0.00..29.11 rows=2 width=36)
1745
+ Filter: f_leak(z1.b)
1746
+ -> Seq Scan on z1 z1_1 (cost=0.00..29.05 rows=6 width=36)
1747
+ Filter: ((a % 2) = 0)
1748
+ (4 rows)
1749
+
1750
+ EXPLAIN EXECUTE plancache_test2;
1751
+ QUERY PLAN
1752
+ -----------------------------------------------------------------------
1753
+ Nested Loop (cost=29.11..86.78 rows=2540 width=72)
1754
+ CTE q
1755
+ -> Subquery Scan on z1 (cost=0.00..29.11 rows=2 width=36)
1756
+ Filter: f_leak(z1.b)
1757
+ -> Seq Scan on z1 z1_1 (cost=0.00..29.05 rows=6 width=36)
1758
+ Filter: ((a % 2) = 0)
1759
+ -> CTE Scan on q (cost=0.00..0.04 rows=2 width=36)
1760
+ -> Materialize (cost=0.00..29.05 rows=1270 width=36)
1761
+ -> Seq Scan on z2 (cost=0.00..22.70 rows=1270 width=36)
1762
+ (9 rows)
1763
+
1764
+ EXPLAIN EXECUTE plancache_test3;
1765
+ QUERY PLAN
1766
+ ---------------------------------------------------------------------------
1767
+ Nested Loop (cost=22.70..108.97 rows=2540 width=72)
1768
+ CTE q
1769
+ -> Seq Scan on z2 (cost=0.00..22.70 rows=1270 width=36)
1770
+ -> CTE Scan on q (cost=0.00..25.40 rows=1270 width=36)
1771
+ -> Materialize (cost=0.00..29.12 rows=2 width=36)
1772
+ -> Subquery Scan on z1 (cost=0.00..29.11 rows=2 width=36)
1773
+ Filter: f_leak(z1.b)
1774
+ -> Seq Scan on z1 z1_1 (cost=0.00..29.05 rows=6 width=36)
1775
+ Filter: ((a % 2) = 0)
1776
+ (9 rows)
1777
+
1700
1778
SET SESSION AUTHORIZATION rls_regress_user2;
1701
1779
SELECT * FROM z1 WHERE f_leak(b);
1702
1780
NOTICE: f_leak => aaa
@@ -1716,6 +1794,43 @@ EXPLAIN (COSTS OFF) SELECT * FROM z1 WHERE f_leak(b);
1716
1794
Filter: ((a % 2) = 1)
1717
1795
(4 rows)
1718
1796
1797
+ EXPLAIN EXECUTE plancache_test;
1798
+ QUERY PLAN
1799
+ ---------------------------------------------------------------
1800
+ Subquery Scan on z1 (cost=0.00..29.11 rows=2 width=36)
1801
+ Filter: f_leak(z1.b)
1802
+ -> Seq Scan on z1 z1_1 (cost=0.00..29.05 rows=6 width=36)
1803
+ Filter: ((a % 2) = 1)
1804
+ (4 rows)
1805
+
1806
+ EXPLAIN EXECUTE plancache_test2;
1807
+ QUERY PLAN
1808
+ -----------------------------------------------------------------------
1809
+ Nested Loop (cost=29.11..86.78 rows=2540 width=72)
1810
+ CTE q
1811
+ -> Subquery Scan on z1 (cost=0.00..29.11 rows=2 width=36)
1812
+ Filter: f_leak(z1.b)
1813
+ -> Seq Scan on z1 z1_1 (cost=0.00..29.05 rows=6 width=36)
1814
+ Filter: ((a % 2) = 1)
1815
+ -> CTE Scan on q (cost=0.00..0.04 rows=2 width=36)
1816
+ -> Materialize (cost=0.00..29.05 rows=1270 width=36)
1817
+ -> Seq Scan on z2 (cost=0.00..22.70 rows=1270 width=36)
1818
+ (9 rows)
1819
+
1820
+ EXPLAIN EXECUTE plancache_test3;
1821
+ QUERY PLAN
1822
+ ---------------------------------------------------------------------------
1823
+ Nested Loop (cost=22.70..108.97 rows=2540 width=72)
1824
+ CTE q
1825
+ -> Seq Scan on z2 (cost=0.00..22.70 rows=1270 width=36)
1826
+ -> CTE Scan on q (cost=0.00..25.40 rows=1270 width=36)
1827
+ -> Materialize (cost=0.00..29.12 rows=2 width=36)
1828
+ -> Subquery Scan on z1 (cost=0.00..29.11 rows=2 width=36)
1829
+ Filter: f_leak(z1.b)
1830
+ -> Seq Scan on z1 z1_1 (cost=0.00..29.05 rows=6 width=36)
1831
+ Filter: ((a % 2) = 1)
1832
+ (9 rows)
1833
+
1719
1834
SET ROLE rls_regress_group2;
1720
1835
SELECT * FROM z1 WHERE f_leak(b);
1721
1836
NOTICE: f_leak => aaa
@@ -1735,6 +1850,43 @@ EXPLAIN (COSTS OFF) SELECT * FROM z1 WHERE f_leak(b);
1735
1850
Filter: ((a % 2) = 1)
1736
1851
(4 rows)
1737
1852
1853
+ EXPLAIN EXECUTE plancache_test;
1854
+ QUERY PLAN
1855
+ ---------------------------------------------------------------
1856
+ Subquery Scan on z1 (cost=0.00..29.11 rows=2 width=36)
1857
+ Filter: f_leak(z1.b)
1858
+ -> Seq Scan on z1 z1_1 (cost=0.00..29.05 rows=6 width=36)
1859
+ Filter: ((a % 2) = 1)
1860
+ (4 rows)
1861
+
1862
+ EXPLAIN EXECUTE plancache_test2;
1863
+ QUERY PLAN
1864
+ -----------------------------------------------------------------------
1865
+ Nested Loop (cost=29.11..86.78 rows=2540 width=72)
1866
+ CTE q
1867
+ -> Subquery Scan on z1 (cost=0.00..29.11 rows=2 width=36)
1868
+ Filter: f_leak(z1.b)
1869
+ -> Seq Scan on z1 z1_1 (cost=0.00..29.05 rows=6 width=36)
1870
+ Filter: ((a % 2) = 1)
1871
+ -> CTE Scan on q (cost=0.00..0.04 rows=2 width=36)
1872
+ -> Materialize (cost=0.00..29.05 rows=1270 width=36)
1873
+ -> Seq Scan on z2 (cost=0.00..22.70 rows=1270 width=36)
1874
+ (9 rows)
1875
+
1876
+ EXPLAIN EXECUTE plancache_test3;
1877
+ QUERY PLAN
1878
+ ---------------------------------------------------------------------------
1879
+ Nested Loop (cost=22.70..108.97 rows=2540 width=72)
1880
+ CTE q
1881
+ -> Seq Scan on z2 (cost=0.00..22.70 rows=1270 width=36)
1882
+ -> CTE Scan on q (cost=0.00..25.40 rows=1270 width=36)
1883
+ -> Materialize (cost=0.00..29.12 rows=2 width=36)
1884
+ -> Subquery Scan on z1 (cost=0.00..29.11 rows=2 width=36)
1885
+ Filter: f_leak(z1.b)
1886
+ -> Seq Scan on z1 z1_1 (cost=0.00..29.05 rows=6 width=36)
1887
+ Filter: ((a % 2) = 1)
1888
+ (9 rows)
1889
+
1738
1890
--
1739
1891
-- Views should follow policy for view owner.
1740
1892
--
0 commit comments