Re: ALTER TABLE SET ACCESS METHOD on partitioned tables - Mailing list pgsql-hackers

From Alvaro Herrera
Subject Re: ALTER TABLE SET ACCESS METHOD on partitioned tables
Date
Msg-id 202402011550.sfszd46247zi@alvherre.pgsql
Whole thread Raw
In response to Re: ALTER TABLE SET ACCESS METHOD on partitioned tables  (Justin Pryzby <pryzby@telsasoft.com>)
Responses Re: ALTER TABLE SET ACCESS METHOD on partitioned tables
Re: ALTER TABLE SET ACCESS METHOD on partitioned tables
List pgsql-hackers
> @@ -947,20 +947,22 @@ DefineRelation(CreateStmt *stmt, char relkind, Oid ownerId,
>       * a type of relation that needs one, use the default.
>       */
>      if (stmt->accessMethod != NULL)
> +        accessMethodId = get_table_am_oid(stmt->accessMethod, false);
> +    else if (RELKIND_HAS_TABLE_AM(relkind) || relkind == RELKIND_PARTITIONED_TABLE)
>      {
> -        accessMethod = stmt->accessMethod;
> -
> -        if (partitioned)
> -            ereport(ERROR,
> -                    (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
> -                     errmsg("specifying a table access method is not supported on a partitioned table")));
> +        if (stmt->partbound)
> +        {
> +            /*
> +             * For partitions, if no access method is specified, use the AM of
> +             * the parent table.
> +             */
> +            Assert(list_length(inheritOids) == 1);
> +            accessMethodId = get_rel_relam(linitial_oid(inheritOids));
> +            Assert(OidIsValid(accessMethodId));
> +        }
> +        else
> +            accessMethodId = get_table_am_oid(default_table_access_method, false);
>      }

I think this works similarly but not identically to tablespace defaults,
and the difference could be confusing.  You seem to have made it so that
the partitioned table _always_ have a table AM, so the partitions can
always inherit from it.  I think it would be more sensible to _allow_
partitioned tables to have one, but not mandatory; if they don't have
it, then a partition created from it would use default_table_access_method.

-- 
Álvaro Herrera               48°01'N 7°57'E  —  https://www.EnterpriseDB.com/
Bob [Floyd] used to say that he was planning to get a Ph.D. by the "green
stamp method," namely by saving envelopes addressed to him as 'Dr. Floyd'.
After collecting 500 such letters, he mused, a university somewhere in
Arizona would probably grant him a degree.              (Don Knuth)



pgsql-hackers by date:

Previous
From: vignesh C
Date:
Subject: Re: Skip collecting decoded changes of already-aborted transactions
Next
From: Robert Haas
Date:
Subject: Re: Flushing large data immediately in pqcomm