• Tom Lane's avatar
    Use LOAD not actual code execution to pull in plpython library. · fb6fcbd3
    Tom Lane authored
    Commit 866566a6 is insufficient to prevent dump/reload failures
    when using transform modules in a database with both plpython2 and
    plpython3 installed.  The reason is that the transform extension scripts
    use DO blocks as a mechanism to pull in the libpython library before
    creating the transform function.  It's necessary to preload the library
    because the dynamic loader won't do it for us on every platform, leading
    to "unresolved symbol" failures when the transform library is loaded.
    But it's *not* necessary to execute Python code, and doing so will
    provoke a multiple-Pythons-are-loaded error even after the preceding
    commit.
    
    To fix, use LOAD instead of a DO block.  That requires superuser privilege,
    but creation of a C function does anyway.  It also embeds knowledge of
    the underlying library name for each PL language; but that's wired into
    the initdb-time contents of pg_pltemplate too, so that doesn't seem like
    a large problem either.  Note that CREATE TRANSFORM as such doesn't call
    the language module at all.
    
    Per a report from Paul Jones.  Back-patch to 9.5 where transform modules
    were introduced.
    fb6fcbd3
hstore_plpython2u--1.0.sql 636 Bytes