From 8402470baa2bb5682ffa6a7b9a4c7fd190799798 Mon Sep 17 00:00:00 2001 From: eelke Date: Tue, 19 Dec 2017 18:18:21 +0100 Subject: [PATCH] Loading of the list of indexes works for version 9.3 (and maybe before if there are no other differences) --- pglab/PgIndexContainer.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/pglab/PgIndexContainer.cpp b/pglab/PgIndexContainer.cpp index ca1da39..3f98f37 100644 --- a/pglab/PgIndexContainer.cpp +++ b/pglab/PgIndexContainer.cpp @@ -1,16 +1,22 @@ #include "PgIndexContainer.h" +#include "PgDatabaseCatalog.h" #include "Pgsql_Col.h" #include std::string PgIndexContainer::getLoadQuery() const { - return R"__( + std::string q = R"__( SELECT indexrelid, indrelid, indnatts, indisunique, indisprimary, indisexclusion, indimmediate, indisclustered, indisvalid, - indcheckxmin, indisready, indislive, indisreplident, indkey, + indcheckxmin, indisready, indislive, indkey, indcollation, indclass, indoption, indexprs, indpred, - pg_get_indexdef(indexrelid) -FROM pg_index)__"; + pg_get_indexdef(indexrelid))__"; + + auto cat = m_catalogue.lock(); + if (cat && cat->serverVersion() >= 90400) + q += ", indisreplident "; + q += "\nFROM pg_index"; + return q; } PgIndex PgIndexContainer::loadElem(const Pgsql::Row &row) @@ -19,12 +25,16 @@ PgIndex PgIndexContainer::loadElem(const Pgsql::Row &row) PgIndex v; col >> v.indexrelid >> v.relid >> v.natts >> v.isunique >> v.isprimary >> v.isexclusion >> v.immediate >> v.isclustered - >> v.isvalid >> v.checkxmin >> v.isready >> v.islive >> v.isreplident; + >> v.isvalid >> v.checkxmin >> v.isready >> v.islive; col.getAsVector(std::back_inserter(v.key)); col.getAsVector(std::back_inserter(v.collation)); col.getAsVector(std::back_inserter(v.indclass)); col.getAsVector(std::back_inserter(v.option)); col >> v.exprs >> v.pred >> v.definition; + auto cat = m_catalogue.lock(); + if (cat && cat->serverVersion() >= 90400) + col >> v.isreplident; + return v; }