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.


Reply via email to