SPLIT/MERGE use of is_internal=true - Mailing list pgsql-hackers

From Noah Misch
Subject SPLIT/MERGE use of is_internal=true
Date
Msg-id 20260707185751.f9.noahmisch@microsoft.com
Whole thread
List 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.



pgsql-hackers by date:

Previous
From: Tomas Vondra
Date:
Subject: Re: hashjoins vs. Bloom filters (yet again)
Next
From: Heikki Linnakangas
Date:
Subject: Re: Restructured Shared Buffer Hash Table