public inbox for [email protected]  
help / color / mirror / Atom feed
From: Alvaro Herrera <[email protected]>
To: Justin Pryzby <[email protected]>
Cc: Michael Paquier <[email protected]>
Cc: Soumyadeep Chakraborty <[email protected]>
Cc: Zhihong Yu <[email protected]>
Cc: [email protected]
Cc: Ashwin Agrawal <[email protected]>
Cc: [email protected]
Subject: Re: ALTER TABLE SET ACCESS METHOD on partitioned tables
Date: Thu, 1 Feb 2024 16:50:49 +0100
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>

> @@ -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)






view thread (32+ messages)  latest in thread

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected]
  Subject: Re: ALTER TABLE SET ACCESS METHOD on partitioned tables
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox