]> granicus.if.org Git - postgresql/commitdiff
Make pg_dumpall's database ACL query independent of hash table order.
authorAndres Freund <andres@anarazel.de>
Thu, 13 Oct 2016 01:29:57 +0000 (18:29 -0700)
committerAndres Freund <andres@anarazel.de>
Thu, 13 Oct 2016 01:29:57 +0000 (18:29 -0700)
Previously GRANT order on databases was not well defined, due to the use
of EXCEPT without an ORDER BY.  Add an ORDER BY, adapt test output.

I don't, at the moment, see reason to backpatch this.

src/bin/pg_dump/pg_dumpall.c
src/bin/pg_dump/t/002_pg_dump.pl

index 82157e5620f81c410da994b7a2884f6cef0039ae..45749f3e644feccf6966c13ba75197a2633acb1b 100644 (file)
@@ -1307,11 +1307,13 @@ dumpCreateDB(PGconn *conn)
                                                   "pg_encoding_to_char(d.encoding), "
                                                   "datcollate, datctype, datfrozenxid, datminmxid, "
                                                   "datistemplate, "
-                                                  "(SELECT pg_catalog.array_agg(acl) FROM (SELECT pg_catalog.unnest(coalesce(datacl,pg_catalog.acldefault('d',datdba))) AS acl "
-                                                  "EXCEPT SELECT pg_catalog.unnest(pg_catalog.acldefault('d',datdba))) as foo)"
+                                                  "(SELECT pg_catalog.array_agg(acl ORDER BY acl::text) FROM ( "
+                                                  "  SELECT pg_catalog.unnest(coalesce(datacl,pg_catalog.acldefault('d',datdba))) AS acl "
+                                                  "  EXCEPT SELECT pg_catalog.unnest(pg_catalog.acldefault('d',datdba))) as datacls)"
                                                   "AS datacl, "
-                                                  "(SELECT pg_catalog.array_agg(acl) FROM (SELECT pg_catalog.unnest(pg_catalog.acldefault('d',datdba)) AS acl "
-                                                  "EXCEPT SELECT pg_catalog.unnest(coalesce(datacl,pg_catalog.acldefault('d',datdba)))) as foo)"
+                                                  "(SELECT pg_catalog.array_agg(acl ORDER BY acl::text) FROM ( "
+                                                  "  SELECT pg_catalog.unnest(pg_catalog.acldefault('d',datdba)) AS acl "
+                                                  "  EXCEPT SELECT pg_catalog.unnest(coalesce(datacl,pg_catalog.acldefault('d',datdba)))) as rdatacls)"
                                                   "AS rdatacl, "
                                                   "datconnlimit, "
                                                   "(SELECT spcname FROM pg_tablespace t WHERE t.oid = d.dattablespace) AS dattablespace "
index 37cbdcdaa5990e374baea8fee7902eab8d0da95e..1d3af87334f01659e7a977cc0eaf6039715d3fe7 100644 (file)
@@ -2484,6 +2484,7 @@ qr/^GRANT SELECT ON TABLE test_third_table TO regress_dump_test_role;/m,
                create_sql   => 'REVOKE CONNECT ON DATABASE dump_test FROM public;',
                regexp       => qr/^
                        \QREVOKE CONNECT,TEMPORARY ON DATABASE dump_test FROM PUBLIC;\E\n
+                       \QGRANT CREATE ON DATABASE dump_test TO regress_dump_test_role;\E\n
                        \QGRANT TEMPORARY ON DATABASE dump_test TO PUBLIC;\E
                        /xm,
                like   => { pg_dumpall_dbprivs => 1, },