SPLIT/MERGE use of is_internal=true

Noah Misch <noah@leadboat.com>

From: Noah Misch <noah@leadboat.com>
To: d.koval@postgrespro.ru, aekorotkov@gmail.com
Cc: pgsql-hackers@postgresql.org
Date: 2026-07-07T18:57:51Z
Lists: pgsql-hackers
commit f2e4cc4 wrote:
> +/*
> + * createPartitionTable:
> + *
> + * Create a new partition (newPartName) for the partitioned table (parent_rel).
> + * ownerId is determined by the partition on which the operation is performed,
> + * so it is passed separately.  The new partition will inherit the access method
> + * and persistence type from the parent table.
> + *
> + * Returns the created relation (locked in AccessExclusiveLock mode).
> + */
> +static Relation
> +createPartitionTable(List **wqueue, RangeVar *newPartName,
> +					 Relation parent_rel, Oid ownerId)
> +{
...
> +	/* Create the relation. */
> +	newRelId = heap_create_with_catalog(newPartName->relname,
> +										namespaceId,
> +										parent_relform->reltablespace,
> +										InvalidOid,
> +										InvalidOid,
> +										InvalidOid,
> +										ownerId,
> +										relamId,
> +										descriptor,
> +										NIL,
> +										RELKIND_RELATION,
> +										newPartName->relpersistence,
> +										false,
> +										false,
> +										ONCOMMIT_NOOP,
> +										(Datum) 0,
> +										true,
> +										allowSystemTableMods,
> +										true,
> +										InvalidOid,
> +										NULL);

This and other places in the SPLIT/MERGE patches pass is_internal=true, which
ultimately flows to hooks with the following meaning:

	/*
	 * If this flag is set, the user hasn't requested that the object be
	 * altered, but we're doing it anyway for some internal reason.
	 * Permissions-checking hooks may want to skip checks if, say, we're alter
	 * the constraints of a temporary heap during CLUSTER.
	 */
	bool		is_internal;

SPLIT/MERGE constitute user requests to create and/or drop tables, so they're
not like a CLUSTER temporary heap.  They should pass is_internal=false, like
when the user runs CREATE/DROP directly.



Commits

  1. Implement ALTER TABLE ... MERGE PARTITIONS ... command