• Tom Lane's avatar
    Avoid reporting "cache lookup failed" for some user-reachable cases. · 967a7b0f
    Tom Lane authored
    We have a not-terribly-thoroughly-enforced-yet project policy that internal
    errors with SQLSTATE XX000 (ie, plain elog) should not be triggerable from
    SQL.  record_in, domain_in, and PL validator functions all failed to meet
    this standard, because they threw plain elog("cache lookup failed for XXX")
    errors on bad OIDs, and those are all invokable from SQL.
    
    For record_in, the best fix is to upgrade typcache.c (lookup_type_cache)
    to throw a user-facing error for this case.  That seems consistent because
    it was more than halfway there already, having user-facing errors for shell
    types and non-composite types.  Having done that, tweak domain_in to rely
    on the typcache to throw an appropriate error.  (This costs little because
    InitDomainConstraintRef would fetch the typcache entry anyway.)
    
    For the PL validator functions, we already have a single choke point at
    CheckFunctionValidatorAccess, so just fix its error to be user-facing.
    
    Dilip Kumar, reviewed by Haribabu Kommi
    
    Discussion: <87wpxfygg9.fsf@credativ.de>
    967a7b0f
fmgr.c 66.8 KB