• Alvaro Herrera's avatar
    logical replication: fix OID type mapping mechanism · 24c0a6c6
    Alvaro Herrera authored
    The logical replication type map seems to have been misused by its only
    caller -- it would try to use the remote OID as input for local type
    routines, which unsurprisingly could result in bogus "cache lookup
    failed for type XYZ" errors, or random other type names being picked up
    if they happened to use the right OID.  Fix that, changing
    Oid logicalrep_typmap_getid(Oid remoteid) to
    char *logicalrep_typmap_gettypname(Oid remoteid)
    which is more useful.  If the remote type is not part of the typmap,
    this simply prints "unrecognized type" instead of choking trying to
    figure out -- a pointless exercise (because the only input for that
    comes from replication messages, which are not under the local node's
    control) and dangerous to boot, when called from within an error context
    callback.
    
    Once that is done, it comes to light that the local OID in the typmap
    entry was not being used for anything; the type/schema names are what we
    need, so remove local type OID from that struct.
    
    Once you do that, it becomes pointless to attach a callback to regular
    syscache invalidation.  So remove that also.
    
    Reported-by: Dang Minh Huong
    Author: Masahiko Sawada
    Reviewed-by: Álvaro Herrera, Petr Jelínek, Dang Minh Huong, Atsushi Torikoshi
    Discussion: https://postgr.es/m/75DB81BEEA95B445AE6D576A0A5C9E936A6BE964@BPXM05GP.gisp.nec.co.jp
    Discussion: https://postgr.es/m/75DB81BEEA95B445AE6D576A0A5C9E936A6C4B0A@BPXM05GP.gisp.nec.co.jp
    24c0a6c6
relation.c 11.7 KB