On Tue, 31 Oct 2023 at 13:00, jian he <jian.universal...@gmail.com> wrote: > BEGIN; > CREATE TABLE fk_parted_pk (a int PRIMARY KEY) PARTITION BY LIST (a); > SELECT * FROM pgrowlocks('fk_parted_pk'); > ERROR: only heap AM is supported > > error should be the following part: > if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) > ereport(ERROR, > (errcode(ERRCODE_WRONG_OBJECT_TYPE), > errmsg("\"%s\" is a partitioned table", > RelationGetRelationName(rel)), > errdetail("Partitioned tables do not contain rows.")));
Yeah. Seems that 4b8266415 didn't look closely enough at the other error messages and mistakenly put the relam check first instead of last. Here's a patch that puts the relam check last. David
diff --git a/contrib/pgrowlocks/pgrowlocks.c b/contrib/pgrowlocks/pgrowlocks.c index a04e187ec4..adbc8279c3 100644 --- a/contrib/pgrowlocks/pgrowlocks.c +++ b/contrib/pgrowlocks/pgrowlocks.c @@ -81,10 +81,6 @@ pgrowlocks(PG_FUNCTION_ARGS) relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname)); rel = relation_openrv(relrv, AccessShareLock); - if (rel->rd_rel->relam != HEAP_TABLE_AM_OID) - ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("only heap AM is supported"))); - if (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), @@ -96,6 +92,10 @@ pgrowlocks(PG_FUNCTION_ARGS) (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg("\"%s\" is not a table", RelationGetRelationName(rel)))); + else if (rel->rd_rel->relam != HEAP_TABLE_AM_OID) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("only heap AM is supported"))); /* * check permissions: must have SELECT on table or be in