diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql
index fc94a73a54..52732158db 100644
--- a/src/backend/catalog/system_views.sql
+++ b/src/backend/catalog/system_views.sql
@@ -510,6 +510,268 @@ FROM
     pg_shseclabel l
     JOIN pg_authid rol ON l.classoid = rol.tableoid AND l.objoid = rol.oid;
 
+CREATE VIEW pg_permissions AS
+  SELECT
+    a.regclass,
+    a.obj_desc,
+    grantor.rolname AS grantor,
+    grantee.rolname AS grantee,
+    a.privilege_type,
+    a.is_grantable
+  FROM
+  (
+    SELECT
+      'pg_attribute'::regclass
+      AS regclass,
+      pg_describe_object('pg_class'::regclass,aa.attrelid,aa.attnum)
+      AS obj_desc,
+      (aclexplode(aa.attacl)).*
+    FROM pg_catalog.pg_attribute AS aa
+  ) AS a
+  JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor
+  JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee
+UNION ALL
+  SELECT
+    a.regclass,
+    a.obj_desc,
+    grantor.rolname AS grantor,
+    grantee.rolname AS grantee,
+    a.privilege_type,
+    a.is_grantable
+  FROM
+  (
+    SELECT
+      'pg_class'::regclass
+      AS regclass,
+      pg_describe_object('pg_class'::regclass,aa.oid,0)
+      AS obj_desc,
+      (aclexplode(aa.relacl)).*
+    FROM pg_catalog.pg_class AS aa
+  ) AS a
+  JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor
+  JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee
+UNION ALL
+  SELECT
+    a.regclass,
+    a.obj_desc,
+    grantor.rolname AS grantor,
+    grantee.rolname AS grantee,
+    a.privilege_type,
+    a.is_grantable
+  FROM
+  (
+    SELECT
+      'pg_database'::regclass
+      AS regclass,
+      pg_describe_object('pg_database'::regclass,aa.oid,0)
+      AS obj_desc,
+      (aclexplode(aa.datacl)).*
+    FROM pg_catalog.pg_database AS aa
+  ) AS a
+  JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor
+  JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee
+UNION ALL
+  SELECT
+    a.regclass,
+    a.obj_desc,
+    grantor.rolname AS grantor,
+    grantee.rolname AS grantee,
+    a.privilege_type,
+    a.is_grantable
+  FROM
+  (
+    SELECT
+      'pg_default_acl'::regclass
+      AS regclass,
+      pg_describe_object('pg_default_acl'::regclass,aa.oid,0)
+      AS obj_desc,
+      (aclexplode(aa.defaclacl)).*
+    FROM pg_catalog.pg_default_acl AS aa
+  ) AS a
+  JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor
+  JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee
+UNION ALL
+  SELECT
+    a.regclass,
+    a.obj_desc,
+    grantor.rolname AS grantor,
+    grantee.rolname AS grantee,
+    a.privilege_type,
+    a.is_grantable
+  FROM
+  (
+    SELECT
+      'pg_foreign_data_wrapper'::regclass
+      AS regclass,
+      pg_describe_object('pg_foreign_data_wrapper'::regclass,aa.oid,0)
+      AS obj_desc,
+      (aclexplode(aa.fdwacl)).*
+    FROM pg_catalog.pg_foreign_data_wrapper AS aa
+  ) AS a
+  JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor
+  JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee
+UNION ALL
+  SELECT
+    a.regclass,
+    a.obj_desc,
+    grantor.rolname AS grantor,
+    grantee.rolname AS grantee,
+    a.privilege_type,
+    a.is_grantable
+  FROM
+  (
+    SELECT
+      'pg_foreign_server'::regclass
+      AS regclass,
+      pg_describe_object('pg_foreign_server'::regclass,aa.oid,0)
+      AS obj_desc,
+      (aclexplode(aa.srvacl)).*
+    FROM pg_catalog.pg_foreign_server AS aa
+  ) AS a
+  JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor
+  JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee
+UNION ALL
+  SELECT
+    a.regclass,
+    a.obj_desc,
+    grantor.rolname AS grantor,
+    grantee.rolname AS grantee,
+    a.privilege_type,
+    a.is_grantable
+  FROM
+  (
+    SELECT
+      'pg_init_privs'::regclass
+      AS regclass,
+      pg_describe_object(aa.classoid,aa.objoid,aa.objsubid)
+      AS obj_desc,
+      (aclexplode(aa.initprivs)).*
+    FROM pg_catalog.pg_init_privs AS aa
+  ) AS a
+  JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor
+  JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee
+UNION ALL
+  SELECT
+    a.regclass,
+    a.obj_desc,
+    grantor.rolname AS grantor,
+    grantee.rolname AS grantee,
+    a.privilege_type,
+    a.is_grantable
+  FROM
+  (
+    SELECT
+      'pg_language'::regclass
+      AS regclass,
+      pg_describe_object('pg_language'::regclass,aa.oid,0)
+      AS obj_desc,
+      (aclexplode(aa.lanacl)).*
+    FROM pg_catalog.pg_language AS aa
+  ) AS a
+  JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor
+  JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee
+UNION ALL
+  SELECT
+    a.regclass,
+    a.obj_desc,
+    grantor.rolname AS grantor,
+    grantee.rolname AS grantee,
+    a.privilege_type,
+    a.is_grantable
+  FROM
+  (
+    SELECT
+      'pg_largeobject_metadata'::regclass
+      AS regclass,
+      pg_describe_object('pg_largeobject_metadata'::regclass,aa.oid,0)
+      AS obj_desc,
+      (aclexplode(aa.lomacl)).*
+    FROM pg_catalog.pg_largeobject_metadata AS aa
+  ) AS a
+  JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor
+  JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee
+UNION ALL
+  SELECT
+    a.regclass,
+    a.obj_desc,
+    grantor.rolname AS grantor,
+    grantee.rolname AS grantee,
+    a.privilege_type,
+    a.is_grantable
+  FROM
+  (
+    SELECT
+      'pg_namespace'::regclass
+      AS regclass,
+      pg_describe_object('pg_namespace'::regclass,aa.oid,0)
+      AS obj_desc,
+      (aclexplode(aa.nspacl)).*
+    FROM pg_catalog.pg_namespace AS aa
+  ) AS a
+  JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor
+  JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee
+UNION ALL
+  SELECT
+    a.regclass,
+    a.obj_desc,
+    grantor.rolname AS grantor,
+    grantee.rolname AS grantee,
+    a.privilege_type,
+    a.is_grantable
+  FROM
+  (
+    SELECT
+      'pg_proc'::regclass
+      AS regclass,
+      pg_describe_object('pg_proc'::regclass,aa.oid,0)
+      AS obj_desc,
+      (aclexplode(aa.proacl)).*
+    FROM pg_catalog.pg_proc AS aa
+  ) AS a
+  JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor
+  JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee
+UNION ALL
+  SELECT
+    a.regclass,
+    a.obj_desc,
+    grantor.rolname AS grantor,
+    grantee.rolname AS grantee,
+    a.privilege_type,
+    a.is_grantable
+  FROM
+  (
+    SELECT
+      'pg_tablespace'::regclass
+      AS regclass,
+      pg_describe_object('pg_tablespace'::regclass,aa.oid,0)
+      AS obj_desc,
+      (aclexplode(aa.spcacl)).*
+    FROM pg_catalog.pg_tablespace AS aa
+  ) AS a
+  JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor
+  JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee
+UNION ALL
+  SELECT
+    a.regclass,
+    a.obj_desc,
+    grantor.rolname AS grantor,
+    grantee.rolname AS grantee,
+    a.privilege_type,
+    a.is_grantable
+  FROM
+  (
+    SELECT
+      'pg_type'::regclass
+      AS regclass,
+      pg_describe_object('pg_type'::regclass,aa.oid,0)
+      AS obj_desc,
+      (aclexplode(aa.typacl)).*
+    FROM pg_catalog.pg_type AS aa
+  ) AS a
+  JOIN pg_catalog.pg_authid AS grantor ON grantor.oid = a.grantor
+  JOIN pg_catalog.pg_authid AS grantee ON grantee.oid = a.grantee
+;
+
 CREATE VIEW pg_settings AS
     SELECT * FROM pg_show_all_settings() AS A;
 
