diff options
Diffstat (limited to 'src/backend/utils/adt/regproc.c')
-rw-r--r-- | src/backend/utils/adt/regproc.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/backend/utils/adt/regproc.c b/src/backend/utils/adt/regproc.c index b41189db5c1..6c1ee9c92df 100644 --- a/src/backend/utils/adt/regproc.c +++ b/src/backend/utils/adt/regproc.c @@ -418,7 +418,8 @@ format_procedure_extended(Oid procedure_oid, bits16 flags) * This can be used to feed get_object_address. */ void -format_procedure_parts(Oid procedure_oid, List **objnames, List **objargs) +format_procedure_parts(Oid procedure_oid, List **objnames, List **objargs, + bool missing_ok) { HeapTuple proctup; Form_pg_proc procform; @@ -428,7 +429,11 @@ format_procedure_parts(Oid procedure_oid, List **objnames, List **objargs) proctup = SearchSysCache1(PROCOID, ObjectIdGetDatum(procedure_oid)); if (!HeapTupleIsValid(proctup)) - elog(ERROR, "cache lookup failed for procedure with OID %u", procedure_oid); + { + if (!missing_ok) + elog(ERROR, "cache lookup failed for procedure with OID %u", procedure_oid); + return; + } procform = (Form_pg_proc) GETSTRUCT(proctup); nargs = procform->pronargs; @@ -856,15 +861,20 @@ format_operator_qualified(Oid operator_oid) } void -format_operator_parts(Oid operator_oid, List **objnames, List **objargs) +format_operator_parts(Oid operator_oid, List **objnames, List **objargs, + bool missing_ok) { HeapTuple opertup; Form_pg_operator oprForm; opertup = SearchSysCache1(OPEROID, ObjectIdGetDatum(operator_oid)); if (!HeapTupleIsValid(opertup)) - elog(ERROR, "cache lookup failed for operator with OID %u", - operator_oid); + { + if (!missing_ok) + elog(ERROR, "cache lookup failed for operator with OID %u", + operator_oid); + return; + } oprForm = (Form_pg_operator) GETSTRUCT(opertup); *objnames = list_make2(get_namespace_name_or_temp(oprForm->oprnamespace), |