• Tom Lane's avatar
    Make sure ALTER TABLE preserves index tablespaces. · bd673e8e
    Tom Lane authored
    When rebuilding an existing index, ALTER TABLE correctly kept the
    physical file in the same tablespace, but it messed up the pg_class
    entry if the index had been in the database's default tablespace
    and "default_tablespace" was set to some non-default tablespace.
    This led to an inaccessible index.
    
    Fix by fixing pg_get_indexdef_string() to always include a tablespace
    clause, whether or not the index is in the default tablespace.  The
    previous behavior was installed in commit 537e92e4, and I think it just
    wasn't thought through very clearly; certainly the possible effect of
    default_tablespace wasn't considered.  There's some risk in changing the
    behavior of this function, but there are no other call sites in the core
    code.  Even if it's being used by some third party extension, it's fairly
    hard to envision a usage that is okay with a tablespace clause being
    appended some of the time but can't handle it being appended all the time.
    
    Back-patch to all supported versions.
    
    Code fix by me, investigation and test cases by Michael Paquier.
    
    Discussion: <1479294998857-5930602.post@n3.nabble.com>
    bd673e8e
tablespace.source 4.82 KB