mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Pre-beta mechanical code beautification.
Run pgindent, pgperltidy, and reformat-dat-files. I manually fixed a couple of comments that pgindent uglified.
This commit is contained in:
		@@ -429,7 +429,7 @@ do_analyze_rel(Relation onerel, VacuumParams *params,
 | 
			
		||||
	 */
 | 
			
		||||
	if (onerel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
 | 
			
		||||
	{
 | 
			
		||||
		List *idxs = RelationGetIndexList(onerel);
 | 
			
		||||
		List	   *idxs = RelationGetIndexList(onerel);
 | 
			
		||||
 | 
			
		||||
		Irel = NULL;
 | 
			
		||||
		nindexes = 0;
 | 
			
		||||
@@ -680,10 +680,10 @@ do_analyze_rel(Relation onerel, VacuumParams *params,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Now report ANALYZE to the cumulative stats system.  For regular tables, we do
 | 
			
		||||
	 * it only if not doing inherited stats.  For partitioned tables, we only
 | 
			
		||||
	 * do it for inherited stats. (We're never called for not-inherited stats
 | 
			
		||||
	 * on partitioned tables anyway.)
 | 
			
		||||
	 * Now report ANALYZE to the cumulative stats system.  For regular tables,
 | 
			
		||||
	 * we do it only if not doing inherited stats.  For partitioned tables, we
 | 
			
		||||
	 * only do it for inherited stats. (We're never called for not-inherited
 | 
			
		||||
	 * stats on partitioned tables anyway.)
 | 
			
		||||
	 *
 | 
			
		||||
	 * Reset the changes_since_analyze counter only if we analyzed all
 | 
			
		||||
	 * columns; otherwise, there is still work for auto-analyze to do.
 | 
			
		||||
 
 | 
			
		||||
@@ -246,8 +246,9 @@ DefineCollation(ParseState *pstate, List *names, List *parameters, bool if_not_e
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		 * Nondeterministic collations are currently only supported with ICU
 | 
			
		||||
		 * because that's the only case where it can actually make a difference.
 | 
			
		||||
		 * So we can save writing the code for the other providers.
 | 
			
		||||
		 * because that's the only case where it can actually make a
 | 
			
		||||
		 * difference. So we can save writing the code for the other
 | 
			
		||||
		 * providers.
 | 
			
		||||
		 */
 | 
			
		||||
		if (!collisdeterministic && collprovider != COLLPROVIDER_ICU)
 | 
			
		||||
			ereport(ERROR,
 | 
			
		||||
 
 | 
			
		||||
@@ -345,7 +345,7 @@ defGetCopyHeaderChoice(DefElem *def)
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			{
 | 
			
		||||
				char	*sval = defGetString(def);
 | 
			
		||||
				char	   *sval = defGetString(def);
 | 
			
		||||
 | 
			
		||||
				/*
 | 
			
		||||
				 * The set of strings accepted here should match up with the
 | 
			
		||||
@@ -365,8 +365,8 @@ defGetCopyHeaderChoice(DefElem *def)
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
	ereport(ERROR,
 | 
			
		||||
				(errcode(ERRCODE_SYNTAX_ERROR),
 | 
			
		||||
				 errmsg("%s requires a Boolean value or \"match\"",
 | 
			
		||||
			(errcode(ERRCODE_SYNTAX_ERROR),
 | 
			
		||||
			 errmsg("%s requires a Boolean value or \"match\"",
 | 
			
		||||
					def->defname)));
 | 
			
		||||
	return COPY_HEADER_FALSE;	/* keep compiler quiet */
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -800,7 +800,8 @@ NextCopyFromRawFields(CopyFromState cstate, char ***fields, int *nfields)
 | 
			
		||||
							 errmsg("column name mismatch in header line field %d: got null value (\"%s\"), expected \"%s\"",
 | 
			
		||||
									fldnum, cstate->opts.null_print, NameStr(attr->attname))));
 | 
			
		||||
 | 
			
		||||
				if (namestrcmp(&attr->attname, colName) != 0) {
 | 
			
		||||
				if (namestrcmp(&attr->attname, colName) != 0)
 | 
			
		||||
				{
 | 
			
		||||
					ereport(ERROR,
 | 
			
		||||
							(errcode(ERRCODE_BAD_COPY_FILE_FORMAT),
 | 
			
		||||
							 errmsg("column name mismatch in header line field %d: got \"%s\", expected \"%s\"",
 | 
			
		||||
 
 | 
			
		||||
@@ -439,8 +439,8 @@ BeginCopyTo(ParseState *pstate,
 | 
			
		||||
		 * locks on the source table(s).
 | 
			
		||||
		 */
 | 
			
		||||
		rewritten = pg_analyze_and_rewrite_fixedparams(raw_query,
 | 
			
		||||
										   pstate->p_sourcetext, NULL, 0,
 | 
			
		||||
										   NULL);
 | 
			
		||||
													   pstate->p_sourcetext, NULL, 0,
 | 
			
		||||
													   NULL);
 | 
			
		||||
 | 
			
		||||
		/* check that we got back something we can work with */
 | 
			
		||||
		if (rewritten == NIL)
 | 
			
		||||
@@ -862,7 +862,7 @@ DoCopyTo(CopyToState cstate)
 | 
			
		||||
 | 
			
		||||
				if (cstate->opts.csv_mode)
 | 
			
		||||
					CopyAttributeOutCSV(cstate, colname, false,
 | 
			
		||||
									list_length(cstate->attnumlist) == 1);
 | 
			
		||||
										list_length(cstate->attnumlist) == 1);
 | 
			
		||||
				else
 | 
			
		||||
					CopyAttributeOutText(cstate, colname);
 | 
			
		||||
			}
 | 
			
		||||
 
 | 
			
		||||
@@ -201,9 +201,9 @@ CreateDatabaseUsingWalLog(Oid src_dboid, Oid dst_dboid,
 | 
			
		||||
		 *
 | 
			
		||||
		 * We typically do not read relation data into shared_buffers without
 | 
			
		||||
		 * holding a relation lock. It's unclear what could go wrong if we
 | 
			
		||||
		 * skipped it in this case, because nobody can be modifying either
 | 
			
		||||
		 * the source or destination database at this point, and we have locks
 | 
			
		||||
		 * on both databases, too, but let's take the conservative route.
 | 
			
		||||
		 * skipped it in this case, because nobody can be modifying either the
 | 
			
		||||
		 * source or destination database at this point, and we have locks on
 | 
			
		||||
		 * both databases, too, but let's take the conservative route.
 | 
			
		||||
		 */
 | 
			
		||||
		dstrelid.relId = srcrelid.relId = relinfo->reloid;
 | 
			
		||||
		LockRelationId(&srcrelid, AccessShareLock);
 | 
			
		||||
@@ -274,9 +274,9 @@ ScanSourceDatabasePgClass(Oid tbid, Oid dbid, char *srcpath)
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * We can't use a real relcache entry for a relation in some other
 | 
			
		||||
	 * database, but since we're only going to access the fields related
 | 
			
		||||
	 * to physical storage, a fake one is good enough. If we didn't do this
 | 
			
		||||
	 * and used the smgr layer directly, we would have to worry about
 | 
			
		||||
	 * database, but since we're only going to access the fields related to
 | 
			
		||||
	 * physical storage, a fake one is good enough. If we didn't do this and
 | 
			
		||||
	 * used the smgr layer directly, we would have to worry about
 | 
			
		||||
	 * invalidations.
 | 
			
		||||
	 */
 | 
			
		||||
	rel = CreateFakeRelcacheEntry(rnode);
 | 
			
		||||
@@ -333,10 +333,10 @@ ScanSourceDatabasePgClassPage(Page page, Buffer buf, Oid tbid, Oid dbid,
 | 
			
		||||
							  char *srcpath, List *rnodelist,
 | 
			
		||||
							  Snapshot snapshot)
 | 
			
		||||
{
 | 
			
		||||
	BlockNumber		blkno = BufferGetBlockNumber(buf);
 | 
			
		||||
	OffsetNumber	offnum;
 | 
			
		||||
	OffsetNumber	maxoff;
 | 
			
		||||
	HeapTupleData	tuple;
 | 
			
		||||
	BlockNumber blkno = BufferGetBlockNumber(buf);
 | 
			
		||||
	OffsetNumber offnum;
 | 
			
		||||
	OffsetNumber maxoff;
 | 
			
		||||
	HeapTupleData tuple;
 | 
			
		||||
 | 
			
		||||
	maxoff = PageGetMaxOffsetNumber(page);
 | 
			
		||||
 | 
			
		||||
@@ -368,10 +368,10 @@ ScanSourceDatabasePgClassPage(Page page, Buffer buf, Oid tbid, Oid dbid,
 | 
			
		||||
			CreateDBRelInfo *relinfo;
 | 
			
		||||
 | 
			
		||||
			/*
 | 
			
		||||
			 * ScanSourceDatabasePgClassTuple is in charge of constructing
 | 
			
		||||
			 * a CreateDBRelInfo object for this tuple, but can also decide
 | 
			
		||||
			 * that this tuple isn't something we need to copy. If we do need
 | 
			
		||||
			 * to copy the relation, add it to the list.
 | 
			
		||||
			 * ScanSourceDatabasePgClassTuple is in charge of constructing a
 | 
			
		||||
			 * CreateDBRelInfo object for this tuple, but can also decide that
 | 
			
		||||
			 * this tuple isn't something we need to copy. If we do need to
 | 
			
		||||
			 * copy the relation, add it to the list.
 | 
			
		||||
			 */
 | 
			
		||||
			relinfo = ScanSourceDatabasePgClassTuple(&tuple, tbid, dbid,
 | 
			
		||||
													 srcpath);
 | 
			
		||||
@@ -395,9 +395,9 @@ CreateDBRelInfo *
 | 
			
		||||
ScanSourceDatabasePgClassTuple(HeapTupleData *tuple, Oid tbid, Oid dbid,
 | 
			
		||||
							   char *srcpath)
 | 
			
		||||
{
 | 
			
		||||
	CreateDBRelInfo	   *relinfo;
 | 
			
		||||
	Form_pg_class		classForm;
 | 
			
		||||
	Oid					relfilenode = InvalidOid;
 | 
			
		||||
	CreateDBRelInfo *relinfo;
 | 
			
		||||
	Form_pg_class classForm;
 | 
			
		||||
	Oid			relfilenode = InvalidOid;
 | 
			
		||||
 | 
			
		||||
	classForm = (Form_pg_class) GETSTRUCT(tuple);
 | 
			
		||||
 | 
			
		||||
@@ -406,11 +406,11 @@ ScanSourceDatabasePgClassTuple(HeapTupleData *tuple, Oid tbid, Oid dbid,
 | 
			
		||||
	 *
 | 
			
		||||
	 * Shared objects don't need to be copied, because they are shared.
 | 
			
		||||
	 * Objects without storage can't be copied, because there's nothing to
 | 
			
		||||
	 * copy. Temporary relations don't need to be copied either, because
 | 
			
		||||
	 * they are inaccessible outside of the session that created them,
 | 
			
		||||
	 * which must be gone already, and couldn't connect to a different database
 | 
			
		||||
	 * if it still existed. autovacuum will eventually remove the pg_class
 | 
			
		||||
	 * entries as well.
 | 
			
		||||
	 * copy. Temporary relations don't need to be copied either, because they
 | 
			
		||||
	 * are inaccessible outside of the session that created them, which must
 | 
			
		||||
	 * be gone already, and couldn't connect to a different database if it
 | 
			
		||||
	 * still existed. autovacuum will eventually remove the pg_class entries
 | 
			
		||||
	 * as well.
 | 
			
		||||
	 */
 | 
			
		||||
	if (classForm->reltablespace == GLOBALTABLESPACE_OID ||
 | 
			
		||||
		!RELKIND_HAS_STORAGE(classForm->relkind) ||
 | 
			
		||||
@@ -702,7 +702,7 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt)
 | 
			
		||||
	DefElem    *dcollate = NULL;
 | 
			
		||||
	DefElem    *dctype = NULL;
 | 
			
		||||
	DefElem    *diculocale = NULL;
 | 
			
		||||
	DefElem	   *dlocprovider = NULL;
 | 
			
		||||
	DefElem    *dlocprovider = NULL;
 | 
			
		||||
	DefElem    *distemplate = NULL;
 | 
			
		||||
	DefElem    *dallowconnections = NULL;
 | 
			
		||||
	DefElem    *dconnlimit = NULL;
 | 
			
		||||
@@ -824,10 +824,10 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt)
 | 
			
		||||
			/*
 | 
			
		||||
			 * We don't normally permit new databases to be created with
 | 
			
		||||
			 * system-assigned OIDs. pg_upgrade tries to preserve database
 | 
			
		||||
			 * OIDs, so we can't allow any database to be created with an
 | 
			
		||||
			 * OID that might be in use in a freshly-initialized cluster
 | 
			
		||||
			 * created by some future version. We assume all such OIDs will
 | 
			
		||||
			 * be from the system-managed OID range.
 | 
			
		||||
			 * OIDs, so we can't allow any database to be created with an OID
 | 
			
		||||
			 * that might be in use in a freshly-initialized cluster created
 | 
			
		||||
			 * by some future version. We assume all such OIDs will be from
 | 
			
		||||
			 * the system-managed OID range.
 | 
			
		||||
			 *
 | 
			
		||||
			 * As an exception, however, we permit any OID to be assigned when
 | 
			
		||||
			 * allow_system_table_mods=on (so that initdb can assign system
 | 
			
		||||
@@ -1348,15 +1348,15 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt)
 | 
			
		||||
	InvokeObjectPostCreateHook(DatabaseRelationId, dboid, 0);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * If we're going to be reading data for the to-be-created database
 | 
			
		||||
	 * into shared_buffers, take a lock on it. Nobody should know that this
 | 
			
		||||
	 * If we're going to be reading data for the to-be-created database into
 | 
			
		||||
	 * shared_buffers, take a lock on it. Nobody should know that this
 | 
			
		||||
	 * database exists yet, but it's good to maintain the invariant that a
 | 
			
		||||
	 * lock an AccessExclusiveLock on the database is sufficient to drop all
 | 
			
		||||
	 * of its buffers without worrying about more being read later.
 | 
			
		||||
	 *
 | 
			
		||||
	 * Note that we need to do this before entering the PG_ENSURE_ERROR_CLEANUP
 | 
			
		||||
	 * block below, because createdb_failure_callback expects this lock to
 | 
			
		||||
	 * be held already.
 | 
			
		||||
	 * Note that we need to do this before entering the
 | 
			
		||||
	 * PG_ENSURE_ERROR_CLEANUP block below, because createdb_failure_callback
 | 
			
		||||
	 * expects this lock to be held already.
 | 
			
		||||
	 */
 | 
			
		||||
	if (dbstrategy == CREATEDB_WAL_LOG)
 | 
			
		||||
		LockSharedObject(DatabaseRelationId, dboid, 0, AccessShareLock);
 | 
			
		||||
 
 | 
			
		||||
@@ -3833,7 +3833,7 @@ ExplainTargetRel(Plan *plan, Index rti, ExplainState *es)
 | 
			
		||||
			if (rte->tablefunc)
 | 
			
		||||
				if (rte->tablefunc->functype == TFT_XMLTABLE)
 | 
			
		||||
					objectname = "xmltable";
 | 
			
		||||
				else /* Must be TFT_JSON_TABLE */
 | 
			
		||||
				else			/* Must be TFT_JSON_TABLE */
 | 
			
		||||
					objectname = "json_table";
 | 
			
		||||
			else
 | 
			
		||||
				objectname = NULL;
 | 
			
		||||
 
 | 
			
		||||
@@ -758,10 +758,10 @@ execute_sql_string(const char *sql)
 | 
			
		||||
		CommandCounterIncrement();
 | 
			
		||||
 | 
			
		||||
		stmt_list = pg_analyze_and_rewrite_fixedparams(parsetree,
 | 
			
		||||
										   sql,
 | 
			
		||||
										   NULL,
 | 
			
		||||
										   0,
 | 
			
		||||
										   NULL);
 | 
			
		||||
													   sql,
 | 
			
		||||
													   NULL,
 | 
			
		||||
													   0,
 | 
			
		||||
													   NULL);
 | 
			
		||||
		stmt_list = pg_plan_queries(stmt_list, sql, CURSOR_OPT_PARALLEL_OK, NULL);
 | 
			
		||||
 | 
			
		||||
		foreach(lc2, stmt_list)
 | 
			
		||||
 
 | 
			
		||||
@@ -332,8 +332,8 @@ ExecRefreshMatView(RefreshMatViewStmt *stmt, const char *queryString,
 | 
			
		||||
		/*
 | 
			
		||||
		 * Inform cumulative stats system about our activity: basically, we
 | 
			
		||||
		 * truncated the matview and inserted some new data.  (The concurrent
 | 
			
		||||
		 * code path above doesn't need to worry about this because the inserts
 | 
			
		||||
		 * and deletes it issues get counted by lower-level code.)
 | 
			
		||||
		 * code path above doesn't need to worry about this because the
 | 
			
		||||
		 * inserts and deletes it issues get counted by lower-level code.)
 | 
			
		||||
		 */
 | 
			
		||||
		pgstat_count_truncate(matviewRel);
 | 
			
		||||
		if (!stmt->skipData)
 | 
			
		||||
 
 | 
			
		||||
@@ -297,7 +297,7 @@ contain_invalid_rfcolumn_walker(Node *node, rf_context *context)
 | 
			
		||||
 */
 | 
			
		||||
bool
 | 
			
		||||
pub_rf_contains_invalid_column(Oid pubid, Relation relation, List *ancestors,
 | 
			
		||||
						 bool pubviaroot)
 | 
			
		||||
							   bool pubviaroot)
 | 
			
		||||
{
 | 
			
		||||
	HeapTuple	rftuple;
 | 
			
		||||
	Oid			relid = RelationGetRelid(relation);
 | 
			
		||||
@@ -373,7 +373,7 @@ pub_rf_contains_invalid_column(Oid pubid, Relation relation, List *ancestors,
 | 
			
		||||
 */
 | 
			
		||||
bool
 | 
			
		||||
pub_collist_contains_invalid_column(Oid pubid, Relation relation, List *ancestors,
 | 
			
		||||
						 bool pubviaroot)
 | 
			
		||||
									bool pubviaroot)
 | 
			
		||||
{
 | 
			
		||||
	HeapTuple	tuple;
 | 
			
		||||
	Oid			relid = RelationGetRelid(relation);
 | 
			
		||||
@@ -384,8 +384,8 @@ pub_collist_contains_invalid_column(Oid pubid, Relation relation, List *ancestor
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * For a partition, if pubviaroot is true, find the topmost ancestor that
 | 
			
		||||
	 * is published via this publication as we need to use its column list
 | 
			
		||||
	 * for the changes.
 | 
			
		||||
	 * is published via this publication as we need to use its column list for
 | 
			
		||||
	 * the changes.
 | 
			
		||||
	 *
 | 
			
		||||
	 * Note that even though the column list used is for an ancestor, the
 | 
			
		||||
	 * REPLICA IDENTITY used will be for the actual child table.
 | 
			
		||||
@@ -399,19 +399,19 @@ pub_collist_contains_invalid_column(Oid pubid, Relation relation, List *ancestor
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	tuple = SearchSysCache2(PUBLICATIONRELMAP,
 | 
			
		||||
							  ObjectIdGetDatum(publish_as_relid),
 | 
			
		||||
							  ObjectIdGetDatum(pubid));
 | 
			
		||||
							ObjectIdGetDatum(publish_as_relid),
 | 
			
		||||
							ObjectIdGetDatum(pubid));
 | 
			
		||||
 | 
			
		||||
	if (!HeapTupleIsValid(tuple))
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	datum = SysCacheGetAttr(PUBLICATIONRELMAP, tuple,
 | 
			
		||||
							  Anum_pg_publication_rel_prattrs,
 | 
			
		||||
							  &isnull);
 | 
			
		||||
							Anum_pg_publication_rel_prattrs,
 | 
			
		||||
							&isnull);
 | 
			
		||||
 | 
			
		||||
	if (!isnull)
 | 
			
		||||
	{
 | 
			
		||||
		int	x;
 | 
			
		||||
		int			x;
 | 
			
		||||
		Bitmapset  *idattrs;
 | 
			
		||||
		Bitmapset  *columns = NULL;
 | 
			
		||||
 | 
			
		||||
@@ -429,8 +429,9 @@ pub_collist_contains_invalid_column(Oid pubid, Relation relation, List *ancestor
 | 
			
		||||
		/*
 | 
			
		||||
		 * Attnums in the bitmap returned by RelationGetIndexAttrBitmap are
 | 
			
		||||
		 * offset (to handle system columns the usual way), while column list
 | 
			
		||||
		 * does not use offset, so we can't do bms_is_subset(). Instead, we have
 | 
			
		||||
		 * to loop over the idattrs and check all of them are in the list.
 | 
			
		||||
		 * does not use offset, so we can't do bms_is_subset(). Instead, we
 | 
			
		||||
		 * have to loop over the idattrs and check all of them are in the
 | 
			
		||||
		 * list.
 | 
			
		||||
		 */
 | 
			
		||||
		x = -1;
 | 
			
		||||
		while ((x = bms_next_member(idattrs, x)) >= 0)
 | 
			
		||||
@@ -440,14 +441,14 @@ pub_collist_contains_invalid_column(Oid pubid, Relation relation, List *ancestor
 | 
			
		||||
			/*
 | 
			
		||||
			 * If pubviaroot is true, we are validating the column list of the
 | 
			
		||||
			 * parent table, but the bitmap contains the replica identity
 | 
			
		||||
			 * information of the child table. The parent/child attnums may not
 | 
			
		||||
			 * match, so translate them to the parent - get the attname from
 | 
			
		||||
			 * the child, and look it up in the parent.
 | 
			
		||||
			 * information of the child table. The parent/child attnums may
 | 
			
		||||
			 * not match, so translate them to the parent - get the attname
 | 
			
		||||
			 * from the child, and look it up in the parent.
 | 
			
		||||
			 */
 | 
			
		||||
			if (pubviaroot)
 | 
			
		||||
			{
 | 
			
		||||
				/* attribute name in the child table */
 | 
			
		||||
				char   *colname = get_attname(relid, attnum, false);
 | 
			
		||||
				char	   *colname = get_attname(relid, attnum, false);
 | 
			
		||||
 | 
			
		||||
				/*
 | 
			
		||||
				 * Determine the attnum for the attribute name in parent (we
 | 
			
		||||
@@ -720,7 +721,7 @@ TransformPubWhereClauses(List *tables, const char *queryString,
 | 
			
		||||
 */
 | 
			
		||||
static void
 | 
			
		||||
CheckPubRelationColumnList(List *tables, const char *queryString,
 | 
			
		||||
					   bool pubviaroot)
 | 
			
		||||
						   bool pubviaroot)
 | 
			
		||||
{
 | 
			
		||||
	ListCell   *lc;
 | 
			
		||||
 | 
			
		||||
@@ -864,7 +865,7 @@ CreatePublication(ParseState *pstate, CreatePublicationStmt *stmt)
 | 
			
		||||
									 publish_via_partition_root);
 | 
			
		||||
 | 
			
		||||
			CheckPubRelationColumnList(rels, pstate->p_sourcetext,
 | 
			
		||||
								   publish_via_partition_root);
 | 
			
		||||
									   publish_via_partition_root);
 | 
			
		||||
 | 
			
		||||
			PublicationAddTables(puboid, rels, true, NULL);
 | 
			
		||||
			CloseTableList(rels);
 | 
			
		||||
@@ -1198,8 +1199,8 @@ AlterPublicationTables(AlterPublicationStmt *stmt, HeapTuple tup,
 | 
			
		||||
 | 
			
		||||
				/* Transform the int2vector column list to a bitmap. */
 | 
			
		||||
				columnListDatum = SysCacheGetAttr(PUBLICATIONRELMAP, rftuple,
 | 
			
		||||
												   Anum_pg_publication_rel_prattrs,
 | 
			
		||||
												   &isnull);
 | 
			
		||||
												  Anum_pg_publication_rel_prattrs,
 | 
			
		||||
												  &isnull);
 | 
			
		||||
 | 
			
		||||
				if (!isnull)
 | 
			
		||||
					oldcolumns = pub_collist_to_bitmapset(NULL, columnListDatum, NULL);
 | 
			
		||||
@@ -1210,15 +1211,15 @@ AlterPublicationTables(AlterPublicationStmt *stmt, HeapTuple tup,
 | 
			
		||||
			foreach(newlc, rels)
 | 
			
		||||
			{
 | 
			
		||||
				PublicationRelInfo *newpubrel;
 | 
			
		||||
				Oid					newrelid;
 | 
			
		||||
				Bitmapset		   *newcolumns = NULL;
 | 
			
		||||
				Oid			newrelid;
 | 
			
		||||
				Bitmapset  *newcolumns = NULL;
 | 
			
		||||
 | 
			
		||||
				newpubrel = (PublicationRelInfo *) lfirst(newlc);
 | 
			
		||||
				newrelid = RelationGetRelid(newpubrel->relation);
 | 
			
		||||
 | 
			
		||||
				/*
 | 
			
		||||
				 * If the new publication has column list, transform it to
 | 
			
		||||
				 * a bitmap too.
 | 
			
		||||
				 * If the new publication has column list, transform it to a
 | 
			
		||||
				 * bitmap too.
 | 
			
		||||
				 */
 | 
			
		||||
				if (newpubrel->columns)
 | 
			
		||||
				{
 | 
			
		||||
 
 | 
			
		||||
@@ -258,9 +258,9 @@ CreateStatistics(CreateStatsStmt *stmt)
 | 
			
		||||
			nattnums++;
 | 
			
		||||
			ReleaseSysCache(atttuple);
 | 
			
		||||
		}
 | 
			
		||||
		else if (IsA(selem->expr, Var))	/* column reference in parens */
 | 
			
		||||
		else if (IsA(selem->expr, Var)) /* column reference in parens */
 | 
			
		||||
		{
 | 
			
		||||
			Var *var = (Var *) selem->expr;
 | 
			
		||||
			Var		   *var = (Var *) selem->expr;
 | 
			
		||||
			TypeCacheEntry *type;
 | 
			
		||||
 | 
			
		||||
			/* Disallow use of system attributes in extended stats */
 | 
			
		||||
@@ -297,10 +297,11 @@ CreateStatistics(CreateStatsStmt *stmt)
 | 
			
		||||
			while ((k = bms_next_member(attnums, k)) >= 0)
 | 
			
		||||
			{
 | 
			
		||||
				AttrNumber	attnum = k + FirstLowInvalidHeapAttributeNumber;
 | 
			
		||||
 | 
			
		||||
				if (attnum <= 0)
 | 
			
		||||
					ereport(ERROR,
 | 
			
		||||
						(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 | 
			
		||||
						 errmsg("statistics creation on system columns is not supported")));
 | 
			
		||||
							(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
 | 
			
		||||
							 errmsg("statistics creation on system columns is not supported")));
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			/*
 | 
			
		||||
@@ -511,9 +512,9 @@ CreateStatistics(CreateStatsStmt *stmt)
 | 
			
		||||
	relation_close(statrel, RowExclusiveLock);
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * We used to create the pg_statistic_ext_data tuple too, but it's not clear
 | 
			
		||||
	 * what value should the stxdinherit flag have (it depends on whether the rel
 | 
			
		||||
	 * is partitioned, contains data, etc.)
 | 
			
		||||
	 * We used to create the pg_statistic_ext_data tuple too, but it's not
 | 
			
		||||
	 * clear what value should the stxdinherit flag have (it depends on
 | 
			
		||||
	 * whether the rel is partitioned, contains data, etc.)
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
	InvokeObjectPostCreateHook(StatisticExtRelationId, statoid, 0);
 | 
			
		||||
 
 | 
			
		||||
@@ -1578,13 +1578,13 @@ DropSubscription(DropSubscriptionStmt *stmt, bool isTopLevel)
 | 
			
		||||
	PG_END_TRY();
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Tell the cumulative stats system that the subscription is getting dropped.
 | 
			
		||||
	 * We can safely report dropping the subscription statistics here if the
 | 
			
		||||
	 * subscription is associated with a replication slot since we cannot run
 | 
			
		||||
	 * DROP SUBSCRIPTION inside a transaction block.  Subscription statistics
 | 
			
		||||
	 * will be removed later by (auto)vacuum either if it's not associated
 | 
			
		||||
	 * with a replication slot or if the message for dropping the subscription
 | 
			
		||||
	 * gets lost.
 | 
			
		||||
	 * Tell the cumulative stats system that the subscription is getting
 | 
			
		||||
	 * dropped. We can safely report dropping the subscription statistics here
 | 
			
		||||
	 * if the subscription is associated with a replication slot since we
 | 
			
		||||
	 * cannot run DROP SUBSCRIPTION inside a transaction block.  Subscription
 | 
			
		||||
	 * statistics will be removed later by (auto)vacuum either if it's not
 | 
			
		||||
	 * associated with a replication slot or if the message for dropping the
 | 
			
		||||
	 * subscription gets lost.
 | 
			
		||||
	 */
 | 
			
		||||
	if (slotname)
 | 
			
		||||
		pgstat_drop_subscription(subid);
 | 
			
		||||
 
 | 
			
		||||
@@ -495,8 +495,8 @@ static ObjectAddress addFkRecurseReferenced(List **wqueue, Constraint *fkconstra
 | 
			
		||||
											bool old_check_ok,
 | 
			
		||||
											Oid parentDelTrigger, Oid parentUpdTrigger);
 | 
			
		||||
static void validateFkOnDeleteSetColumns(int numfks, const int16 *fkattnums,
 | 
			
		||||
									   int numfksetcols, const int16 *fksetcolsattnums,
 | 
			
		||||
									   List *fksetcols);
 | 
			
		||||
										 int numfksetcols, const int16 *fksetcolsattnums,
 | 
			
		||||
										 List *fksetcols);
 | 
			
		||||
static void addFkRecurseReferencing(List **wqueue, Constraint *fkconstraint,
 | 
			
		||||
									Relation rel, Relation pkrel, Oid indexOid, Oid parentConstr,
 | 
			
		||||
									int numfks, int16 *pkattnum, int16 *fkattnum,
 | 
			
		||||
@@ -5579,7 +5579,7 @@ ATRewriteTables(AlterTableStmt *parsetree, List **wqueue, LOCKMODE lockmode,
 | 
			
		||||
 | 
			
		||||
			foreach(lc, seqlist)
 | 
			
		||||
			{
 | 
			
		||||
				Oid         seq_relid = lfirst_oid(lc);
 | 
			
		||||
				Oid			seq_relid = lfirst_oid(lc);
 | 
			
		||||
 | 
			
		||||
				SequenceChangePersistence(seq_relid, tab->newrelpersistence);
 | 
			
		||||
			}
 | 
			
		||||
@@ -9448,8 +9448,8 @@ validateFkOnDeleteSetColumns(int numfks, const int16 *fkattnums,
 | 
			
		||||
{
 | 
			
		||||
	for (int i = 0; i < numfksetcols; i++)
 | 
			
		||||
	{
 | 
			
		||||
		int16 setcol_attnum = fksetcolsattnums[i];
 | 
			
		||||
		bool seen = false;
 | 
			
		||||
		int16		setcol_attnum = fksetcolsattnums[i];
 | 
			
		||||
		bool		seen = false;
 | 
			
		||||
 | 
			
		||||
		for (int j = 0; j < numfks; j++)
 | 
			
		||||
		{
 | 
			
		||||
@@ -9462,7 +9462,8 @@ validateFkOnDeleteSetColumns(int numfks, const int16 *fkattnums,
 | 
			
		||||
 | 
			
		||||
		if (!seen)
 | 
			
		||||
		{
 | 
			
		||||
			char *col = strVal(list_nth(fksetcols, i));
 | 
			
		||||
			char	   *col = strVal(list_nth(fksetcols, i));
 | 
			
		||||
 | 
			
		||||
			ereport(ERROR,
 | 
			
		||||
					(errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
 | 
			
		||||
					 errmsg("column \"%s\" referenced in ON DELETE SET action must be part of foreign key", col)));
 | 
			
		||||
@@ -15890,6 +15891,7 @@ relation_mark_replica_identity(Relation rel, char ri_type, Oid indexOid,
 | 
			
		||||
			CatalogTupleUpdate(pg_index, &pg_index_tuple->t_self, pg_index_tuple);
 | 
			
		||||
			InvokeObjectPostAlterHookArg(IndexRelationId, thisIndexOid, 0,
 | 
			
		||||
										 InvalidOid, is_internal);
 | 
			
		||||
 | 
			
		||||
			/*
 | 
			
		||||
			 * Invalidate the relcache for the table, so that after we commit
 | 
			
		||||
			 * all sessions will refresh the table's replica identity index
 | 
			
		||||
@@ -17931,12 +17933,12 @@ ATExecAttachPartition(List **wqueue, Relation rel, PartitionCmd *cmd,
 | 
			
		||||
	/*
 | 
			
		||||
	 * If the partition we just attached is partitioned itself, invalidate
 | 
			
		||||
	 * relcache for all descendent partitions too to ensure that their
 | 
			
		||||
	 * rd_partcheck expression trees are rebuilt; partitions already locked
 | 
			
		||||
	 * at the beginning of this function.
 | 
			
		||||
	 * rd_partcheck expression trees are rebuilt; partitions already locked at
 | 
			
		||||
	 * the beginning of this function.
 | 
			
		||||
	 */
 | 
			
		||||
	if (attachrel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
 | 
			
		||||
	{
 | 
			
		||||
		ListCell *l;
 | 
			
		||||
		ListCell   *l;
 | 
			
		||||
 | 
			
		||||
		foreach(l, attachrel_children)
 | 
			
		||||
		{
 | 
			
		||||
@@ -18652,13 +18654,13 @@ DetachPartitionFinalize(Relation rel, Relation partRel, bool concurrent,
 | 
			
		||||
	/*
 | 
			
		||||
	 * If the partition we just detached is partitioned itself, invalidate
 | 
			
		||||
	 * relcache for all descendent partitions too to ensure that their
 | 
			
		||||
	 * rd_partcheck expression trees are rebuilt; must lock partitions
 | 
			
		||||
	 * before doing so, using the same lockmode as what partRel has been
 | 
			
		||||
	 * locked with by the caller.
 | 
			
		||||
	 * rd_partcheck expression trees are rebuilt; must lock partitions before
 | 
			
		||||
	 * doing so, using the same lockmode as what partRel has been locked with
 | 
			
		||||
	 * by the caller.
 | 
			
		||||
	 */
 | 
			
		||||
	if (partRel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE)
 | 
			
		||||
	{
 | 
			
		||||
		List   *children;
 | 
			
		||||
		List	   *children;
 | 
			
		||||
 | 
			
		||||
		children = find_all_inheritors(RelationGetRelid(partRel),
 | 
			
		||||
									   AccessExclusiveLock, NULL);
 | 
			
		||||
 
 | 
			
		||||
@@ -89,7 +89,7 @@ char	   *default_tablespace = NULL;
 | 
			
		||||
char	   *temp_tablespaces = NULL;
 | 
			
		||||
bool		allow_in_place_tablespaces = false;
 | 
			
		||||
 | 
			
		||||
Oid         binary_upgrade_next_pg_tablespace_oid = InvalidOid;
 | 
			
		||||
Oid			binary_upgrade_next_pg_tablespace_oid = InvalidOid;
 | 
			
		||||
 | 
			
		||||
static void create_tablespace_directories(const char *location,
 | 
			
		||||
										  const Oid tablespaceoid);
 | 
			
		||||
 
 | 
			
		||||
@@ -798,11 +798,11 @@ AlterRole(ParseState *pstate, AlterRoleStmt *stmt)
 | 
			
		||||
	 */
 | 
			
		||||
	if (drolemembers)
 | 
			
		||||
	{
 | 
			
		||||
		List	   *rolemembers	= (List *) drolemembers->arg;
 | 
			
		||||
		List	   *rolemembers = (List *) drolemembers->arg;
 | 
			
		||||
 | 
			
		||||
		CommandCounterIncrement();
 | 
			
		||||
 | 
			
		||||
		if (stmt->action == +1)		/* add members to role */
 | 
			
		||||
		if (stmt->action == +1) /* add members to role */
 | 
			
		||||
			AddRoleMems(rolename, roleid,
 | 
			
		||||
						rolemembers, roleSpecsToIds(rolemembers),
 | 
			
		||||
						GetUserId(), false);
 | 
			
		||||
 
 | 
			
		||||
@@ -1409,7 +1409,7 @@ vac_update_relstats(Relation relation,
 | 
			
		||||
		*frozenxid_updated = false;
 | 
			
		||||
	if (TransactionIdIsNormal(frozenxid) && oldfrozenxid != frozenxid)
 | 
			
		||||
	{
 | 
			
		||||
		bool	update = false;
 | 
			
		||||
		bool		update = false;
 | 
			
		||||
 | 
			
		||||
		if (TransactionIdPrecedes(oldfrozenxid, frozenxid))
 | 
			
		||||
			update = true;
 | 
			
		||||
@@ -1432,7 +1432,7 @@ vac_update_relstats(Relation relation,
 | 
			
		||||
		*minmulti_updated = false;
 | 
			
		||||
	if (MultiXactIdIsValid(minmulti) && oldminmulti != minmulti)
 | 
			
		||||
	{
 | 
			
		||||
		bool	update = false;
 | 
			
		||||
		bool		update = false;
 | 
			
		||||
 | 
			
		||||
		if (MultiXactIdPrecedes(oldminmulti, minmulti))
 | 
			
		||||
			update = true;
 | 
			
		||||
 
 | 
			
		||||
@@ -112,7 +112,7 @@ typedef enum PVIndVacStatus
 | 
			
		||||
	PARALLEL_INDVAC_STATUS_NEED_BULKDELETE,
 | 
			
		||||
	PARALLEL_INDVAC_STATUS_NEED_CLEANUP,
 | 
			
		||||
	PARALLEL_INDVAC_STATUS_COMPLETED
 | 
			
		||||
}			PVIndVacStatus;
 | 
			
		||||
} PVIndVacStatus;
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Struct for index vacuum statistics of an index that is used for parallel vacuum.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user