Thread

  1. [PATCH v3 4/4] run pgindent

    Nathan Bossart <nathan@postgresql.org> — 2026-05-06T21:43:06Z

    ---
     src/bin/pg_dump/pg_dump.c              | 457 ++++++++++++------------
     src/bin/pg_dump/pg_dumpall.c           |  30 +-
     src/bin/pg_upgrade/check.c             |  16 +-
     src/bin/pg_upgrade/exec.c              |   8 +-
     src/bin/pg_upgrade/multixact_rewrite.c |  80 ++---
     src/bin/pg_upgrade/pg_upgrade.c        |   2 +-
     src/bin/pg_upgrade/relfilenumber.c     |  54 +--
     src/bin/psql/command.c                 |  29 +-
     src/bin/psql/describe.c                | 461 ++++++++++++-------------
     9 files changed, 567 insertions(+), 570 deletions(-)
    
    diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
    index eed9aaeb7c1..c05623b1889 100644
    --- a/src/bin/pg_dump/pg_dump.c
    +++ b/src/bin/pg_dump/pg_dump.c
    @@ -1491,8 +1491,8 @@ setup_connection(Archive *AH, const char *dumpencoding,
     	 * Disable timeouts if supported.
     	 */
     	ExecuteSqlStatement(AH, "SET statement_timeout = 0");
    -		ExecuteSqlStatement(AH, "SET lock_timeout = 0");
    -		ExecuteSqlStatement(AH, "SET idle_in_transaction_session_timeout = 0");
    +	ExecuteSqlStatement(AH, "SET lock_timeout = 0");
    +	ExecuteSqlStatement(AH, "SET idle_in_transaction_session_timeout = 0");
     	if (AH->remoteVersion >= 170000)
     		ExecuteSqlStatement(AH, "SET transaction_timeout = 0");
     
    @@ -1505,10 +1505,10 @@ setup_connection(Archive *AH, const char *dumpencoding,
     	/*
     	 * Adjust row-security mode, if supported.
     	 */
    -		if (dopt->enable_row_security)
    -			ExecuteSqlStatement(AH, "SET row_security = on");
    -		else
    -			ExecuteSqlStatement(AH, "SET row_security = off");
    +	if (dopt->enable_row_security)
    +		ExecuteSqlStatement(AH, "SET row_security = on");
    +	else
    +		ExecuteSqlStatement(AH, "SET row_security = off");
     
     	/*
     	 * For security reasons, we restrict the expansion of non-system views and
    @@ -1955,7 +1955,7 @@ checkExtensionMembership(DumpableObject *dobj, Archive *fout)
     	if (fout->dopt->binary_upgrade)
     		dobj->dump = ext->dobj.dump;
     	else
    -			dobj->dump = ext->dobj.dump_contains & (DUMP_COMPONENT_ACL);
    +		dobj->dump = ext->dobj.dump_contains & (DUMP_COMPONENT_ACL);
     
     	return true;
     }
    @@ -1989,9 +1989,9 @@ selectDumpableNamespace(NamespaceInfo *nsinfo, Archive *fout)
     	else if (strcmp(nsinfo->dobj.name, "pg_catalog") == 0)
     	{
     		/*
    -		 * We dump out any ACLs defined in pg_catalog, if
    -		 * they are interesting (and not the original ACLs which were set at
    -		 * initdb time, see pg_init_privs).
    +		 * We dump out any ACLs defined in pg_catalog, if they are interesting
    +		 * (and not the original ACLs which were set at initdb time, see
    +		 * pg_init_privs).
     		 */
     		nsinfo->dobj.dump_contains = nsinfo->dobj.dump = DUMP_COMPONENT_ACL;
     	}
    @@ -3298,7 +3298,7 @@ dumpDatabase(Archive *fout)
     						 "datcollate, datctype, datfrozenxid, "
     						 "datacl, acldefault('d', datdba) AS acldefault, "
     						 "datistemplate, datconnlimit, ");
    -		appendPQExpBufferStr(dbQry, "datminmxid, ");
    +	appendPQExpBufferStr(dbQry, "datminmxid, ");
     	if (fout->remoteVersion >= 170000)
     		appendPQExpBufferStr(dbQry, "datlocprovider, datlocale, datcollversion, ");
     	else if (fout->remoteVersion >= 150000)
    @@ -3640,11 +3640,11 @@ dumpDatabase(Archive *fout)
     					ii_oid,
     					ii_relminmxid;
     
    -			appendPQExpBuffer(loFrozenQry, "SELECT relfrozenxid, relminmxid, relfilenode, oid\n"
    -							  "FROM pg_catalog.pg_class\n"
    -							  "WHERE oid IN (%u, %u, %u, %u);\n",
    -							  LargeObjectRelationId, LargeObjectLOidPNIndexId,
    -							  LargeObjectMetadataRelationId, LargeObjectMetadataOidIndexId);
    +		appendPQExpBuffer(loFrozenQry, "SELECT relfrozenxid, relminmxid, relfilenode, oid\n"
    +						  "FROM pg_catalog.pg_class\n"
    +						  "WHERE oid IN (%u, %u, %u, %u);\n",
    +						  LargeObjectRelationId, LargeObjectLOidPNIndexId,
    +						  LargeObjectMetadataRelationId, LargeObjectMetadataOidIndexId);
     
     		lo_res = ExecuteSqlQuery(fout, loFrozenQry->data, PGRES_TUPLES_OK);
     
    @@ -4276,7 +4276,7 @@ getPolicies(Archive *fout, TableInfo tblinfo[], int numTables)
     
     	printfPQExpBuffer(query,
     					  "SELECT pol.oid, pol.tableoid, pol.polrelid, pol.polname, pol.polcmd, ");
    -		appendPQExpBufferStr(query, "pol.polpermissive, ");
    +	appendPQExpBufferStr(query, "pol.polpermissive, ");
     	appendPQExpBuffer(query,
     					  "CASE WHEN pol.polroles = '{0}' THEN NULL ELSE "
     					  "   pg_catalog.array_to_string(ARRAY(SELECT pg_catalog.quote_ident(rolname) from pg_catalog.pg_roles WHERE oid = ANY(pol.polroles)), ', ') END AS polroles, "
    @@ -6635,9 +6635,9 @@ getAccessMethods(Archive *fout)
     	 * Select all access methods from pg_am table.
     	 */
     	appendPQExpBufferStr(query, "SELECT tableoid, oid, amname, ");
    -		appendPQExpBufferStr(query,
    -							 "amtype, "
    -							 "amhandler::pg_catalog.regproc AS amhandler ");
    +	appendPQExpBufferStr(query,
    +						 "amtype, "
    +						 "amhandler::pg_catalog.regproc AS amhandler ");
     	appendPQExpBufferStr(query, "FROM pg_am");
     
     	res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
    @@ -6829,35 +6829,35 @@ getAggregates(Archive *fout)
     	 * Find all interesting aggregates.  See comment in getFuncs() for the
     	 * rationale behind the filtering logic.
     	 */
    -		agg_check = (fout->remoteVersion >= 110000 ? "p.prokind = 'a'"
    -					 : "p.proisagg");
    +	agg_check = (fout->remoteVersion >= 110000 ? "p.prokind = 'a'"
    +				 : "p.proisagg");
     
    -		appendPQExpBuffer(query, "SELECT p.tableoid, p.oid, "
    -						  "p.proname AS aggname, "
    -						  "p.pronamespace AS aggnamespace, "
    -						  "p.pronargs, p.proargtypes, "
    -						  "p.proowner, "
    -						  "p.proacl AS aggacl, "
    -						  "acldefault('f', p.proowner) AS acldefault "
    -						  "FROM pg_proc p "
    -						  "LEFT JOIN pg_init_privs pip ON "
    -						  "(p.oid = pip.objoid "
    -						  "AND pip.classoid = 'pg_proc'::regclass "
    -						  "AND pip.objsubid = 0) "
    -						  "WHERE %s AND ("
    -						  "p.pronamespace != "
    -						  "(SELECT oid FROM pg_namespace "
    -						  "WHERE nspname = 'pg_catalog') OR "
    -						  "p.proacl IS DISTINCT FROM pip.initprivs",
    -						  agg_check);
    -		if (dopt->binary_upgrade)
    -			appendPQExpBufferStr(query,
    -								 " OR EXISTS(SELECT 1 FROM pg_depend WHERE "
    -								 "classid = 'pg_proc'::regclass AND "
    -								 "objid = p.oid AND "
    -								 "refclassid = 'pg_extension'::regclass AND "
    -								 "deptype = 'e')");
    -		appendPQExpBufferChar(query, ')');
    +	appendPQExpBuffer(query, "SELECT p.tableoid, p.oid, "
    +					  "p.proname AS aggname, "
    +					  "p.pronamespace AS aggnamespace, "
    +					  "p.pronargs, p.proargtypes, "
    +					  "p.proowner, "
    +					  "p.proacl AS aggacl, "
    +					  "acldefault('f', p.proowner) AS acldefault "
    +					  "FROM pg_proc p "
    +					  "LEFT JOIN pg_init_privs pip ON "
    +					  "(p.oid = pip.objoid "
    +					  "AND pip.classoid = 'pg_proc'::regclass "
    +					  "AND pip.objsubid = 0) "
    +					  "WHERE %s AND ("
    +					  "p.pronamespace != "
    +					  "(SELECT oid FROM pg_namespace "
    +					  "WHERE nspname = 'pg_catalog') OR "
    +					  "p.proacl IS DISTINCT FROM pip.initprivs",
    +					  agg_check);
    +	if (dopt->binary_upgrade)
    +		appendPQExpBufferStr(query,
    +							 " OR EXISTS(SELECT 1 FROM pg_depend WHERE "
    +							 "classid = 'pg_proc'::regclass AND "
    +							 "objid = p.oid AND "
    +							 "refclassid = 'pg_extension'::regclass AND "
    +							 "deptype = 'e')");
    +	appendPQExpBufferChar(query, ')');
     
     	res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
     
    @@ -6959,53 +6959,53 @@ getFuncs(Archive *fout)
     	 * include them, since we want to dump extension members individually in
     	 * that mode.  Also, if they are used by casts or transforms then we need
     	 * to gather the information about them, though they won't be dumped if
    -	 * they are built-in.  Also, include functions in
    -	 * pg_catalog if they have an ACL different from what's shown in
    -	 * pg_init_privs (so we have to join to pg_init_privs; annoying).
    +	 * they are built-in.  Also, include functions in pg_catalog if they have
    +	 * an ACL different from what's shown in pg_init_privs (so we have to join
    +	 * to pg_init_privs; annoying).
     	 */
    -		not_agg_check = (fout->remoteVersion >= 110000 ? "p.prokind <> 'a'"
    -						 : "NOT p.proisagg");
    +	not_agg_check = (fout->remoteVersion >= 110000 ? "p.prokind <> 'a'"
    +					 : "NOT p.proisagg");
     
    -		appendPQExpBuffer(query,
    -						  "SELECT p.tableoid, p.oid, p.proname, p.prolang, "
    -						  "p.pronargs, p.proargtypes, p.prorettype, "
    -						  "p.proacl, "
    -						  "acldefault('f', p.proowner) AS acldefault, "
    -						  "p.pronamespace, "
    -						  "p.proowner "
    -						  "FROM pg_proc p "
    -						  "LEFT JOIN pg_init_privs pip ON "
    -						  "(p.oid = pip.objoid "
    -						  "AND pip.classoid = 'pg_proc'::regclass "
    -						  "AND pip.objsubid = 0) "
    -						  "WHERE %s"
    -						  "\n  AND NOT EXISTS (SELECT 1 FROM pg_depend "
    -						  "WHERE classid = 'pg_proc'::regclass AND "
    -						  "objid = p.oid AND deptype = 'i')"
    -						  "\n  AND ("
    -						  "\n  pronamespace != "
    -						  "(SELECT oid FROM pg_namespace "
    -						  "WHERE nspname = 'pg_catalog')"
    -						  "\n  OR EXISTS (SELECT 1 FROM pg_cast"
    -						  "\n  WHERE pg_cast.oid > %u "
    -						  "\n  AND p.oid = pg_cast.castfunc)"
    -						  "\n  OR EXISTS (SELECT 1 FROM pg_transform"
    -						  "\n  WHERE pg_transform.oid > %u AND "
    -						  "\n  (p.oid = pg_transform.trffromsql"
    -						  "\n  OR p.oid = pg_transform.trftosql))",
    -						  not_agg_check,
    -						  g_last_builtin_oid,
    -						  g_last_builtin_oid);
    -		if (dopt->binary_upgrade)
    -			appendPQExpBufferStr(query,
    -								 "\n  OR EXISTS(SELECT 1 FROM pg_depend WHERE "
    -								 "classid = 'pg_proc'::regclass AND "
    -								 "objid = p.oid AND "
    -								 "refclassid = 'pg_extension'::regclass AND "
    -								 "deptype = 'e')");
    +	appendPQExpBuffer(query,
    +					  "SELECT p.tableoid, p.oid, p.proname, p.prolang, "
    +					  "p.pronargs, p.proargtypes, p.prorettype, "
    +					  "p.proacl, "
    +					  "acldefault('f', p.proowner) AS acldefault, "
    +					  "p.pronamespace, "
    +					  "p.proowner "
    +					  "FROM pg_proc p "
    +					  "LEFT JOIN pg_init_privs pip ON "
    +					  "(p.oid = pip.objoid "
    +					  "AND pip.classoid = 'pg_proc'::regclass "
    +					  "AND pip.objsubid = 0) "
    +					  "WHERE %s"
    +					  "\n  AND NOT EXISTS (SELECT 1 FROM pg_depend "
    +					  "WHERE classid = 'pg_proc'::regclass AND "
    +					  "objid = p.oid AND deptype = 'i')"
    +					  "\n  AND ("
    +					  "\n  pronamespace != "
    +					  "(SELECT oid FROM pg_namespace "
    +					  "WHERE nspname = 'pg_catalog')"
    +					  "\n  OR EXISTS (SELECT 1 FROM pg_cast"
    +					  "\n  WHERE pg_cast.oid > %u "
    +					  "\n  AND p.oid = pg_cast.castfunc)"
    +					  "\n  OR EXISTS (SELECT 1 FROM pg_transform"
    +					  "\n  WHERE pg_transform.oid > %u AND "
    +					  "\n  (p.oid = pg_transform.trffromsql"
    +					  "\n  OR p.oid = pg_transform.trftosql))",
    +					  not_agg_check,
    +					  g_last_builtin_oid,
    +					  g_last_builtin_oid);
    +	if (dopt->binary_upgrade)
     		appendPQExpBufferStr(query,
    -							 "\n  OR p.proacl IS DISTINCT FROM pip.initprivs");
    -		appendPQExpBufferChar(query, ')');
    +							 "\n  OR EXISTS(SELECT 1 FROM pg_depend WHERE "
    +							 "classid = 'pg_proc'::regclass AND "
    +							 "objid = p.oid AND "
    +							 "refclassid = 'pg_extension'::regclass AND "
    +							 "deptype = 'e')");
    +	appendPQExpBufferStr(query,
    +						 "\n  OR p.proacl IS DISTINCT FROM pip.initprivs");
    +	appendPQExpBufferChar(query, ')');
     
     	res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
     
    @@ -7254,31 +7254,31 @@ getTables(Archive *fout, int *numTables)
     		appendPQExpBufferStr(query,
     							 "c.relhasoids, ");
     
    -		appendPQExpBufferStr(query,
    -							 "c.relispopulated, ");
    +	appendPQExpBufferStr(query,
    +						 "c.relispopulated, ");
     
    -		appendPQExpBufferStr(query,
    -							 "c.relreplident, ");
    +	appendPQExpBufferStr(query,
    +						 "c.relreplident, ");
     
    -		appendPQExpBufferStr(query,
    -							 "c.relrowsecurity, c.relforcerowsecurity, ");
    +	appendPQExpBufferStr(query,
    +						 "c.relrowsecurity, c.relforcerowsecurity, ");
     
    -		appendPQExpBufferStr(query,
    -							 "c.relminmxid, tc.relminmxid AS tminmxid, ");
    +	appendPQExpBufferStr(query,
    +						 "c.relminmxid, tc.relminmxid AS tminmxid, ");
     
    -		appendPQExpBufferStr(query,
    -							 "array_remove(array_remove(c.reloptions,'check_option=local'),'check_option=cascaded') AS reloptions, "
    -							 "CASE WHEN 'check_option=local' = ANY (c.reloptions) THEN 'LOCAL'::text "
    -							 "WHEN 'check_option=cascaded' = ANY (c.reloptions) THEN 'CASCADED'::text ELSE NULL END AS checkoption, ");
    +	appendPQExpBufferStr(query,
    +						 "array_remove(array_remove(c.reloptions,'check_option=local'),'check_option=cascaded') AS reloptions, "
    +						 "CASE WHEN 'check_option=local' = ANY (c.reloptions) THEN 'LOCAL'::text "
    +						 "WHEN 'check_option=cascaded' = ANY (c.reloptions) THEN 'CASCADED'::text ELSE NULL END AS checkoption, ");
     
    -		appendPQExpBufferStr(query,
    -							 "am.amname, ");
    +	appendPQExpBufferStr(query,
    +						 "am.amname, ");
     
    -		appendPQExpBufferStr(query,
    -							 "(d.deptype = 'i') IS TRUE AS is_identity_sequence, ");
    +	appendPQExpBufferStr(query,
    +						 "(d.deptype = 'i') IS TRUE AS is_identity_sequence, ");
     
    -		appendPQExpBufferStr(query,
    -							 "c.relispartition AS ispartition ");
    +	appendPQExpBufferStr(query,
    +						 "c.relispartition AS ispartition ");
     
     	/*
     	 * Left join to pg_depend to pick up dependency info linking sequences to
    @@ -7298,8 +7298,8 @@ getTables(Archive *fout, int *numTables)
     	/*
     	 * Left join to pg_am to pick up the amname.
     	 */
    -		appendPQExpBufferStr(query,
    -							 "LEFT JOIN pg_am am ON (c.relam = am.oid)\n");
    +	appendPQExpBufferStr(query,
    +						 "LEFT JOIN pg_am am ON (c.relam = am.oid)\n");
     
     	/*
     	 * We purposefully ignore toast OIDs for partitioned tables; the reason is
    @@ -7870,8 +7870,8 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
     						 "t.reloptions AS indreloptions, ");
     
     
    -		appendPQExpBufferStr(query,
    -							 "i.indisreplident, ");
    +	appendPQExpBufferStr(query,
    +						 "i.indisreplident, ");
     
     	if (fout->remoteVersion >= 110000)
     		appendPQExpBufferStr(query,
    @@ -9315,8 +9315,8 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
     		appendPQExpBufferStr(q,
     							 "'' AS attcompression,\n");
     
    -		appendPQExpBufferStr(q,
    -							 "a.attidentity,\n");
    +	appendPQExpBufferStr(q,
    +						 "a.attidentity,\n");
     
     	if (fout->remoteVersion >= 110000)
     		appendPQExpBufferStr(q,
    @@ -10719,73 +10719,73 @@ getAdditionalACLs(Archive *fout)
     	PQclear(res);
     
     	/* Fetch initial-privileges data */
    -		printfPQExpBuffer(query,
    -						  "SELECT objoid, classoid, objsubid, privtype, initprivs "
    -						  "FROM pg_init_privs");
    +	printfPQExpBuffer(query,
    +					  "SELECT objoid, classoid, objsubid, privtype, initprivs "
    +					  "FROM pg_init_privs");
     
    -		res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
    +	res = ExecuteSqlQuery(fout, query->data, PGRES_TUPLES_OK);
     
    -		ntups = PQntuples(res);
    -		for (i = 0; i < ntups; i++)
    -		{
    -			Oid			objoid = atooid(PQgetvalue(res, i, 0));
    -			Oid			classoid = atooid(PQgetvalue(res, i, 1));
    -			int			objsubid = atoi(PQgetvalue(res, i, 2));
    -			char		privtype = *(PQgetvalue(res, i, 3));
    -			char	   *initprivs = PQgetvalue(res, i, 4);
    -			CatalogId	objId;
    -			DumpableObject *dobj;
    +	ntups = PQntuples(res);
    +	for (i = 0; i < ntups; i++)
    +	{
    +		Oid			objoid = atooid(PQgetvalue(res, i, 0));
    +		Oid			classoid = atooid(PQgetvalue(res, i, 1));
    +		int			objsubid = atoi(PQgetvalue(res, i, 2));
    +		char		privtype = *(PQgetvalue(res, i, 3));
    +		char	   *initprivs = PQgetvalue(res, i, 4);
    +		CatalogId	objId;
    +		DumpableObject *dobj;
     
    -			objId.tableoid = classoid;
    -			objId.oid = objoid;
    -			dobj = findObjectByCatalogId(objId);
    -			/* OK to ignore entries we haven't got a DumpableObject for */
    -			if (dobj)
    +		objId.tableoid = classoid;
    +		objId.oid = objoid;
    +		dobj = findObjectByCatalogId(objId);
    +		/* OK to ignore entries we haven't got a DumpableObject for */
    +		if (dobj)
    +		{
    +			/* Cope with sub-object initprivs */
    +			if (objsubid != 0)
     			{
    -				/* Cope with sub-object initprivs */
    -				if (objsubid != 0)
    -				{
    -					if (dobj->objType == DO_TABLE)
    -					{
    -						/* For a column initprivs, set the table's ACL flags */
    -						dobj->components |= DUMP_COMPONENT_ACL;
    -						((TableInfo *) dobj)->hascolumnACLs = true;
    -					}
    -					else
    -						pg_log_warning("unsupported pg_init_privs entry: %u %u %d",
    -									   classoid, objoid, objsubid);
    -					continue;
    -				}
    -
    -				/*
    -				 * We ignore any pg_init_privs.initprivs entry for the public
    -				 * schema, as explained in getNamespaces().
    -				 */
    -				if (dobj->objType == DO_NAMESPACE &&
    -					strcmp(dobj->name, "public") == 0)
    -					continue;
    -
    -				/* Else it had better be of a type we think has ACLs */
    -				if (dobj->objType == DO_NAMESPACE ||
    -					dobj->objType == DO_TYPE ||
    -					dobj->objType == DO_FUNC ||
    -					dobj->objType == DO_AGG ||
    -					dobj->objType == DO_TABLE ||
    -					dobj->objType == DO_PROCLANG ||
    -					dobj->objType == DO_FDW ||
    -					dobj->objType == DO_FOREIGN_SERVER)
    +				if (dobj->objType == DO_TABLE)
     				{
    -					DumpableObjectWithAcl *daobj = (DumpableObjectWithAcl *) dobj;
    -
    -					daobj->dacl.privtype = privtype;
    -					daobj->dacl.initprivs = pstrdup(initprivs);
    +					/* For a column initprivs, set the table's ACL flags */
    +					dobj->components |= DUMP_COMPONENT_ACL;
    +					((TableInfo *) dobj)->hascolumnACLs = true;
     				}
     				else
     					pg_log_warning("unsupported pg_init_privs entry: %u %u %d",
     								   classoid, objoid, objsubid);
    +				continue;
    +			}
    +
    +			/*
    +			 * We ignore any pg_init_privs.initprivs entry for the public
    +			 * schema, as explained in getNamespaces().
    +			 */
    +			if (dobj->objType == DO_NAMESPACE &&
    +				strcmp(dobj->name, "public") == 0)
    +				continue;
    +
    +			/* Else it had better be of a type we think has ACLs */
    +			if (dobj->objType == DO_NAMESPACE ||
    +				dobj->objType == DO_TYPE ||
    +				dobj->objType == DO_FUNC ||
    +				dobj->objType == DO_AGG ||
    +				dobj->objType == DO_TABLE ||
    +				dobj->objType == DO_PROCLANG ||
    +				dobj->objType == DO_FDW ||
    +				dobj->objType == DO_FOREIGN_SERVER)
    +			{
    +				DumpableObjectWithAcl *daobj = (DumpableObjectWithAcl *) dobj;
    +
    +				daobj->dacl.privtype = privtype;
    +				daobj->dacl.initprivs = pstrdup(initprivs);
     			}
    +			else
    +				pg_log_warning("unsupported pg_init_privs entry: %u %u %d",
    +							   classoid, objoid, objsubid);
     		}
    -		PQclear(res);
    +	}
    +	PQclear(res);
     
     	destroyPQExpBuffer(query);
     }
    @@ -11130,8 +11130,8 @@ dumpRelationStats_dumper(Archive *fout, const void *userArg, const TocEntry *te)
     		 * The results must be in the order of the relations supplied in the
     		 * parameters to ensure we remain in sync as we walk through the TOC.
     		 *
    -		 * For versions before 19, the redundant filter clause on s.tablename =
    -		 * ANY(...) seems sufficient to convince the planner to use
    +		 * For versions before 19, the redundant filter clause on s.tablename
    +		 * = ANY(...) seems sufficient to convince the planner to use
     		 * pg_class_relname_nsp_index, which avoids a full scan of pg_stats.
     		 * In newer versions, pg_stats returns the table OIDs, eliminating the
     		 * need for that hack.
    @@ -13471,11 +13471,11 @@ dumpFunc(Archive *fout, const FuncInfo *finfo)
     							 "pg_catalog.pg_get_function_result(p.oid) AS funcresult,\n"
     							 "proleakproof,\n");
     
    -			appendPQExpBufferStr(query,
    -								 "array_to_string(protrftypes, ' ') AS protrftypes,\n");
    +		appendPQExpBufferStr(query,
    +							 "array_to_string(protrftypes, ' ') AS protrftypes,\n");
     
    -			appendPQExpBufferStr(query,
    -								 "proparallel,\n");
    +		appendPQExpBufferStr(query,
    +							 "proparallel,\n");
     
     		if (fout->remoteVersion >= 110000)
     			appendPQExpBufferStr(query,
    @@ -14965,9 +14965,9 @@ dumpCollation(Archive *fout, const CollInfo *collinfo)
     	/* Get collation-specific details */
     	appendPQExpBufferStr(query, "SELECT ");
     
    -		appendPQExpBufferStr(query,
    -							 "collprovider, "
    -							 "collversion, ");
    +	appendPQExpBufferStr(query,
    +						 "collprovider, "
    +						 "collversion, ");
     
     	if (fout->remoteVersion >= 120000)
     		appendPQExpBufferStr(query,
    @@ -15374,23 +15374,23 @@ dumpAgg(Archive *fout, const AggInfo *agginfo)
     							 "pg_catalog.pg_get_function_arguments(p.oid) AS funcargs,\n"
     							 "pg_catalog.pg_get_function_identity_arguments(p.oid) AS funciargs,\n");
     
    -			appendPQExpBufferStr(query,
    -								 "aggkind,\n"
    -								 "aggmtransfn,\n"
    -								 "aggminvtransfn,\n"
    -								 "aggmfinalfn,\n"
    -								 "aggmtranstype::pg_catalog.regtype,\n"
    -								 "aggfinalextra,\n"
    -								 "aggmfinalextra,\n"
    -								 "aggtransspace,\n"
    -								 "aggmtransspace,\n"
    -								 "aggminitval,\n");
    +		appendPQExpBufferStr(query,
    +							 "aggkind,\n"
    +							 "aggmtransfn,\n"
    +							 "aggminvtransfn,\n"
    +							 "aggmfinalfn,\n"
    +							 "aggmtranstype::pg_catalog.regtype,\n"
    +							 "aggfinalextra,\n"
    +							 "aggmfinalextra,\n"
    +							 "aggtransspace,\n"
    +							 "aggmtransspace,\n"
    +							 "aggminitval,\n");
     
    -			appendPQExpBufferStr(query,
    -								 "aggcombinefn,\n"
    -								 "aggserialfn,\n"
    -								 "aggdeserialfn,\n"
    -								 "proparallel,\n");
    +		appendPQExpBufferStr(query,
    +							 "aggcombinefn,\n"
    +							 "aggserialfn,\n"
    +							 "aggdeserialfn,\n"
    +							 "proparallel,\n");
     
     		if (fout->remoteVersion >= 110000)
     			appendPQExpBufferStr(query,
    @@ -16850,30 +16850,30 @@ dumpTable(Archive *fout, const TableInfo *tbinfo)
     			appendPQExpBufferStr(query,
     								 "PREPARE getColumnACLs(pg_catalog.oid) AS\n");
     
    -				/*
    -				 * In principle we should call acldefault('c', relowner) to
    -				 * get the default ACL for a column.  However, we don't
    -				 * currently store the numeric OID of the relowner in
    -				 * TableInfo.  We could convert the owner name using regrole,
    -				 * but that creates a risk of failure due to concurrent role
    -				 * renames.  Given that the default ACL for columns is empty
    -				 * and is likely to stay that way, it's not worth extra cycles
    -				 * and risk to avoid hard-wiring that knowledge here.
    -				 */
    -				appendPQExpBufferStr(query,
    -									 "SELECT at.attname, "
    -									 "at.attacl, "
    -									 "'{}' AS acldefault, "
    -									 "pip.privtype, pip.initprivs "
    -									 "FROM pg_catalog.pg_attribute at "
    -									 "LEFT JOIN pg_catalog.pg_init_privs pip ON "
    -									 "(at.attrelid = pip.objoid "
    -									 "AND pip.classoid = 'pg_catalog.pg_class'::pg_catalog.regclass "
    -									 "AND at.attnum = pip.objsubid) "
    -									 "WHERE at.attrelid = $1 AND "
    -									 "NOT at.attisdropped "
    -									 "AND (at.attacl IS NOT NULL OR pip.initprivs IS NOT NULL) "
    -									 "ORDER BY at.attnum");
    +			/*
    +			 * In principle we should call acldefault('c', relowner) to get
    +			 * the default ACL for a column.  However, we don't currently
    +			 * store the numeric OID of the relowner in TableInfo.  We could
    +			 * convert the owner name using regrole, but that creates a risk
    +			 * of failure due to concurrent role renames.  Given that the
    +			 * default ACL for columns is empty and is likely to stay that
    +			 * way, it's not worth extra cycles and risk to avoid hard-wiring
    +			 * that knowledge here.
    +			 */
    +			appendPQExpBufferStr(query,
    +								 "SELECT at.attname, "
    +								 "at.attacl, "
    +								 "'{}' AS acldefault, "
    +								 "pip.privtype, pip.initprivs "
    +								 "FROM pg_catalog.pg_attribute at "
    +								 "LEFT JOIN pg_catalog.pg_init_privs pip ON "
    +								 "(at.attrelid = pip.objoid "
    +								 "AND pip.classoid = 'pg_catalog.pg_class'::pg_catalog.regclass "
    +								 "AND at.attnum = pip.objsubid) "
    +								 "WHERE at.attrelid = $1 AND "
    +								 "NOT at.attisdropped "
    +								 "AND (at.attacl IS NOT NULL OR pip.initprivs IS NOT NULL) "
    +								 "ORDER BY at.attnum");
     
     			ExecuteSqlStatement(fout, query->data);
     
    @@ -19167,7 +19167,7 @@ collectSequences(Archive *fout)
     	 * pg_get_sequence_data(), but we only do so for non-schema-only dumps.
     	 */
     	if (fout->remoteVersion < 180000 ||
    -			 (!fout->dopt->dumpData && !fout->dopt->sequence_data))
    +		(!fout->dopt->dumpData && !fout->dopt->sequence_data))
     		query = "SELECT seqrelid, format_type(seqtypid, NULL), "
     			"seqstart, seqincrement, "
     			"seqmax, seqmin, "
    @@ -19229,15 +19229,14 @@ dumpSequence(Archive *fout, const TableInfo *tbinfo)
     	qseqname = pg_strdup(fmtId(tbinfo->dobj.name));
     
     	/*
    -	 * The sequence information is gathered in a sorted
    -	 * table before any calls to dumpSequence().  See collectSequences() for
    -	 * more information.
    +	 * The sequence information is gathered in a sorted table before any calls
    +	 * to dumpSequence().  See collectSequences() for more information.
     	 */
    -		Assert(sequences);
    +	Assert(sequences);
     
    -		key.oid = tbinfo->dobj.catId.oid;
    -		seq = bsearch(&key, sequences, nsequences,
    -					  sizeof(SequenceItem), SequenceItemCmp);
    +	key.oid = tbinfo->dobj.catId.oid;
    +	seq = bsearch(&key, sequences, nsequences,
    +				  sizeof(SequenceItem), SequenceItemCmp);
     
     	/* Calculate default limits for a sequence of this type */
     	is_ascending = (seq->incby >= 0);
    diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c
    index 5b10f7122b7..3f61196671c 100644
    --- a/src/bin/pg_dump/pg_dumpall.c
    +++ b/src/bin/pg_dump/pg_dumpall.c
    @@ -954,11 +954,11 @@ dropRoles(PGconn *conn)
     	int			i_rolname;
     	int			i;
     
    -		printfPQExpBuffer(buf,
    -						  "SELECT rolname "
    -						  "FROM %s "
    -						  "WHERE rolname !~ '^pg_' "
    -						  "ORDER BY 1", role_catalog);
    +	printfPQExpBuffer(buf,
    +					  "SELECT rolname "
    +					  "FROM %s "
    +					  "WHERE rolname !~ '^pg_' "
    +					  "ORDER BY 1", role_catalog);
     
     	res = executeQuery(conn, buf->data);
     
    @@ -1035,16 +1035,16 @@ dumpRoles(PGconn *conn)
     	 * Notes: rolconfig is dumped later, and pg_authid must be used for
     	 * extracting rolcomment regardless of role_catalog.
     	 */
    -		printfPQExpBuffer(buf,
    -						  "SELECT oid, rolname, rolsuper, rolinherit, "
    -						  "rolcreaterole, rolcreatedb, "
    -						  "rolcanlogin, rolconnlimit, rolpassword, "
    -						  "rolvaliduntil, rolreplication, rolbypassrls, "
    -						  "pg_catalog.shobj_description(oid, 'pg_authid') as rolcomment, "
    -						  "rolname = current_user AS is_current_user "
    -						  "FROM %s "
    -						  "WHERE rolname !~ '^pg_' "
    -						  "ORDER BY 2", role_catalog);
    +	printfPQExpBuffer(buf,
    +					  "SELECT oid, rolname, rolsuper, rolinherit, "
    +					  "rolcreaterole, rolcreatedb, "
    +					  "rolcanlogin, rolconnlimit, rolpassword, "
    +					  "rolvaliduntil, rolreplication, rolbypassrls, "
    +					  "pg_catalog.shobj_description(oid, 'pg_authid') as rolcomment, "
    +					  "rolname = current_user AS is_current_user "
    +					  "FROM %s "
    +					  "WHERE rolname !~ '^pg_' "
    +					  "ORDER BY 2", role_catalog);
     
     	res = executeQuery(conn, buf->data);
     
    diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c
    index 0813cef2729..5f63e2114c8 100644
    --- a/src/bin/pg_upgrade/check.c
    +++ b/src/bin/pg_upgrade/check.c
    @@ -1475,15 +1475,15 @@ check_for_incompatible_polymorphics(ClusterInfo *cluster)
     						 ", 'array_cat(anyarray,anyarray)'"
     						 ", 'array_prepend(anyelement,anyarray)'");
     
    -		appendPQExpBufferStr(&old_polymorphics,
    -							 ", 'array_remove(anyarray,anyelement)'"
    -							 ", 'array_replace(anyarray,anyelement,anyelement)'");
    +	appendPQExpBufferStr(&old_polymorphics,
    +						 ", 'array_remove(anyarray,anyelement)'"
    +						 ", 'array_replace(anyarray,anyelement,anyelement)'");
     
    -		appendPQExpBufferStr(&old_polymorphics,
    -							 ", 'array_position(anyarray,anyelement)'"
    -							 ", 'array_position(anyarray,anyelement,integer)'"
    -							 ", 'array_positions(anyarray,anyelement)'"
    -							 ", 'width_bucket(anyelement,anyarray)'");
    +	appendPQExpBufferStr(&old_polymorphics,
    +						 ", 'array_position(anyarray,anyelement)'"
    +						 ", 'array_position(anyarray,anyelement,integer)'"
    +						 ", 'array_positions(anyarray,anyelement)'"
    +						 ", 'width_bucket(anyelement,anyarray)'");
     
     	/*
     	 * The query below hardcodes FirstNormalObjectId as 16384 rather than
    diff --git a/src/bin/pg_upgrade/exec.c b/src/bin/pg_upgrade/exec.c
    index 479557abdcc..9a675929e17 100644
    --- a/src/bin/pg_upgrade/exec.c
    +++ b/src/bin/pg_upgrade/exec.c
    @@ -55,7 +55,7 @@ get_bin_version(ClusterInfo *cluster)
     	if (sscanf(cmd_output, "%*s %*s %d.%d", &v1, &v2) < 1)
     		pg_fatal("could not get pg_ctl version output from %s", cmd);
     
    -		cluster->bin_version = v1 * 10000;
    +	cluster->bin_version = v1 * 10000;
     }
     
     
    @@ -344,8 +344,8 @@ check_data_dir(ClusterInfo *cluster)
     	check_single_dir(pg_data, "pg_subtrans");
     	check_single_dir(pg_data, PG_TBLSPC_DIR);
     	check_single_dir(pg_data, "pg_twophase");
    -		check_single_dir(pg_data, "pg_wal");
    -		check_single_dir(pg_data, "pg_xact");
    +	check_single_dir(pg_data, "pg_wal");
    +	check_single_dir(pg_data, "pg_xact");
     }
     
     
    @@ -385,7 +385,7 @@ check_bin_dir(ClusterInfo *cluster, bool check_versions)
     	 */
     	get_bin_version(cluster);
     
    -		check_exec(cluster->bindir, "pg_resetwal", check_versions);
    +	check_exec(cluster->bindir, "pg_resetwal", check_versions);
     
     	if (cluster == &new_cluster)
     	{
    diff --git a/src/bin/pg_upgrade/multixact_rewrite.c b/src/bin/pg_upgrade/multixact_rewrite.c
    index c45b3183684..c7a1416494d 100644
    --- a/src/bin/pg_upgrade/multixact_rewrite.c
    +++ b/src/bin/pg_upgrade/multixact_rewrite.c
    @@ -61,52 +61,52 @@ rewrite_multixacts(MultiXactId from_multi, MultiXactId to_multi)
     	 * Convert old multixids, if needed, by reading them one-by-one from the
     	 * old cluster.
     	 */
    -		old_reader = AllocOldMultiXactRead(old_cluster.pgdata,
    -										   old_cluster.controldata.chkpnt_nxtmulti,
    -										   old_cluster.controldata.chkpnt_nxtmxoff);
    +	old_reader = AllocOldMultiXactRead(old_cluster.pgdata,
    +									   old_cluster.controldata.chkpnt_nxtmulti,
    +									   old_cluster.controldata.chkpnt_nxtmxoff);
     
    -		for (MultiXactId multi = from_multi; multi != to_multi;)
    -		{
    -			MultiXactMember member;
    -			bool		multixid_valid;
    -
    -			/*
    -			 * Read this multixid's members.
    -			 *
    -			 * Locking-only XIDs that may be part of multi-xids don't matter
    -			 * after upgrade, as there can be no transactions running across
    -			 * upgrade.  So as a small optimization, we only read one member
    -			 * from each multixid: the one updating one, or if there was no
    -			 * update, arbitrarily the first locking xid.
    -			 */
    -			multixid_valid = GetOldMultiXactIdSingleMember(old_reader, multi, &member);
    +	for (MultiXactId multi = from_multi; multi != to_multi;)
    +	{
    +		MultiXactMember member;
    +		bool		multixid_valid;
     
    -			/*
    -			 * Write the new offset to pg_multixact/offsets.
    -			 *
    -			 * Even if this multixid is invalid, we still need to write its
    -			 * offset if the *previous* multixid was valid.  That's because
    -			 * when reading a multixid, the number of members is calculated
    -			 * from the difference between the two offsets.
    -			 */
    -			RecordMultiXactOffset(offsets_writer, multi,
    -								  (multixid_valid || prev_multixid_valid) ? next_offset : 0);
    +		/*
    +		 * Read this multixid's members.
    +		 *
    +		 * Locking-only XIDs that may be part of multi-xids don't matter after
    +		 * upgrade, as there can be no transactions running across upgrade. So
    +		 * as a small optimization, we only read one member from each
    +		 * multixid: the one updating one, or if there was no update,
    +		 * arbitrarily the first locking xid.
    +		 */
    +		multixid_valid = GetOldMultiXactIdSingleMember(old_reader, multi, &member);
     
    -			/* Write the members */
    -			if (multixid_valid)
    -			{
    -				RecordMultiXactMembers(members_writer, next_offset, 1, &member);
    -				next_offset += 1;
    -			}
    +		/*
    +		 * Write the new offset to pg_multixact/offsets.
    +		 *
    +		 * Even if this multixid is invalid, we still need to write its offset
    +		 * if the *previous* multixid was valid.  That's because when reading
    +		 * a multixid, the number of members is calculated from the difference
    +		 * between the two offsets.
    +		 */
    +		RecordMultiXactOffset(offsets_writer, multi,
    +							  (multixid_valid || prev_multixid_valid) ? next_offset : 0);
     
    -			/* Advance to next multixid, handling wraparound */
    -			multi++;
    -			if (multi < FirstMultiXactId)
    -				multi = FirstMultiXactId;
    -			prev_multixid_valid = multixid_valid;
    +		/* Write the members */
    +		if (multixid_valid)
    +		{
    +			RecordMultiXactMembers(members_writer, next_offset, 1, &member);
    +			next_offset += 1;
     		}
     
    -		FreeOldMultiXactReader(old_reader);
    +		/* Advance to next multixid, handling wraparound */
    +		multi++;
    +		if (multi < FirstMultiXactId)
    +			multi = FirstMultiXactId;
    +		prev_multixid_valid = multixid_valid;
    +	}
    +
    +	FreeOldMultiXactReader(old_reader);
     
     	/* Write the final 'next' offset to the last SLRU page */
     	RecordMultiXactOffset(offsets_writer, to_multi,
    diff --git a/src/bin/pg_upgrade/pg_upgrade.c b/src/bin/pg_upgrade/pg_upgrade.c
    index e5d7920c1b1..d8e1b680f5a 100644
    --- a/src/bin/pg_upgrade/pg_upgrade.c
    +++ b/src/bin/pg_upgrade/pg_upgrade.c
    @@ -833,7 +833,7 @@ copy_xact_xlog_xid(void)
     		 * Determine the range of multixacts to convert.
     		 */
     		nxtmulti = old_cluster.controldata.chkpnt_nxtmulti;
    -			oldstMulti = old_cluster.controldata.chkpnt_oldstMulti;
    +		oldstMulti = old_cluster.controldata.chkpnt_oldstMulti;
     		/* handle wraparound */
     		if (nxtmulti < FirstMultiXactId)
     			nxtmulti = FirstMultiXactId;
    diff --git a/src/bin/pg_upgrade/relfilenumber.c b/src/bin/pg_upgrade/relfilenumber.c
    index ec2ff7acb21..6c467bdc8a5 100644
    --- a/src/bin/pg_upgrade/relfilenumber.c
    +++ b/src/bin/pg_upgrade/relfilenumber.c
    @@ -587,32 +587,32 @@ transfer_relfile(FileNameMap *map, const char *type_suffix)
     		/* Copying files might take some time, so give feedback. */
     		pg_log(PG_STATUS, "%s", old_file);
     
    -			switch (user_opts.transfer_mode)
    -			{
    -				case TRANSFER_MODE_CLONE:
    -					pg_log(PG_VERBOSE, "cloning \"%s\" to \"%s\"",
    -						   old_file, new_file);
    -					cloneFile(old_file, new_file, map->nspname, map->relname);
    -					break;
    -				case TRANSFER_MODE_COPY:
    -					pg_log(PG_VERBOSE, "copying \"%s\" to \"%s\"",
    -						   old_file, new_file);
    -					copyFile(old_file, new_file, map->nspname, map->relname);
    -					break;
    -				case TRANSFER_MODE_COPY_FILE_RANGE:
    -					pg_log(PG_VERBOSE, "copying \"%s\" to \"%s\" with copy_file_range",
    -						   old_file, new_file);
    -					copyFileByRange(old_file, new_file, map->nspname, map->relname);
    -					break;
    -				case TRANSFER_MODE_LINK:
    -					pg_log(PG_VERBOSE, "linking \"%s\" to \"%s\"",
    -						   old_file, new_file);
    -					linkFile(old_file, new_file, map->nspname, map->relname);
    -					break;
    -				case TRANSFER_MODE_SWAP:
    -					/* swap mode is handled in its own code path */
    -					pg_fatal("should never happen");
    -					break;
    -			}
    +		switch (user_opts.transfer_mode)
    +		{
    +			case TRANSFER_MODE_CLONE:
    +				pg_log(PG_VERBOSE, "cloning \"%s\" to \"%s\"",
    +					   old_file, new_file);
    +				cloneFile(old_file, new_file, map->nspname, map->relname);
    +				break;
    +			case TRANSFER_MODE_COPY:
    +				pg_log(PG_VERBOSE, "copying \"%s\" to \"%s\"",
    +					   old_file, new_file);
    +				copyFile(old_file, new_file, map->nspname, map->relname);
    +				break;
    +			case TRANSFER_MODE_COPY_FILE_RANGE:
    +				pg_log(PG_VERBOSE, "copying \"%s\" to \"%s\" with copy_file_range",
    +					   old_file, new_file);
    +				copyFileByRange(old_file, new_file, map->nspname, map->relname);
    +				break;
    +			case TRANSFER_MODE_LINK:
    +				pg_log(PG_VERBOSE, "linking \"%s\" to \"%s\"",
    +					   old_file, new_file);
    +				linkFile(old_file, new_file, map->nspname, map->relname);
    +				break;
    +			case TRANSFER_MODE_SWAP:
    +				/* swap mode is handled in its own code path */
    +				pg_fatal("should never happen");
    +				break;
    +		}
     	}
     }
    diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
    index c9573d4b765..e5fb3595598 100644
    --- a/src/bin/psql/command.c
    +++ b/src/bin/psql/command.c
    @@ -6272,23 +6272,22 @@ get_create_object_cmd(EditableObjectType obj_type, Oid oid,
     			 * ensure the right view gets replaced.  Also, check relation kind
     			 * to be sure it's a view.
     			 *
    -			 * Views may have WITH [LOCAL|CASCADED]
    -			 * CHECK OPTION.  These are not part of the view definition
    -			 * returned by pg_get_viewdef() and so need to be retrieved
    -			 * separately.  Materialized views may have
    -			 * arbitrary storage parameter reloptions.
    +			 * Views may have WITH [LOCAL|CASCADED] CHECK OPTION.  These are
    +			 * not part of the view definition returned by pg_get_viewdef()
    +			 * and so need to be retrieved separately.  Materialized views may
    +			 * have arbitrary storage parameter reloptions.
     			 */
     			printfPQExpBuffer(query, "/* %s */\n", _("Get view's definition and details"));
    -				appendPQExpBuffer(query,
    -								  "SELECT nspname, relname, relkind, "
    -								  "pg_catalog.pg_get_viewdef(c.oid, true), "
    -								  "pg_catalog.array_remove(pg_catalog.array_remove(c.reloptions,'check_option=local'),'check_option=cascaded') AS reloptions, "
    -								  "CASE WHEN 'check_option=local' = ANY (c.reloptions) THEN 'LOCAL'::text "
    -								  "WHEN 'check_option=cascaded' = ANY (c.reloptions) THEN 'CASCADED'::text ELSE NULL END AS checkoption "
    -								  "FROM pg_catalog.pg_class c "
    -								  "LEFT JOIN pg_catalog.pg_namespace n "
    -								  "ON c.relnamespace = n.oid WHERE c.oid = %u",
    -								  oid);
    +			appendPQExpBuffer(query,
    +							  "SELECT nspname, relname, relkind, "
    +							  "pg_catalog.pg_get_viewdef(c.oid, true), "
    +							  "pg_catalog.array_remove(pg_catalog.array_remove(c.reloptions,'check_option=local'),'check_option=cascaded') AS reloptions, "
    +							  "CASE WHEN 'check_option=local' = ANY (c.reloptions) THEN 'LOCAL'::text "
    +							  "WHEN 'check_option=cascaded' = ANY (c.reloptions) THEN 'CASCADED'::text ELSE NULL END AS checkoption "
    +							  "FROM pg_catalog.pg_class c "
    +							  "LEFT JOIN pg_catalog.pg_namespace n "
    +							  "ON c.relnamespace = n.oid WHERE c.oid = %u",
    +							  oid);
     			break;
     	}
     
    diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
    index 9f26ed928cb..9731c0079c8 100644
    --- a/src/bin/psql/describe.c
    +++ b/src/bin/psql/describe.c
    @@ -387,19 +387,19 @@ describeFunctions(const char *functypes, const char *func_pattern,
     						  gettext_noop("stable"),
     						  gettext_noop("volatile"),
     						  gettext_noop("Volatility"));
    -			appendPQExpBuffer(&buf,
    -							  ",\n CASE\n"
    -							  "  WHEN p.proparallel = "
    -							  CppAsString2(PROPARALLEL_RESTRICTED) " THEN '%s'\n"
    -							  "  WHEN p.proparallel = "
    -							  CppAsString2(PROPARALLEL_SAFE) " THEN '%s'\n"
    -							  "  WHEN p.proparallel = "
    -							  CppAsString2(PROPARALLEL_UNSAFE) " THEN '%s'\n"
    -							  " END as \"%s\"",
    -							  gettext_noop("restricted"),
    -							  gettext_noop("safe"),
    -							  gettext_noop("unsafe"),
    -							  gettext_noop("Parallel"));
    +		appendPQExpBuffer(&buf,
    +						  ",\n CASE\n"
    +						  "  WHEN p.proparallel = "
    +						  CppAsString2(PROPARALLEL_RESTRICTED) " THEN '%s'\n"
    +						  "  WHEN p.proparallel = "
    +						  CppAsString2(PROPARALLEL_SAFE) " THEN '%s'\n"
    +						  "  WHEN p.proparallel = "
    +						  CppAsString2(PROPARALLEL_UNSAFE) " THEN '%s'\n"
    +						  " END as \"%s\"",
    +						  gettext_noop("restricted"),
    +						  gettext_noop("safe"),
    +						  gettext_noop("unsafe"),
    +						  gettext_noop("Parallel"));
     		appendPQExpBuffer(&buf,
     						  ",\n pg_catalog.pg_get_userbyid(p.proowner) as \"%s\""
     						  ",\n CASE WHEN prosecdef THEN '%s' ELSE '%s' END AS \"%s\""
    @@ -599,8 +599,8 @@ describeFunctions(const char *functypes, const char *func_pattern,
     
     	myopt.title = _("List of functions");
     	myopt.translate_header = true;
    -		myopt.translate_columns = translate_columns;
    -		myopt.n_translate_columns = lengthof(translate_columns);
    +	myopt.translate_columns = translate_columns;
    +	myopt.n_translate_columns = lengthof(translate_columns);
     
     	printQuery(res, &myopt, pset.queryFout, false, pset.logfile);
     
    @@ -1086,38 +1086,38 @@ permissionsList(const char *pattern, bool showSystem)
     					  "  ), E'\\n') AS \"%s\"",
     					  gettext_noop("Column privileges"));
     
    -		appendPQExpBuffer(&buf,
    -						  ",\n  pg_catalog.array_to_string(ARRAY(\n"
    -						  "    SELECT polname\n"
    -						  "    || CASE WHEN NOT polpermissive THEN\n"
    -						  "       E' (RESTRICTIVE)'\n"
    -						  "       ELSE '' END\n"
    -						  "    || CASE WHEN polcmd != '*' THEN\n"
    -						  "           E' (' || polcmd::pg_catalog.text || E'):'\n"
    -						  "       ELSE E':'\n"
    -						  "       END\n"
    -						  "    || CASE WHEN polqual IS NOT NULL THEN\n"
    -						  "           E'\\n  (u): ' || pg_catalog.pg_get_expr(polqual, polrelid)\n"
    -						  "       ELSE E''\n"
    -						  "       END\n"
    -						  "    || CASE WHEN polwithcheck IS NOT NULL THEN\n"
    -						  "           E'\\n  (c): ' || pg_catalog.pg_get_expr(polwithcheck, polrelid)\n"
    -						  "       ELSE E''\n"
    -						  "       END"
    -						  "    || CASE WHEN polroles <> '{0}' THEN\n"
    -						  "           E'\\n  to: ' || pg_catalog.array_to_string(\n"
    -						  "               ARRAY(\n"
    -						  "                   SELECT rolname\n"
    -						  "                   FROM pg_catalog.pg_roles\n"
    -						  "                   WHERE oid = ANY (polroles)\n"
    -						  "                   ORDER BY 1\n"
    -						  "               ), E', ')\n"
    -						  "       ELSE E''\n"
    -						  "       END\n"
    -						  "    FROM pg_catalog.pg_policy pol\n"
    -						  "    WHERE polrelid = c.oid), E'\\n')\n"
    -						  "    AS \"%s\"",
    -						  gettext_noop("Policies"));
    +	appendPQExpBuffer(&buf,
    +					  ",\n  pg_catalog.array_to_string(ARRAY(\n"
    +					  "    SELECT polname\n"
    +					  "    || CASE WHEN NOT polpermissive THEN\n"
    +					  "       E' (RESTRICTIVE)'\n"
    +					  "       ELSE '' END\n"
    +					  "    || CASE WHEN polcmd != '*' THEN\n"
    +					  "           E' (' || polcmd::pg_catalog.text || E'):'\n"
    +					  "       ELSE E':'\n"
    +					  "       END\n"
    +					  "    || CASE WHEN polqual IS NOT NULL THEN\n"
    +					  "           E'\\n  (u): ' || pg_catalog.pg_get_expr(polqual, polrelid)\n"
    +					  "       ELSE E''\n"
    +					  "       END\n"
    +					  "    || CASE WHEN polwithcheck IS NOT NULL THEN\n"
    +					  "           E'\\n  (c): ' || pg_catalog.pg_get_expr(polwithcheck, polrelid)\n"
    +					  "       ELSE E''\n"
    +					  "       END"
    +					  "    || CASE WHEN polroles <> '{0}' THEN\n"
    +					  "           E'\\n  to: ' || pg_catalog.array_to_string(\n"
    +					  "               ARRAY(\n"
    +					  "                   SELECT rolname\n"
    +					  "                   FROM pg_catalog.pg_roles\n"
    +					  "                   WHERE oid = ANY (polroles)\n"
    +					  "                   ORDER BY 1\n"
    +					  "               ), E', ')\n"
    +					  "       ELSE E''\n"
    +					  "       END\n"
    +					  "    FROM pg_catalog.pg_policy pol\n"
    +					  "    WHERE polrelid = c.oid), E'\\n')\n"
    +					  "    AS \"%s\"",
    +					  gettext_noop("Policies"));
     
     	appendPQExpBufferStr(&buf, "\nFROM pg_catalog.pg_class c\n"
     						 "     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace\n"
    @@ -1675,27 +1675,27 @@ describeOneTableDetails(const char *schemaname,
     		char	   *footers[3] = {NULL, NULL, NULL};
     
     		printfPQExpBuffer(&buf, "/* %s */\n", _("Get sequence information"));
    -			appendPQExpBuffer(&buf,
    -							  "SELECT pg_catalog.format_type(seqtypid, NULL) AS \"%s\",\n"
    -							  "       seqstart AS \"%s\",\n"
    -							  "       seqmin AS \"%s\",\n"
    -							  "       seqmax AS \"%s\",\n"
    -							  "       seqincrement AS \"%s\",\n"
    -							  "       CASE WHEN seqcycle THEN '%s' ELSE '%s' END AS \"%s\",\n"
    -							  "       seqcache AS \"%s\"\n",
    -							  gettext_noop("Type"),
    -							  gettext_noop("Start"),
    -							  gettext_noop("Minimum"),
    -							  gettext_noop("Maximum"),
    -							  gettext_noop("Increment"),
    -							  gettext_noop("yes"),
    -							  gettext_noop("no"),
    -							  gettext_noop("Cycles?"),
    -							  gettext_noop("Cache"));
    -			appendPQExpBuffer(&buf,
    -							  "FROM pg_catalog.pg_sequence\n"
    -							  "WHERE seqrelid = '%s';",
    -							  oid);
    +		appendPQExpBuffer(&buf,
    +						  "SELECT pg_catalog.format_type(seqtypid, NULL) AS \"%s\",\n"
    +						  "       seqstart AS \"%s\",\n"
    +						  "       seqmin AS \"%s\",\n"
    +						  "       seqmax AS \"%s\",\n"
    +						  "       seqincrement AS \"%s\",\n"
    +						  "       CASE WHEN seqcycle THEN '%s' ELSE '%s' END AS \"%s\",\n"
    +						  "       seqcache AS \"%s\"\n",
    +						  gettext_noop("Type"),
    +						  gettext_noop("Start"),
    +						  gettext_noop("Minimum"),
    +						  gettext_noop("Maximum"),
    +						  gettext_noop("Increment"),
    +						  gettext_noop("yes"),
    +						  gettext_noop("no"),
    +						  gettext_noop("Cycles?"),
    +						  gettext_noop("Cache"));
    +		appendPQExpBuffer(&buf,
    +						  "FROM pg_catalog.pg_sequence\n"
    +						  "WHERE seqrelid = '%s';",
    +						  oid);
     
     		res = PSQLexec(buf.data);
     		if (!res)
    @@ -1913,7 +1913,7 @@ describeOneTableDetails(const char *schemaname,
     		appendPQExpBufferStr(&buf, ",\n  (SELECT c.collname FROM pg_catalog.pg_collation c, pg_catalog.pg_type t\n"
     							 "   WHERE c.oid = a.attcollation AND t.oid = a.atttypid AND a.attcollation <> t.typcollation) AS attcollation");
     		attcoll_col = cols++;
    -			appendPQExpBufferStr(&buf, ",\n  a.attidentity");
    +		appendPQExpBufferStr(&buf, ",\n  a.attidentity");
     		attidentity_col = cols++;
     		if (pset.sversion >= 120000)
     			appendPQExpBufferStr(&buf, ",\n  a.attgenerated");
    @@ -2326,7 +2326,7 @@ describeOneTableDetails(const char *schemaname,
     							 CppAsString2(CONSTRAINT_EXCLUSION) ") AND "
     							 "condeferred) AS condeferred,\n");
     
    -			appendPQExpBufferStr(&buf, "i.indisreplident,\n");
    +		appendPQExpBufferStr(&buf, "i.indisreplident,\n");
     
     		if (pset.sversion >= 150000)
     			appendPQExpBufferStr(&buf, "i.indnullsnotdistinct,\n");
    @@ -2431,7 +2431,7 @@ describeOneTableDetails(const char *schemaname,
     								 "pg_catalog.pg_get_indexdef(i.indexrelid, 0, true),\n  "
     								 "pg_catalog.pg_get_constraintdef(con.oid, true), "
     								 "contype, condeferrable, condeferred");
    -				appendPQExpBufferStr(&buf, ", i.indisreplident");
    +			appendPQExpBufferStr(&buf, ", i.indisreplident");
     			appendPQExpBufferStr(&buf, ", c2.reltablespace");
     			if (pset.sversion >= 180000)
     				appendPQExpBufferStr(&buf, ", con.conperiod");
    @@ -2682,81 +2682,80 @@ describeOneTableDetails(const char *schemaname,
     		PQclear(result);
     
     		/* print any row-level policies */
    -			printfPQExpBuffer(&buf, "/* %s */\n",
    -							  _("Get row-level policies for this table"));
    -			appendPQExpBufferStr(&buf, "SELECT pol.polname,");
    -				appendPQExpBufferStr(&buf,
    -									 " pol.polpermissive,\n");
    -			appendPQExpBuffer(&buf,
    -							  "  CASE WHEN pol.polroles = '{0}' THEN NULL ELSE pg_catalog.array_to_string(array(select rolname from pg_catalog.pg_roles where oid = any (pol.polroles) order by 1),',') END,\n"
    -							  "  pg_catalog.pg_get_expr(pol.polqual, pol.polrelid),\n"
    -							  "  pg_catalog.pg_get_expr(pol.polwithcheck, pol.polrelid),\n"
    -							  "  CASE pol.polcmd\n"
    -							  "    WHEN 'r' THEN 'SELECT'\n"
    -							  "    WHEN 'a' THEN 'INSERT'\n"
    -							  "    WHEN 'w' THEN 'UPDATE'\n"
    -							  "    WHEN 'd' THEN 'DELETE'\n"
    -							  "    END AS cmd\n"
    -							  "FROM pg_catalog.pg_policy pol\n"
    -							  "WHERE pol.polrelid = '%s' ORDER BY 1;",
    -							  oid);
    +		printfPQExpBuffer(&buf, "/* %s */\n",
    +						  _("Get row-level policies for this table"));
    +		appendPQExpBufferStr(&buf, "SELECT pol.polname,");
    +		appendPQExpBufferStr(&buf,
    +							 " pol.polpermissive,\n");
    +		appendPQExpBuffer(&buf,
    +						  "  CASE WHEN pol.polroles = '{0}' THEN NULL ELSE pg_catalog.array_to_string(array(select rolname from pg_catalog.pg_roles where oid = any (pol.polroles) order by 1),',') END,\n"
    +						  "  pg_catalog.pg_get_expr(pol.polqual, pol.polrelid),\n"
    +						  "  pg_catalog.pg_get_expr(pol.polwithcheck, pol.polrelid),\n"
    +						  "  CASE pol.polcmd\n"
    +						  "    WHEN 'r' THEN 'SELECT'\n"
    +						  "    WHEN 'a' THEN 'INSERT'\n"
    +						  "    WHEN 'w' THEN 'UPDATE'\n"
    +						  "    WHEN 'd' THEN 'DELETE'\n"
    +						  "    END AS cmd\n"
    +						  "FROM pg_catalog.pg_policy pol\n"
    +						  "WHERE pol.polrelid = '%s' ORDER BY 1;",
    +						  oid);
     
    -			result = PSQLexec(buf.data);
    -			if (!result)
    -				goto error_return;
    -			else
    -				tuples = PQntuples(result);
    +		result = PSQLexec(buf.data);
    +		if (!result)
    +			goto error_return;
    +		else
    +			tuples = PQntuples(result);
     
    -			/*
    -			 * Handle cases where RLS is enabled and there are policies, or
    -			 * there aren't policies, or RLS isn't enabled but there are
    -			 * policies
    -			 */
    -			if (tableinfo.rowsecurity && !tableinfo.forcerowsecurity && tuples > 0)
    -				printTableAddFooter(&cont, _("Policies:"));
    +		/*
    +		 * Handle cases where RLS is enabled and there are policies, or there
    +		 * aren't policies, or RLS isn't enabled but there are policies
    +		 */
    +		if (tableinfo.rowsecurity && !tableinfo.forcerowsecurity && tuples > 0)
    +			printTableAddFooter(&cont, _("Policies:"));
     
    -			if (tableinfo.rowsecurity && tableinfo.forcerowsecurity && tuples > 0)
    -				printTableAddFooter(&cont, _("Policies (forced row security enabled):"));
    +		if (tableinfo.rowsecurity && tableinfo.forcerowsecurity && tuples > 0)
    +			printTableAddFooter(&cont, _("Policies (forced row security enabled):"));
     
    -			if (tableinfo.rowsecurity && !tableinfo.forcerowsecurity && tuples == 0)
    -				printTableAddFooter(&cont, _("Policies (row security enabled): (none)"));
    +		if (tableinfo.rowsecurity && !tableinfo.forcerowsecurity && tuples == 0)
    +			printTableAddFooter(&cont, _("Policies (row security enabled): (none)"));
     
    -			if (tableinfo.rowsecurity && tableinfo.forcerowsecurity && tuples == 0)
    -				printTableAddFooter(&cont, _("Policies (forced row security enabled): (none)"));
    +		if (tableinfo.rowsecurity && tableinfo.forcerowsecurity && tuples == 0)
    +			printTableAddFooter(&cont, _("Policies (forced row security enabled): (none)"));
     
    -			if (!tableinfo.rowsecurity && tuples > 0)
    -				printTableAddFooter(&cont, _("Policies (row security disabled):"));
    +		if (!tableinfo.rowsecurity && tuples > 0)
    +			printTableAddFooter(&cont, _("Policies (row security disabled):"));
     
    -			/* Might be an empty set - that's ok */
    -			for (i = 0; i < tuples; i++)
    -			{
    -				printfPQExpBuffer(&buf, "    POLICY \"%s\"",
    -								  PQgetvalue(result, i, 0));
    +		/* Might be an empty set - that's ok */
    +		for (i = 0; i < tuples; i++)
    +		{
    +			printfPQExpBuffer(&buf, "    POLICY \"%s\"",
    +							  PQgetvalue(result, i, 0));
     
    -				if (*(PQgetvalue(result, i, 1)) == 'f')
    -					appendPQExpBufferStr(&buf, " AS RESTRICTIVE");
    +			if (*(PQgetvalue(result, i, 1)) == 'f')
    +				appendPQExpBufferStr(&buf, " AS RESTRICTIVE");
     
    -				if (!PQgetisnull(result, i, 5))
    -					appendPQExpBuffer(&buf, " FOR %s",
    -									  PQgetvalue(result, i, 5));
    +			if (!PQgetisnull(result, i, 5))
    +				appendPQExpBuffer(&buf, " FOR %s",
    +								  PQgetvalue(result, i, 5));
     
    -				if (!PQgetisnull(result, i, 2))
    -				{
    -					appendPQExpBuffer(&buf, "\n      TO %s",
    -									  PQgetvalue(result, i, 2));
    -				}
    +			if (!PQgetisnull(result, i, 2))
    +			{
    +				appendPQExpBuffer(&buf, "\n      TO %s",
    +								  PQgetvalue(result, i, 2));
    +			}
     
    -				if (!PQgetisnull(result, i, 3))
    -					appendPQExpBuffer(&buf, "\n      USING (%s)",
    -									  PQgetvalue(result, i, 3));
    +			if (!PQgetisnull(result, i, 3))
    +				appendPQExpBuffer(&buf, "\n      USING (%s)",
    +								  PQgetvalue(result, i, 3));
     
    -				if (!PQgetisnull(result, i, 4))
    -					appendPQExpBuffer(&buf, "\n      WITH CHECK (%s)",
    -									  PQgetvalue(result, i, 4));
    +			if (!PQgetisnull(result, i, 4))
    +				appendPQExpBuffer(&buf, "\n      WITH CHECK (%s)",
    +								  PQgetvalue(result, i, 4));
     
    -				printTableAddFooter(&cont, buf.data);
    -			}
    -			PQclear(result);
    +			printTableAddFooter(&cont, buf.data);
    +		}
    +		PQclear(result);
     
     		/* print any extended statistics */
     		if (pset.sversion >= 140000)
    @@ -3025,115 +3024,115 @@ describeOneTableDetails(const char *schemaname,
     		}
     
     		/* print any publications */
    -			printfPQExpBuffer(&buf, "/* %s */\n",
    -							  _("Get publications that publish this table"));
    -			if (pset.sversion >= 150000)
    +		printfPQExpBuffer(&buf, "/* %s */\n",
    +						  _("Get publications that publish this table"));
    +		if (pset.sversion >= 150000)
    +		{
    +			appendPQExpBuffer(&buf,
    +							  "SELECT pubname\n"
    +							  "     , NULL\n"
    +							  "     , NULL\n"
    +							  "FROM pg_catalog.pg_publication p\n"
    +							  "     JOIN pg_catalog.pg_publication_namespace pn ON p.oid = pn.pnpubid\n"
    +							  "     JOIN pg_catalog.pg_class pc ON pc.relnamespace = pn.pnnspid\n"
    +							  "WHERE pc.oid ='%s' and pg_catalog.pg_relation_is_publishable('%s')\n"
    +							  "UNION\n"
    +							  "SELECT pubname\n"
    +							  "     , pg_get_expr(pr.prqual, c.oid)\n"
    +							  "     , (CASE WHEN pr.prattrs IS NOT NULL THEN\n"
    +							  "         (SELECT string_agg(attname, ', ')\n"
    +							  "           FROM pg_catalog.generate_series(0, pg_catalog.array_upper(pr.prattrs::pg_catalog.int2[], 1)) s,\n"
    +							  "                pg_catalog.pg_attribute\n"
    +							  "          WHERE attrelid = pr.prrelid AND attnum = prattrs[s])\n"
    +							  "        ELSE NULL END) "
    +							  "FROM pg_catalog.pg_publication p\n"
    +							  "     JOIN pg_catalog.pg_publication_rel pr ON p.oid = pr.prpubid\n"
    +							  "     JOIN pg_catalog.pg_class c ON c.oid = pr.prrelid\n"
    +							  "WHERE pr.prrelid = '%s'\n",
    +							  oid, oid, oid);
    +
    +			if (pset.sversion >= 190000)
     			{
    +				/*
    +				 * Skip entries where this relation appears in the
    +				 * publication's EXCEPT list.
    +				 */
     				appendPQExpBuffer(&buf,
    +								  " AND NOT pr.prexcept\n"
    +								  "UNION\n"
     								  "SELECT pubname\n"
     								  "     , NULL\n"
     								  "     , NULL\n"
     								  "FROM pg_catalog.pg_publication p\n"
    -								  "     JOIN pg_catalog.pg_publication_namespace pn ON p.oid = pn.pnpubid\n"
    -								  "     JOIN pg_catalog.pg_class pc ON pc.relnamespace = pn.pnnspid\n"
    -								  "WHERE pc.oid ='%s' and pg_catalog.pg_relation_is_publishable('%s')\n"
    -								  "UNION\n"
    -								  "SELECT pubname\n"
    -								  "     , pg_get_expr(pr.prqual, c.oid)\n"
    -								  "     , (CASE WHEN pr.prattrs IS NOT NULL THEN\n"
    -								  "         (SELECT string_agg(attname, ', ')\n"
    -								  "           FROM pg_catalog.generate_series(0, pg_catalog.array_upper(pr.prattrs::pg_catalog.int2[], 1)) s,\n"
    -								  "                pg_catalog.pg_attribute\n"
    -								  "          WHERE attrelid = pr.prrelid AND attnum = prattrs[s])\n"
    -								  "        ELSE NULL END) "
    -								  "FROM pg_catalog.pg_publication p\n"
    -								  "     JOIN pg_catalog.pg_publication_rel pr ON p.oid = pr.prpubid\n"
    -								  "     JOIN pg_catalog.pg_class c ON c.oid = pr.prrelid\n"
    -								  "WHERE pr.prrelid = '%s'\n",
    +								  "WHERE p.puballtables AND pg_catalog.pg_relation_is_publishable('%s')\n"
    +								  "     AND NOT EXISTS (\n"
    +								  "     SELECT 1\n"
    +								  "     FROM pg_catalog.pg_publication_rel pr\n"
    +								  "     WHERE pr.prpubid = p.oid AND\n"
    +								  "     (pr.prrelid = '%s' OR pr.prrelid = pg_catalog.pg_partition_root('%s')))\n"
    +								  "ORDER BY 1;",
     								  oid, oid, oid);
    -
    -				if (pset.sversion >= 190000)
    -				{
    -					/*
    -					 * Skip entries where this relation appears in the
    -					 * publication's EXCEPT list.
    -					 */
    -					appendPQExpBuffer(&buf,
    -									  " AND NOT pr.prexcept\n"
    -									  "UNION\n"
    -									  "SELECT pubname\n"
    -									  "     , NULL\n"
    -									  "     , NULL\n"
    -									  "FROM pg_catalog.pg_publication p\n"
    -									  "WHERE p.puballtables AND pg_catalog.pg_relation_is_publishable('%s')\n"
    -									  "     AND NOT EXISTS (\n"
    -									  "     SELECT 1\n"
    -									  "     FROM pg_catalog.pg_publication_rel pr\n"
    -									  "     WHERE pr.prpubid = p.oid AND\n"
    -									  "     (pr.prrelid = '%s' OR pr.prrelid = pg_catalog.pg_partition_root('%s')))\n"
    -									  "ORDER BY 1;",
    -									  oid, oid, oid);
    -				}
    -				else
    -				{
    -					appendPQExpBuffer(&buf,
    -									  "UNION\n"
    -									  "SELECT pubname\n"
    -									  "		, NULL\n"
    -									  "		, NULL\n"
    -									  "FROM pg_catalog.pg_publication p\n"
    -									  "WHERE p.puballtables AND pg_catalog.pg_relation_is_publishable('%s')\n"
    -									  "ORDER BY 1;",
    -									  oid);
    -				}
     			}
     			else
     			{
     				appendPQExpBuffer(&buf,
    +								  "UNION\n"
     								  "SELECT pubname\n"
    -								  "     , NULL\n"
    -								  "     , NULL\n"
    -								  "FROM pg_catalog.pg_publication p\n"
    -								  "JOIN pg_catalog.pg_publication_rel pr ON p.oid = pr.prpubid\n"
    -								  "WHERE pr.prrelid = '%s'\n"
    -								  "UNION ALL\n"
    -								  "SELECT pubname\n"
    -								  "     , NULL\n"
    -								  "     , NULL\n"
    +								  "		, NULL\n"
    +								  "		, NULL\n"
     								  "FROM pg_catalog.pg_publication p\n"
     								  "WHERE p.puballtables AND pg_catalog.pg_relation_is_publishable('%s')\n"
     								  "ORDER BY 1;",
    -								  oid, oid);
    +								  oid);
     			}
    +		}
    +		else
    +		{
    +			appendPQExpBuffer(&buf,
    +							  "SELECT pubname\n"
    +							  "     , NULL\n"
    +							  "     , NULL\n"
    +							  "FROM pg_catalog.pg_publication p\n"
    +							  "JOIN pg_catalog.pg_publication_rel pr ON p.oid = pr.prpubid\n"
    +							  "WHERE pr.prrelid = '%s'\n"
    +							  "UNION ALL\n"
    +							  "SELECT pubname\n"
    +							  "     , NULL\n"
    +							  "     , NULL\n"
    +							  "FROM pg_catalog.pg_publication p\n"
    +							  "WHERE p.puballtables AND pg_catalog.pg_relation_is_publishable('%s')\n"
    +							  "ORDER BY 1;",
    +							  oid, oid);
    +		}
     
    -			result = PSQLexec(buf.data);
    -			if (!result)
    -				goto error_return;
    -			else
    -				tuples = PQntuples(result);
    +		result = PSQLexec(buf.data);
    +		if (!result)
    +			goto error_return;
    +		else
    +			tuples = PQntuples(result);
     
    -			if (tuples > 0)
    -				printTableAddFooter(&cont, _("Included in publications:"));
    +		if (tuples > 0)
    +			printTableAddFooter(&cont, _("Included in publications:"));
     
    -			/* Might be an empty set - that's ok */
    -			for (i = 0; i < tuples; i++)
    -			{
    -				printfPQExpBuffer(&buf, "    \"%s\"",
    -								  PQgetvalue(result, i, 0));
    +		/* Might be an empty set - that's ok */
    +		for (i = 0; i < tuples; i++)
    +		{
    +			printfPQExpBuffer(&buf, "    \"%s\"",
    +							  PQgetvalue(result, i, 0));
     
    -				/* column list (if any) */
    -				if (!PQgetisnull(result, i, 2))
    -					appendPQExpBuffer(&buf, " (%s)",
    -									  PQgetvalue(result, i, 2));
    +			/* column list (if any) */
    +			if (!PQgetisnull(result, i, 2))
    +				appendPQExpBuffer(&buf, " (%s)",
    +								  PQgetvalue(result, i, 2));
     
    -				/* row filter (if any) */
    -				if (!PQgetisnull(result, i, 1))
    -					appendPQExpBuffer(&buf, " WHERE %s",
    -									  PQgetvalue(result, i, 1));
    +			/* row filter (if any) */
    +			if (!PQgetisnull(result, i, 1))
    +				appendPQExpBuffer(&buf, " WHERE %s",
    +								  PQgetvalue(result, i, 1));
     
    -				printTableAddFooter(&cont, buf.data);
    -			}
    -			PQclear(result);
    +			printTableAddFooter(&cont, buf.data);
    +		}
    +		PQclear(result);
     
     		/* Print publications where the table is in the EXCEPT clause */
     		if (pset.sversion >= 190000)
    @@ -3805,7 +3804,7 @@ describeRoles(const char *pattern, bool verbose, bool showSystem)
     		ncols++;
     	}
     	appendPQExpBufferStr(&buf, "\n, r.rolreplication");
    -		appendPQExpBufferStr(&buf, "\n, r.rolbypassrls");
    +	appendPQExpBufferStr(&buf, "\n, r.rolbypassrls");
     
     	appendPQExpBufferStr(&buf, "\nFROM pg_catalog.pg_roles r\n");
     
    @@ -3860,8 +3859,8 @@ describeRoles(const char *pattern, bool verbose, bool showSystem)
     		if (strcmp(PQgetvalue(res, i, (verbose ? 9 : 8)), "t") == 0)
     			add_role_attribute(&buf, _("Replication"));
     
    -			if (strcmp(PQgetvalue(res, i, (verbose ? 10 : 9)), "t") == 0)
    -				add_role_attribute(&buf, _("Bypass RLS"));
    +		if (strcmp(PQgetvalue(res, i, (verbose ? 10 : 9)), "t") == 0)
    +			add_role_attribute(&buf, _("Bypass RLS"));
     
     		conns = atoi(PQgetvalue(res, i, 6));
     		if (conns >= 0)
    @@ -5155,14 +5154,14 @@ listCollations(const char *pattern, bool verbose, bool showSystem)
     					  gettext_noop("Schema"),
     					  gettext_noop("Name"));
     
    -		appendPQExpBuffer(&buf,
    -						  "  CASE c.collprovider "
    -						  "WHEN " CppAsString2(COLLPROVIDER_DEFAULT) " THEN 'default' "
    -						  "WHEN " CppAsString2(COLLPROVIDER_BUILTIN) " THEN 'builtin' "
    -						  "WHEN " CppAsString2(COLLPROVIDER_LIBC) " THEN 'libc' "
    -						  "WHEN " CppAsString2(COLLPROVIDER_ICU) " THEN 'icu' "
    -						  "END AS \"%s\",\n",
    -						  gettext_noop("Provider"));
    +	appendPQExpBuffer(&buf,
    +					  "  CASE c.collprovider "
    +					  "WHEN " CppAsString2(COLLPROVIDER_DEFAULT) " THEN 'default' "
    +					  "WHEN " CppAsString2(COLLPROVIDER_BUILTIN) " THEN 'builtin' "
    +					  "WHEN " CppAsString2(COLLPROVIDER_LIBC) " THEN 'libc' "
    +					  "WHEN " CppAsString2(COLLPROVIDER_ICU) " THEN 'icu' "
    +					  "END AS \"%s\",\n",
    +					  gettext_noop("Provider"));
     
     	appendPQExpBuffer(&buf,
     					  "  c.collcollate AS \"%s\",\n"
    -- 
    2.50.1 (Apple Git-155)
    
    
    --6vzYk1swa63ey9i6--