Hi, Consider the following test:
CREATE OR REPLACE FUNCTION dummy_binaryint4(a int4, b int4) RETURNS int4 AS $$ BEGIN RETURN a; END; $$ LANGUAGE 'plpgsql' IMMUTABLE; CREATE OPERATOR CLASS custom_opclass2 FOR TYPE int2 USING BTREE AS OPERATOR 1 = , FUNCTION 1 dummy_binaryint4(int4, int4); t=# CREATE TABLE list_tab(a int2, b int) PARTITION BY LIST (a custom_opclass2); *ERROR: cache lookup failed for function 0* In the above test creating OP class type int2, but passing the function of int4 type. During CREATE PARTITION, ComputePartitionAttrs() able to resolve the opclass for the partition key (partition key type is int2), but while looking for a method for the int2 - it unable to find the proper function and end up with the cache lookup failed error. Error coming from RelationBuildPartitionKey(). I think overall this is expected but still error can be better - like all the other places where get_opfamily_proc() unable to find valid function oid. PFA patch, where added elog() to add the error message same as all other places. Thanks, Rushabh Lathia www.EnterpriseDB.com
diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 43238dd..6bd93b0 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -945,6 +945,10 @@ RelationBuildPartitionKey(Relation relation) opclassform->opcintype, opclassform->opcintype, BTORDER_PROC); + if (!OidIsValid(funcid)) /* should not happen */ + elog(ERROR, "missing support function %d(%u,%u) in opfamily %u", + BTORDER_PROC, opclassform->opcintype, opclassform->opcintype, + opclassform->opcfamily); fmgr_info(funcid, &key->partsupfunc[i]);
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers