Remove _PG_fini Mikhail Litsarev
[online_analyze.git] / online_analyze.c
index 4b7fea6..0021fc3 100644 (file)
@@ -132,9 +132,9 @@ typedef struct OnlineAnalyzeTableStat {
        Oid                             tableid;
        bool                    rereadStat;
        PgStat_Counter  n_tuples;
-       PgStat_Counter  changes_since_analyze;
-       TimestampTz             autovac_analyze_timestamp;
-       TimestampTz             analyze_timestamp;
+       PgStat_Counter  mod_since_analyze;
+       TimestampTz             last_autoanalyze_time;
+       TimestampTz             last_analyze_time;
 } OnlineAnalyzeTableStat;
 
 static MemoryContext   onlineAnalyzeMemoryContext = NULL;
@@ -171,7 +171,12 @@ tableListAssign(const char * newval, bool doit, TableList *tbl)
        * follow work could be done only in normal processing because of
        * accsess to system catalog
        */
-       if (MyBackendId == InvalidBackendId || !IsUnderPostmaster ||
+#if PG_VERSION_NUM >= 170000
+       if (MyProcNumber == INVALID_PROC_NUMBER ||
+#else
+       if (MyBackendId == InvalidBackendId ||
+#endif
+               !IsUnderPostmaster ||
                !IsTransactionState())
        {
                includeTables.inited = false;
@@ -191,7 +196,10 @@ tableListAssign(const char * newval, bool doit, TableList *tbl)
        foreach(l, namelist)
        {
                char    *curname = (char *) lfirst(l);
-#if PG_VERSION_NUM >= 90200
+#if PG_VERSION_NUM >= 160000
+               Oid             relOid = RangeVarGetRelid(makeRangeVarFromNameList(
+                                                       stringToQualifiedNameList(curname, NULL)), NoLock, true);
+#elif PG_VERSION_NUM >= 90200
                Oid             relOid = RangeVarGetRelid(makeRangeVarFromNameList(
                                                        stringToQualifiedNameList(curname)), NoLock, true);
 #else
@@ -311,7 +319,12 @@ lateInit()
        TableList       *tl[] = {&includeTables, &excludeTables};
        int i;
 
-       if (MyBackendId == InvalidBackendId || !IsUnderPostmaster ||
+#if PG_VERSION_NUM >= 170000
+       if (MyProcNumber == INVALID_PROC_NUMBER ||
+#else
+       if (MyBackendId == InvalidBackendId ||
+#endif
+               !IsUnderPostmaster ||
                !IsTransactionState())
                return; /* we aren't in connected state */
 
@@ -499,8 +512,8 @@ makeAnalyze(Oid relOid, CmdKind operation, int64 naffected)
        else if (operation == CK_ANALYZE)
        {
                /* only analyze */
-               rstat->changes_since_analyze = 0;
-               rstat->analyze_timestamp = now;
+               rstat->mod_since_analyze = 0;
+               rstat->last_analyze_time = now;
                if (newTable)
                        rstat->rereadStat = true;
                return;
@@ -523,17 +536,36 @@ makeAnalyze(Oid relOid, CmdKind operation, int64 naffected)
 
                if (tabentry)
                {
-                       rstat->n_tuples = tabentry->n_dead_tuples + tabentry->n_live_tuples;
-                       rstat->changes_since_analyze =
-#if PG_VERSION_NUM >= 90000
+                       rstat->n_tuples =
+#if PG_VERSION_NUM >= 160000
+                               tabentry->dead_tuples + tabentry->live_tuples;
+#else
+                               tabentry->n_dead_tuples + tabentry->n_live_tuples;
+#endif
+
+                       rstat->mod_since_analyze =
+#if PG_VERSION_NUM >= 160000
+                               tabentry->mod_since_analyze;
+#elif PG_VERSION_NUM >= 90000
                                tabentry->changes_since_analyze;
 #else
                                tabentry->n_live_tuples + tabentry->n_dead_tuples -
                                        tabentry->last_anl_tuples;
 #endif
-                       rstat->autovac_analyze_timestamp =
+
+                       rstat->last_autoanalyze_time =
+#if PG_VERSION_NUM >= 160000
+                               tabentry->last_autoanalyze_time;
+#else
                                tabentry->autovac_analyze_timestamp;
-                       rstat->analyze_timestamp = tabentry->analyze_timestamp;
+#endif
+
+                       rstat->last_analyze_time =
+#if PG_VERSION_NUM >= 160000
+                               tabentry->last_analyze_time;
+#else
+                               tabentry->analyze_timestamp;
+#endif
                }
        }
 
@@ -541,12 +573,12 @@ makeAnalyze(Oid relOid, CmdKind operation, int64 naffected)
                /* force analyze after truncate, fasttruncate already did analyze */
                operation == CK_TRUNCATE || (
                /* do not analyze too often, if both stamps are exceeded the go */
-               TimestampDifferenceExceeds(rstat->analyze_timestamp, now, online_analyze_min_interval) &&
-               TimestampDifferenceExceeds(rstat->autovac_analyze_timestamp, now, online_analyze_min_interval) &&
+               TimestampDifferenceExceeds(rstat->last_analyze_time, now, online_analyze_min_interval) &&
+               TimestampDifferenceExceeds(rstat->last_autoanalyze_time, now, online_analyze_min_interval) &&
                /* do not analyze too small tables */
-               rstat->n_tuples + rstat->changes_since_analyze + naffected > online_analyze_lower_limit &&
+               rstat->n_tuples + rstat->mod_since_analyze + naffected > online_analyze_lower_limit &&
                /* be in sync with relation_needs_vacanalyze */
-               ((double)(rstat->changes_since_analyze + naffected)) >=
+               ((double)(rstat->mod_since_analyze + naffected)) >=
                         online_analyze_scale_factor * ((double)rstat->n_tuples) +
                         (double)online_analyze_threshold))
        {
@@ -634,8 +666,8 @@ makeAnalyze(Oid relOid, CmdKind operation, int64 naffected)
                                ((double)secs) + ((double)microsecs)/1.0e6);
                }
 
-               rstat->autovac_analyze_timestamp = now;
-               rstat->changes_since_analyze = 0;
+               rstat->last_autoanalyze_time = now;
+               rstat->mod_since_analyze = 0;
 
                switch(operation)
                {
@@ -659,8 +691,13 @@ makeAnalyze(Oid relOid, CmdKind operation, int64 naffected)
                /* update last analyze timestamp in local memory of backend */
                if (tabentry)
                {
+#if PG_VERSION_NUM >= 160000
+                       tabentry->last_analyze_time = now;
+                       tabentry->mod_since_analyze = 0;
+#else
                        tabentry->analyze_timestamp = now;
                        tabentry->changes_since_analyze = 0;
+#endif
                }
 #if 0
                /* force reload stat for new table */
@@ -672,25 +709,29 @@ makeAnalyze(Oid relOid, CmdKind operation, int64 naffected)
        {
 #if PG_VERSION_NUM >= 90000
                if (tabentry)
+#if PG_VERSION_NUM >= 160000
+                       tabentry->mod_since_analyze += naffected;
+#else
                        tabentry->changes_since_analyze += naffected;
+#endif
 #endif
                switch(operation)
                {
                        case CK_CREATE:
                        case CK_INSERT:
-                               rstat->changes_since_analyze += naffected;
+                               rstat->mod_since_analyze += naffected;
                                rstat->n_tuples += naffected;
                                break;
                        case CK_UPDATE:
-                               rstat->changes_since_analyze += 2 * naffected;
+                               rstat->mod_since_analyze += 2 * naffected;
                                rstat->n_tuples += naffected;
                                break;
                        case CK_DELETE:
-                               rstat->changes_since_analyze += naffected;
+                               rstat->mod_since_analyze += naffected;
                                break;
                        case CK_TRUNCATE:
                        case CK_FASTTRUNCATE:
-                               rstat->changes_since_analyze = 0;
+                               rstat->mod_since_analyze = 0;
                                rstat->n_tuples = 0;
                                break;
                        default:
@@ -767,8 +808,13 @@ onlineAnalyzeHooker(QueryDesc *queryDesc)
        {
                Datum           tblnamed = constval->constvalue;
                char            *tblname = text_to_cstring(DatumGetTextP(tblnamed));
+#if PG_VERSION_NUM >= 160000
+               RangeVar        *tblvar =
+                       makeRangeVarFromNameList(stringToQualifiedNameList(tblname, NULL));
+#else
                RangeVar        *tblvar =
                        makeRangeVarFromNameList(stringToQualifiedNameList(tblname));
+#endif
 
                makeAnalyze(RangeVarGetRelid(tblvar,
                                                                         NoLock,
@@ -995,8 +1041,8 @@ onlineAnalyzeHookerUtility(
 
                                        while((rstat = hash_seq_search(&hs)) != NULL)
                                        {
-                                               rstat->changes_since_analyze = 0;
-                                               rstat->analyze_timestamp = now;
+                                               rstat->mod_since_analyze = 0;
+                                               rstat->last_analyze_time = now;
                                        }
                                }
                        }
@@ -1350,23 +1396,3 @@ _PG_init(void)
 
        RegisterXactCallback(removeTable, NULL);
 }
-
-#if PG_VERSION_NUM < 150000
-void _PG_fini(void);
-void
-_PG_fini(void)
-{
-       ExecutorEnd_hook = oldExecutorEndHook;
-#if PG_VERSION_NUM >= 90200
-       ProcessUtility_hook = oldProcessUtilityHook;
-#endif
-
-       if (excludeTables.tables)
-               free(excludeTables.tables);
-       if (includeTables.tables)
-               free(includeTables.tables);
-
-       excludeTables.tables = includeTables.tables = NULL;
-       excludeTables.nTables = includeTables.nTables = 0;
-}
-#endif