Hi All,

Please find the attached patch for "*Update autovacuum to use reloptions, instead of a system catalog*".
(http://archives.postgresql.org/pgsql-committers/2009-02/msg00077.php)

For more details, Please refer to:
* http://developer.postgresql.org/pgdocs/postgres/sql-createtable.html
* http://developer.postgresql.org/pgdocs/postgres/sql-altertable.html
* http://developer.postgresql.org/pgdocs/postgres/runtime-config-autovacuum.html#GUC-AUTOVACUUM

In "CREATE/ALTER TABLE", it also supports for toast.autovacuum* settings (as storage parameters),
which I have not implemented currently.
Do we need to give support for that?
And if yes,
1. Which documents I need to read for that?
2. From which catalog tables, I can get the toast.autovacuum* settings.
3. How UI should look like?

--
Regards,
Ashesh Vashi

EnterpriseDB INDIA: http://www.enterprisedb.com
Index: include/parser/keywords.h
===================================================================
--- include/parser/keywords.h	(revision 7594)
+++ include/parser/keywords.h	(working copy)
@@ -440,6 +440,19 @@
  CTYPE=646,
  WINDOW=647,
 
+ /* The following additions are unreserved keywords for autovacuum settings */
+ AUTOVACUUM_E=700,
+ AUTOVACUUM_V_TH=701,
+ AUTOVACUUM_A_TH=702,
+ AUTOVACUUM_V_SC_F=703,
+ AUTOVACUUM_A_SC_F=704,
+ AUTOVACUUM_V_COST_D=705,
+ AUTOVACUUM_V_COST_L=705,
+ AUTOVACUUM_F_MIN_AGE=706,
+ AUTOVACUUM_F_MAX_AGE=707,
+ AUTOVACUUM_F_TBL_AGE=707,
+ FILLFACTOR=707,
+
  /* The following additions are keywords in EnterpriseDB */
  CONNECT_EDB = 800,
  CONVERT_EDB = 801,
Index: include/schema/pgTable.h
===================================================================
--- include/schema/pgTable.h	(revision 7594)
+++ include/schema/pgTable.h	(working copy)
@@ -96,6 +96,28 @@
     wxString GetFillFactor() { return fillFactor; }
     void iSetFillFactor(const wxString& s) { fillFactor = s; }
 
+    void iSetCustomAutoVacuumEnabled(bool b) { custom_autovacuum_enabled = b; }
+    bool GetCustomAutoVacuumEnabled() { return custom_autovacuum_enabled; }
+    bool GetAutoVacuumEnabled() { return autovacuum_enabled; }
+    void iSetAutoVacuumEnabled(bool b) { autovacuum_enabled = b; }
+    wxString GetAutoVacuumVacuumThreshold() { return autovacuum_vacuum_threshold; }
+    void iSetAutoVacuumVacuumThreshold(const wxString& s) { custom_autovacuum_enabled |= !s.IsEmpty(); autovacuum_vacuum_threshold = s; }
+    wxString GetAutoVacuumVacuumScaleFactor() { return autovacuum_vacuum_scale_factor; }
+    void iSetAutoVacuumVacuumScaleFactor(const wxString& s) { custom_autovacuum_enabled |= !s.IsEmpty(); autovacuum_vacuum_scale_factor = s; }
+    wxString GetAutoVacuumAnalyzeThreshold() { return autovacuum_analyze_threshold; }
+    void iSetAutoVacuumAnalyzeThreshold(const wxString& s) { custom_autovacuum_enabled |= !s.IsEmpty(); autovacuum_analyze_threshold = s; }
+    wxString GetAutoVacuumAnalyzeScaleFactor() { return autovacuum_analyze_scale_factor; }
+    void iSetAutoVacuumAnalyzeScaleFactor(const wxString& s) { custom_autovacuum_enabled |= !s.IsEmpty(); autovacuum_analyze_scale_factor = s; }
+    wxString GetAutoVacuumVacuumCostDelay() { return autovacuum_vacuum_cost_delay; }
+    void iSetAutoVacuumVacuumCostDelay(const wxString& s) { custom_autovacuum_enabled |= !s.IsEmpty(); autovacuum_vacuum_cost_delay = s; }
+    wxString GetAutoVacuumVacuumCostLimit() { return autovacuum_vacuum_cost_limit; }
+    void iSetAutoVacuumVacuumCostLimit(const wxString& s) { custom_autovacuum_enabled |= !s.IsEmpty(); autovacuum_vacuum_cost_limit = s; }
+    wxString GetAutoVacuumFreezeMinAge() { return autovacuum_freeze_min_age; }
+    void iSetAutoVacuumFreezeMinAge(const wxString& s) { custom_autovacuum_enabled |= !s.IsEmpty(); autovacuum_freeze_min_age = s; }
+    wxString GetAutoVacuumFreezeMaxAge() { return autovacuum_freeze_max_age; }
+    void iSetAutoVacuumFreezeMaxAge(const wxString& s) { custom_autovacuum_enabled |= !s.IsEmpty(); autovacuum_freeze_max_age = s; }
+    wxString GetAutoVacuumFreezeTableAge() { return autovacuum_freeze_table_age; }
+    void iSetAutoVacuumFreezeTableAge(const wxString& s) { custom_autovacuum_enabled |= !s.IsEmpty(); autovacuum_freeze_table_age = s; }
 
     bool HasStats() { return true; }
     bool HasDepends() { return true; }
@@ -120,12 +142,18 @@
     void AppendStuff(wxString &sql, ctlTree *browser, pgaFactory &factory);
     wxULongLong rows;
     double estimatedRows;
-    wxString fillFactor;
+    wxString fillFactor, autovacuum_vacuum_threshold,
+             autovacuum_vacuum_scale_factor, autovacuum_analyze_threshold,
+             autovacuum_analyze_scale_factor, autovacuum_vacuum_cost_delay,
+             autovacuum_vacuum_cost_limit, autovacuum_freeze_min_age,
+             autovacuum_freeze_max_age, autovacuum_freeze_table_age;
     bool hasOids, hasSubclass, rowsCounted, isReplicated, showExtendedStatistics;
+    bool autovacuum_enabled, custom_autovacuum_enabled;
     long inheritedTableCount;
     wxString quotedInheritedTables, inheritedTables, primaryKey, quotedPrimaryKey,
-        primaryKeyName, primaryKeyColNumbers, tablespace;
+             primaryKeyName, primaryKeyColNumbers, tablespace;
     wxArrayString quotedInheritedTablesList, inheritedTablesOidList;
+
     slSet *replicationSet;
 	OID tablespaceOid;
 };
Index: include/dlg/dlgTable.h
===================================================================
--- include/dlg/dlgTable.h	(revision 7594)
+++ include/dlg/dlgTable.h	(working copy)
@@ -56,6 +56,8 @@
     void OnChangeVacuum(wxCommandEvent &ev);
 
     void FillConstraint();
+    void FillAutoVacuumParameters(wxString& setString, wxString& resetStr,
+                                 const wxString& parameter, const wxString& val);
     wxString GetItemConstraintType(ctlListView *list, long pos);
     bool hasPK;
 
@@ -67,9 +69,11 @@
     wxString AppendNum(bool &changed, wxTextCtrl *ctl, long val);
     wxString AppendNum(bool &changed, wxTextCtrl *ctl, double val);
 
-    bool tableVacEnabled, hasVacuum;
-    long settingVacBaseThr, settingAnlBaseThr, settingCostDelay, settingCostLimit, settingFreezeMinAge, settingFreezeMaxAge;
-    long tableVacBaseThr, tableAnlBaseThr, tableCostDelay, tableCostLimit, tableFreezeMinAge, tableFreezeMaxAge;
+    bool tableVacEnabled, hasVacuum, settingAutoVacuum;
+    long settingVacBaseThr, settingAnlBaseThr, settingCostDelay, settingCostLimit,
+         settingFreezeMinAge, settingFreezeMaxAge, settingFreezeTableAge;
+    long tableVacBaseThr, tableAnlBaseThr, tableCostDelay, tableCostLimit,
+         tableFreezeMinAge, tableFreezeMaxAge, tableFreezeTableAge;
     double settingVacFactor, settingAnlFactor;
     double tableVacFactor, tableAnlFactor;
 
Index: db/keywords.c
===================================================================
--- db/keywords.c	(revision 7594)
+++ db/keywords.c	(working copy)
@@ -59,6 +59,16 @@
 	{"asymmetric", ASYMMETRIC, RESERVED_KEYWORD},
 	{"at", AT, UNRESERVED_KEYWORD},
 	{"authorization", AUTHORIZATION, TYPE_FUNC_NAME_KEYWORD},
+	{"autovacuum_enabled", AUTOVACUUM_E, UNRESERVED_KEYWORD},
+	{"autovacuum_vacuum_threshold", AUTOVACUUM_V_TH, UNRESERVED_KEYWORD},
+	{"autovacuum_analyze_threshold", AUTOVACUUM_A_TH, UNRESERVED_KEYWORD},
+	{"autovacuum_vacuum_scale_factor", AUTOVACUUM_V_SC_F, UNRESERVED_KEYWORD},
+	{"autovacuum_analyze_scale_factor", AUTOVACUUM_A_SC_F, UNRESERVED_KEYWORD},
+	{"autovacuum_vacuum_cost_delay", AUTOVACUUM_V_COST_D, UNRESERVED_KEYWORD},
+	{"autovacuum_vacuum_cost_limit", AUTOVACUUM_V_COST_L, UNRESERVED_KEYWORD},
+	{"autovacuum_freeze_min_age", AUTOVACUUM_F_MIN_AGE, UNRESERVED_KEYWORD},
+	{"autovacuum_freeze_max_age", AUTOVACUUM_F_MAX_AGE, UNRESERVED_KEYWORD},
+	{"autovacuum_freeze_table_age", AUTOVACUUM_F_TBL_AGE, UNRESERVED_KEYWORD},
 	{"backward", BACKWARD, UNRESERVED_KEYWORD},
 	{"before", BEFORE, UNRESERVED_KEYWORD},
 	{"begin", BEGIN_P, UNRESERVED_KEYWORD},
@@ -160,6 +170,7 @@
 	{"false", FALSE_P, RESERVED_KEYWORD},
 	{"family", FAMILY, UNRESERVED_KEYWORD},
 	{"fetch", FETCH, UNRESERVED_KEYWORD},
+	{"fillfactor", FILLFACTOR, UNRESERVED_KEYWORD},
 	{"first", FIRST_P, UNRESERVED_KEYWORD},
 	{"float", FLOAT_P, COL_NAME_KEYWORD},
 	{"for", FOR, RESERVED_KEYWORD},
Index: schema/pgTable.cpp
===================================================================
--- schema/pgTable.cpp	(revision 7594)
+++ schema/pgTable.cpp	(working copy)
@@ -308,12 +308,58 @@
         {
             sql += wxT("\nWITH (");
             if (GetFillFactor().Length() > 0)
-                sql += wxT("FILLFACTOR=") + GetFillFactor() + wxT(", ");
+                sql += wxT("\n  FILLFACTOR=") + GetFillFactor() + wxT(", ");
             if (GetHasOids())
-                sql +=  wxT("OIDS=TRUE");
+                sql +=  wxT("\n  OIDS=TRUE");
             else
-                sql +=  wxT("OIDS=FALSE");
-            sql += wxT(")");
+                sql +=  wxT("\n  OIDS=FALSE");
+            if(GetConnection()->BackendMinimumVersion(8, 4))
+            {
+                if (GetCustomAutoVacuumEnabled())
+                {
+                    if (GetAutoVacuumEnabled())
+                        sql += wxT(",\n  autovacuum_enabled=true");
+                    else
+                        sql += wxT(",\n  autovacuum_enabled=false");
+                }
+                if (!GetAutoVacuumVacuumThreshold().IsEmpty())
+                {
+                    sql += wxT(",\n  autovacuum_vacuum_threshold=") + GetAutoVacuumVacuumThreshold();
+                }
+                if (!GetAutoVacuumVacuumScaleFactor().IsEmpty())
+                {
+                    sql += wxT(",\n  autovacuum_vacuum_scale_factor=") + GetAutoVacuumVacuumScaleFactor();
+                }
+                if (!GetAutoVacuumAnalyzeThreshold().IsEmpty())
+                {
+                    sql += wxT(",\n  autovacuum_analyze_threshold=") + GetAutoVacuumAnalyzeThreshold();
+                }
+                if (!GetAutoVacuumAnalyzeScaleFactor().IsEmpty())
+                {
+                    sql += wxT(",\n  autovacuum_analyze_scale_factor=") + GetAutoVacuumAnalyzeScaleFactor();
+                }
+                if (!GetAutoVacuumVacuumCostDelay().IsEmpty())
+                {
+                    sql += wxT(",\n  autovacuum_vacuum_cost_delay=") + GetAutoVacuumVacuumCostDelay();
+                }
+                if (!GetAutoVacuumVacuumCostLimit().IsEmpty())
+                {
+                    sql += wxT(",\n  autovacuum_vacuum_cost_limit=") + GetAutoVacuumVacuumCostLimit();
+                }
+                if (!GetAutoVacuumFreezeMinAge().IsEmpty())
+                {
+                    sql += wxT(",\n  autovacuum_freeze_min_age=") + GetAutoVacuumFreezeMinAge();
+                }
+                if (!GetAutoVacuumFreezeMaxAge().IsEmpty())
+                {
+                    sql += wxT(",\n  autovacuum_freeze_max_age=") + GetAutoVacuumFreezeMaxAge();
+                }
+                if (!GetAutoVacuumFreezeTableAge().IsEmpty())
+                {
+                    sql += wxT(",\n  autovacuum_freeze_table_age=") + GetAutoVacuumFreezeTableAge();
+                }
+            }
+            sql += wxT("\n)");
         }
         else
         {
@@ -336,7 +382,7 @@
 
         sql += GetCommentSql();
 
-		// Column/constraint comments
+        // Column/constraint comments
         if (!colDetails.IsEmpty())
 		    sql += colDetails + wxT("\n");
 
@@ -347,7 +393,7 @@
         {
             sql += columnPrivileges + wxT("\n");
         }
-
+        
         AppendStuff(sql, browser, indexFactory);
         AppendStuff(sql, browser, ruleFactory);
         AppendStuff(sql, browser, triggerFactory);
@@ -939,6 +985,20 @@
             wxT("                     WHERE tgrelid=rel.oid) AS isrepl\n");
         if (collection->GetConnection()->BackendMinimumVersion(8, 2))
             query += wxT(", substring(array_to_string(reloptions, ',') from 'fillfactor=([0-9]*)') AS fillfactor \n");
+        if (collection->GetConnection()->BackendMinimumVersion(8, 4))
+        {
+            query += wxT(", substring(array_to_string(reloptions, ',') FROM 'autovacuum_enabled=([a-z|0-9]*)') AS autovacuum_enabled \n")
+                     wxT(", substring(array_to_string(reloptions, ',') FROM 'autovacuum_vacuum_threshold=([0-9]*)') AS autovacuum_vacuum_threshold \n")
+                     wxT(", substring(array_to_string(reloptions, ',') FROM 'autovacuum_vacuum_scale_factor=([0-9]*[.][0-9]*)') AS autovacuum_vacuum_scale_factor \n")
+                     wxT(", substring(array_to_string(reloptions, ',') FROM 'autovacuum_analyze_threshold=([0-9]*)') AS autovacuum_analyze_threshold \n")
+                     wxT(", substring(array_to_string(reloptions, ',') FROM 'autovacuum_analyze_scale_factor=([0-9]*[.][0-9]*)') AS autovacuum_analyze_scale_factor \n")
+                     wxT(", substring(array_to_string(reloptions, ',') FROM 'autovacuum_vacuum_cost_delay=([0-9]*)') AS autovacuum_vacuum_cost_delay \n")
+                     wxT(", substring(array_to_string(reloptions, ',') FROM 'autovacuum_vacuum_cost_limit=([0-9]*)') AS autovacuum_vacuum_cost_limit \n")
+                     wxT(", substring(array_to_string(reloptions, ',') FROM 'autovacuum_freeze_min_age=([0-9]*)') AS autovacuum_freeze_min_age \n")
+                     wxT(", substring(array_to_string(reloptions, ',') FROM 'autovacuum_freeze_max_age=([0-9]*)') AS autovacuum_freeze_max_age \n")
+                     wxT(", substring(array_to_string(reloptions, ',') FROM 'autovacuum_freeze_table_age=([0-9]*)') AS autovacuum_freeze_table_age \n");
+        }
+
         query += wxT("  FROM pg_class rel\n")
             wxT("  LEFT OUTER JOIN pg_tablespace ta on ta.oid=rel.reltablespace\n")
             wxT("  LEFT OUTER JOIN pg_description des ON (des.objoid=rel.oid AND des.objsubid=0)\n")
@@ -990,6 +1050,22 @@
             if (collection->GetConnection()->BackendMinimumVersion(8, 2)) {
                 table->iSetFillFactor(tables->GetVal(wxT("fillfactor")));
             }
+            if (collection->GetConnection()->BackendMinimumVersion(8, 4))
+            {
+                table->iSetCustomAutoVacuumEnabled(false);
+                if (!tables->GetVal(wxT("autovacuum_enabled")).IsEmpty())
+                    table->iSetCustomAutoVacuumEnabled(true);
+                table->iSetAutoVacuumEnabled(tables->GetBool(wxT("autovacuum_enabled")));
+                table->iSetAutoVacuumVacuumThreshold(tables->GetVal(wxT("autovacuum_vacuum_threshold")));
+                table->iSetAutoVacuumVacuumScaleFactor(tables->GetVal(wxT("autovacuum_vacuum_scale_factor")));
+                table->iSetAutoVacuumAnalyzeThreshold(tables->GetVal(wxT("autovacuum_analyze_threshold")));
+                table->iSetAutoVacuumAnalyzeScaleFactor(tables->GetVal(wxT("autovacuum_analyze_scale_factor")));
+                table->iSetAutoVacuumVacuumCostDelay(tables->GetVal(wxT("autovacuum_vacuum_cost_delay")));
+                table->iSetAutoVacuumVacuumCostLimit(tables->GetVal(wxT("autovacuum_vacuum_cost_limit")));
+                table->iSetAutoVacuumFreezeMinAge(tables->GetVal(wxT("autovacuum_freeze_min_age")));
+                table->iSetAutoVacuumFreezeMaxAge(tables->GetVal(wxT("autovacuum_freeze_max_age")));
+                table->iSetAutoVacuumFreezeTableAge(tables->GetVal(wxT("autovacuum_freeze_table_age")));
+            }
             table->iSetHasSubclass(tables->GetBool(wxT("relhassubclass")));
             table->iSetPrimaryKeyName(tables->GetVal(wxT("conname")));
             table->iSetIsReplicated(tables->GetBool(wxT("isrepl")));
Index: dlg/dlgTable.cpp
===================================================================
--- dlg/dlgTable.cpp	(revision 7594)
+++ dlg/dlgTable.cpp	(working copy)
@@ -69,6 +69,8 @@
 #define stFreezeMinAgeCurr  CTRL_STATIC("stFreezeMinAgeCurr")
 #define txtFreezeMaxAge     CTRL_TEXT("txtFreezeMaxAge")
 #define stFreezeMaxAgeCurr  CTRL_STATIC("stFreezeMaxAgeCurr")
+#define txtFreezeTableAge   CTRL_TEXT("txtFreezeTableAge")
+#define stFreezeTableAgeCurr CTRL_STATIC("stFreezeTableAgeCurr")
 
 BEGIN_EVENT_TABLE(dlgTable, dlgSecurityProperty)
     EVT_CHECKBOX(XRCID("chkHasOids"),               dlgProperty::OnChange)
@@ -99,6 +101,7 @@
     EVT_TEXT(XRCID("txtVacLimit"),                  dlgTable::OnChangeVacuum)
     EVT_TEXT(XRCID("txtFreezeMinAge"),              dlgTable::OnChangeVacuum)
     EVT_TEXT(XRCID("txtFreezeMaxAge"),              dlgTable::OnChangeVacuum)
+    EVT_TEXT(XRCID("txtFreezeTableAge"),            dlgTable::OnChangeVacuum)
 
     EVT_BUTTON(wxID_OK,                             dlgTable::OnOK)
 
@@ -340,7 +343,7 @@
     btnRemoveConstr->Disable();
     btnOK->Disable();
 
-    if (connection->BackendMinimumVersion(8,1) && table)
+    if ((connection->BackendMinimumVersion(8,1) && table) || connection->BackendMinimumVersion(8,4))
     {
         txtBaseVac->SetValidator(numericValidator);
         txtBaseAn->SetValidator(numericValidator);
@@ -350,7 +353,13 @@
         txtVacLimit->SetValidator(numericValidator);
         txtFreezeMinAge->SetValidator(numericValidator);
         txtFreezeMaxAge->SetValidator(numericValidator);
+        if (connection->BackendMinimumVersion(8,4))
+            txtFreezeTableAge->SetValidator(numericValidator);
+        else
+            txtFreezeTableAge->Disable();
 
+        settingAutoVacuum = false;
+
         pgSetIterator avSet(connection,
             wxT("SELECT name, setting FROM pg_settings WHERE name like '%vacuum%' ORDER BY name"));
         while (avSet.RowsLeft())
@@ -384,6 +393,10 @@
                 settingFreezeMinAge = StrToLong(setting);
             else if (name == wxT("autovacuum_freeze_max_age"))
                 settingFreezeMaxAge = StrToLong(setting);
+            else if (name == wxT("vacuum_freeze_table_age"))
+                settingFreezeTableAge = StrToLong(setting);
+            else
+                settingAutoVacuum = avSet.GetBool(wxT("setting"));
         }
 
         tableVacBaseThr = -1;
@@ -394,76 +407,117 @@
         tableFreezeMaxAge = -1;
         tableVacFactor = -1;
         tableAnlFactor = -1;
+        tableFreezeTableAge = -1;
 
-        pgSetIterator set(connection, wxT("SELECT * FROM pg_autovacuum WHERE vacrelid=") + table->GetOidStr());
-        if (set.RowsLeft())
+        if (!connection->BackendMinimumVersion(8,4))
         {
-            hasVacuum=true;
-
-            tableVacEnabled = set.GetBool(wxT("enabled"));
-            chkVacEnabled->SetValue(tableVacEnabled);
-            
-            tableVacBaseThr=set.GetLong(wxT("vac_base_thresh"));
-            tableAnlBaseThr=set.GetLong(wxT("anl_base_thresh"));
-            tableCostDelay=set.GetLong(wxT("vac_cost_delay"));
-            tableCostLimit=set.GetLong(wxT("vac_cost_limit"));
-            tableVacFactor=set.GetDouble(wxT("vac_scale_factor"));
-            tableAnlFactor=set.GetDouble(wxT("anl_scale_factor"));
-
-            if (connection->BackendMinimumVersion(8, 2))
+            pgSetIterator set(connection, wxT("SELECT * FROM pg_autovacuum WHERE vacrelid=") + table->GetOidStr());
+            if (set.RowsLeft())
             {
-                tableFreezeMinAge=set.GetLong(wxT("freeze_min_age"));
-                tableFreezeMaxAge=set.GetLong(wxT("freeze_max_age"));
+                hasVacuum=true;
+    
+                tableVacEnabled = set.GetBool(wxT("enabled"));
+                chkVacEnabled->SetValue(tableVacEnabled);
+                
+                tableVacBaseThr=set.GetLong(wxT("vac_base_thresh"));
+                tableAnlBaseThr=set.GetLong(wxT("anl_base_thresh"));
+                tableCostDelay=set.GetLong(wxT("vac_cost_delay"));
+                tableCostLimit=set.GetLong(wxT("vac_cost_limit"));
+                tableVacFactor=set.GetDouble(wxT("vac_scale_factor"));
+                tableAnlFactor=set.GetDouble(wxT("anl_scale_factor"));
+    
+                if (connection->BackendMinimumVersion(8, 2))
+                {
+                    tableFreezeMinAge=set.GetLong(wxT("freeze_min_age"));
+                    tableFreezeMaxAge=set.GetLong(wxT("freeze_max_age"));
+                }
             }
-
-            if (tableVacBaseThr >= 0)
-                txtBaseVac->SetValue(NumToStr(tableVacBaseThr));
             else
-                txtBaseVac->SetValue(wxEmptyString);
+            {
+               hasVacuum=false;
+               chkVacEnabled->SetValue(true);
+            }
+        }
+        else if (table)
+        {
+            tableVacEnabled = table->GetAutoVacuumEnabled();
+            if (!table->GetAutoVacuumVacuumThreshold().IsEmpty())
+                table->GetAutoVacuumVacuumThreshold().ToLong(&tableVacBaseThr);
+            if (!table->GetAutoVacuumAnalyzeThreshold().IsEmpty())
+                table->GetAutoVacuumAnalyzeThreshold().ToLong(&tableAnlBaseThr);
+            if (!table->GetAutoVacuumVacuumScaleFactor().IsEmpty())
+                table->GetAutoVacuumVacuumScaleFactor().ToDouble(&tableVacFactor);
+            if (!table->GetAutoVacuumAnalyzeScaleFactor().IsEmpty())
+                table->GetAutoVacuumAnalyzeScaleFactor().ToDouble(&tableAnlFactor);
+            if (!table->GetAutoVacuumVacuumCostDelay().IsEmpty())
+                table->GetAutoVacuumVacuumCostDelay().ToLong(&tableCostDelay);
+            if (!table->GetAutoVacuumVacuumCostLimit().IsEmpty())
+                table->GetAutoVacuumVacuumCostLimit().ToLong(&tableCostLimit);
+            if (!table->GetAutoVacuumFreezeMinAge().IsEmpty())
+                table->GetAutoVacuumFreezeMinAge().ToLong(&tableFreezeMinAge);
+            if (!table->GetAutoVacuumFreezeMaxAge().IsEmpty())
+                table->GetAutoVacuumFreezeMaxAge().ToLong(&tableFreezeMaxAge);
+            if (!table->GetAutoVacuumFreezeTableAge().IsEmpty())
+                table->GetAutoVacuumFreezeTableAge().ToLong(&tableFreezeTableAge);
 
-            if (tableAnlBaseThr >= 0)
-                txtBaseAn->SetValue(NumToStr(tableAnlBaseThr));
-            else
-                txtBaseAn->SetValue(wxEmptyString);
+            hasVacuum = table->GetCustomAutoVacuumEnabled();
+            chkVacEnabled->SetValue(hasVacuum ? tableVacEnabled : settingAutoVacuum);
+        }
+        else
+        {
+            hasVacuum=false;
+            chkVacEnabled->SetValue(settingAutoVacuum);
+        }
 
-            if (tableVacFactor >= 0)
-                txtFactorVac->SetValue(NumToStr(tableVacFactor));
-            else
-                txtFactorVac->SetValue(wxEmptyString);
+        if (tableVacBaseThr >= 0)
+            txtBaseVac->SetValue(NumToStr(tableVacBaseThr));
+        else
+            txtBaseVac->SetValue(wxEmptyString);
 
-            if (tableAnlFactor >= 0)
-                txtFactorAn->SetValue(NumToStr(tableAnlFactor));
-            else
-              txtFactorAn->SetValue(wxEmptyString);
+        if (tableAnlBaseThr >= 0)
+            txtBaseAn->SetValue(NumToStr(tableAnlBaseThr));
+        else
+            txtBaseAn->SetValue(wxEmptyString);
 
-            if (tableCostDelay >= 0)
-                txtVacDelay->SetValue(NumToStr(tableCostDelay));
-            else
-                txtVacDelay->SetValue(wxEmptyString);
+        if (tableVacFactor >= 0)
+            txtFactorVac->SetValue(NumToStr(tableVacFactor));
+        else
+            txtFactorVac->SetValue(wxEmptyString);
 
-            if (tableCostLimit >= 0)
-                txtVacLimit->SetValue(NumToStr(tableCostLimit));
-            else
-                txtVacLimit->SetValue(wxEmptyString);
+        if (tableAnlFactor >= 0)
+            txtFactorAn->SetValue(NumToStr(tableAnlFactor));
+        else
+          txtFactorAn->SetValue(wxEmptyString);
 
-            if (connection->BackendMinimumVersion(8, 2))
-            {
-                if (tableFreezeMinAge >= 0)
-                    txtFreezeMinAge->SetValue(NumToStr(tableFreezeMinAge));
-                else
-                    txtFreezeMinAge->SetValue(wxEmptyString);
+        if (tableCostDelay >= 0)
+            txtVacDelay->SetValue(NumToStr(tableCostDelay));
+        else
+            txtVacDelay->SetValue(wxEmptyString);
 
-                if (tableFreezeMaxAge >= 0)
-                    txtFreezeMaxAge->SetValue(NumToStr(tableFreezeMaxAge));
-                else
-                    txtFreezeMaxAge->SetValue(wxEmptyString);
-            }
-        }
+        if (tableCostLimit >= 0)
+            txtVacLimit->SetValue(NumToStr(tableCostLimit));
         else
+            txtVacLimit->SetValue(wxEmptyString);
+
+        if (connection->BackendMinimumVersion(8, 2))
         {
-            hasVacuum=false;
-            chkVacEnabled->SetValue(true);
+            if (tableFreezeMinAge >= 0)
+                txtFreezeMinAge->SetValue(NumToStr(tableFreezeMinAge));
+            else
+                txtFreezeMinAge->SetValue(wxEmptyString);
+
+            if (tableFreezeMaxAge >= 0)
+                txtFreezeMaxAge->SetValue(NumToStr(tableFreezeMaxAge));
+            else
+                txtFreezeMaxAge->SetValue(wxEmptyString);
         }
+        if (connection->BackendMinimumVersion(8, 4))
+        {
+            if (tableFreezeTableAge >= 0)
+                txtFreezeTableAge->SetValue(NumToStr(tableFreezeTableAge));
+            else
+                txtFreezeTableAge->SetValue(wxEmptyString);
+        }
         chkCustomVac->SetValue(hasVacuum);
         wxCommandEvent ev;
         OnChangeVacuum(ev);
@@ -670,14 +724,115 @@
             if (!chkCustomVac->GetValue())
             {
                 if (hasVacuum)
-                    sql += wxT("DELETE FROM pg_autovacuum WHERE vacrelid=") + table->GetOidStr() + wxT(";\n");
+                {
+                    if (connection->BackendMinimumVersion(8,4))
+                        sql += wxT("ALTER TABLE ") + tabname
+                            +  wxT(" RESET(\n")
+                               wxT("  autovacuum_enabled,\n")
+                               wxT("  autovacuum_vacuum_threshold,\n")
+                               wxT("  autovacuum_analyze_threshold,\n")
+                               wxT("  autovacuum_vacuum_scale_factor,\n")
+                               wxT("  autovacuum_analyze_scale_factor,\n")
+                               wxT("  autovacuum_vacuum_cost_delay,\n")
+                               wxT("  autovacuum_vacuum_cost_limit,\n")
+                               wxT("  autovacuum_freeze_min_age,\n")
+                               wxT("  autovacuum_freeze_max_age,\n")
+                               wxT("  autovacuum_freeze_table_age\n")
+                               wxT(");\n");
+                    else
+                        sql += wxT("DELETE FROM pg_autovacuum WHERE vacrelid=") + table->GetOidStr() + wxT(";\n");
+                }
             }
             else
             {
                 wxString vacStr;
                 bool changed = (chkVacEnabled->GetValue() != tableVacEnabled);
-                if (!hasVacuum)
+                if (connection->BackendMinimumVersion(8, 4))
                 {
+                    bool valChanged = false;
+                    wxString newVal;
+                    wxString setStr;
+                    wxString resetStr;
+                    if (changed)
+                    {
+                        FillAutoVacuumParameters(setStr, resetStr, wxT("autovacuum_enabled"), BoolToStr(chkVacEnabled->GetValue()));
+                    }
+                    newVal =  AppendNum(valChanged, txtBaseVac, tableVacBaseThr);
+                    if (valChanged)
+                    {
+                        valChanged = false;
+                        FillAutoVacuumParameters(setStr, resetStr, wxT("autovacuum_vacuum_threshold"), newVal);
+                    }
+
+                    newVal = AppendNum(valChanged, txtBaseAn, tableAnlBaseThr);
+                    if (valChanged)
+                    {
+                        valChanged = false;
+                        FillAutoVacuumParameters(setStr, resetStr, wxT("autovacuum_analyze_threshold"), newVal);
+                    }
+
+                    newVal = AppendNum(valChanged, txtFactorVac, tableVacFactor);
+                    if (valChanged)
+                    {
+                        valChanged = false;
+                        FillAutoVacuumParameters(setStr, resetStr, wxT("autovacuum_vacuum_scale_factor"), newVal);
+                    }
+
+                    newVal = AppendNum(valChanged, txtFactorAn, tableAnlFactor);
+                    if (valChanged)
+                    {
+                        valChanged = false;
+                        FillAutoVacuumParameters(setStr, resetStr, wxT("autovacuum_analyze_scale_factor"), newVal);
+                    }
+
+                    newVal = AppendNum(valChanged, txtVacDelay, tableCostDelay);
+                    if (valChanged)
+                    {
+                        valChanged = false;
+                        FillAutoVacuumParameters(setStr, resetStr, wxT("autovacuum_vacuum_cost_delay"), newVal);
+                    }
+
+                    newVal = AppendNum(valChanged, txtVacLimit, tableCostLimit);
+                    if (valChanged)
+                    {
+                        valChanged = false;
+                        FillAutoVacuumParameters(setStr, resetStr, wxT("autovacuum_vacuum_cost_limit"), newVal);
+                    }
+
+                    newVal = AppendNum(valChanged, txtFreezeMinAge, tableFreezeMinAge);
+                    if (valChanged)
+                    {
+                        valChanged = false;
+                        FillAutoVacuumParameters(setStr, resetStr, wxT("autovacuum_freeze_min_age"), newVal);
+                    }
+                    
+                    newVal = AppendNum(valChanged, txtFreezeMaxAge, tableFreezeMaxAge);
+                    if (valChanged)
+                    {
+                        valChanged = false;
+                        FillAutoVacuumParameters(setStr, resetStr, wxT("autovacuum_freeze_max_age"), newVal);
+                    }
+                    
+                    newVal = AppendNum(valChanged, txtFreezeTableAge, tableFreezeTableAge);
+                    if (valChanged)
+                    {
+                        valChanged = false;
+                        FillAutoVacuumParameters(setStr, resetStr, wxT("autovacuum_freeze_table_age"), newVal);
+                    }
+
+                    if (!setStr.IsEmpty())
+                    {
+                        vacStr = wxT("ALTER TABLE ") + tabname + setStr + wxT("\n);\n");;
+                        changed = true;
+                    }
+                    if (!resetStr.IsEmpty())
+                    {
+                        vacStr += wxT("ALTER TABLE ") + tabname + resetStr + wxT("\n);\n");;
+                        changed = true;
+                    }
+                }
+                else if (!hasVacuum)
+                {
                     if (connection->BackendMinimumVersion(8, 2))
                     {
                         vacStr = wxT("INSERT INTO pg_autovacuum(vacrelid, enabled, vac_base_thresh, anl_base_thresh, vac_scale_factor, anl_scale_factor, vac_cost_delay, vac_cost_limit, freeze_min_age, freeze_max_age)")
@@ -795,7 +950,7 @@
             for (i=0 ; i < lbTables->GetCount() ; i++)
             {
                 if (i)
-                    sql += wxT(", ");
+                    sql += wxT(" ");
                 sql += lbTables->GetString(i);
             }
             sql += wxT(")");
@@ -803,14 +958,84 @@
 
         if (connection->BackendMinimumVersion(8, 2))
         {
-            sql += wxT("WITH (");
-            if (txtFillFactor->GetValue().Length() > 0)
-                sql += wxT("FILLFACTOR=") + txtFillFactor->GetValue() + wxT(", ");
+            sql += wxT("\nWITH (");
+            if (txtFillFactor->GetValue().Trim().Length() > 0)
+                sql += wxT("\n  FILLFACTOR = ") + txtFillFactor->GetValue() + wxT(", ");
             if (chkHasOids->GetValue())
-                sql +=  wxT("OIDS=TRUE");
+                sql +=  wxT("\n  OIDS = TRUE");
             else
-                sql +=  wxT("OIDS=FALSE");
-            sql += wxT(")\n");
+                sql +=  wxT("\n  OIDS = FALSE");
+            if (connection->BackendMinimumVersion(8, 4) && chkCustomVac->GetValue())
+            {
+                bool valChanged = false;
+                wxString newVal;
+                wxString resetStr;
+
+                FillAutoVacuumParameters(sql, resetStr, wxT("autovacuum_enabled"), BoolToStr(chkVacEnabled->GetValue()));
+                newVal =  AppendNum(valChanged, txtBaseVac, tableVacBaseThr);
+                if (valChanged)
+                {
+                    valChanged = false;
+                    FillAutoVacuumParameters(sql, resetStr, wxT("autovacuum_vacuum_threshold"), newVal);
+                }
+
+                newVal = AppendNum(valChanged, txtBaseAn, tableAnlBaseThr);
+                if (valChanged)
+                {
+                    valChanged = false;
+                    FillAutoVacuumParameters(sql, resetStr, wxT("autovacuum_analyze_threshold"), newVal);
+                }
+
+                newVal = AppendNum(valChanged, txtFactorVac, tableVacFactor);
+                if (valChanged)
+                {
+                    valChanged = false;
+                    FillAutoVacuumParameters(sql, resetStr, wxT("autovacuum_vacuum_scale_factor"), newVal);
+                }
+
+                newVal = AppendNum(valChanged, txtFactorAn, tableAnlFactor);
+                if (valChanged)
+                {
+                    valChanged = false;
+                    FillAutoVacuumParameters(sql, resetStr, wxT("autovacuum_analyze_scale_factor"), newVal);
+                }
+
+                newVal = AppendNum(valChanged, txtVacDelay, tableCostDelay);
+                if (valChanged)
+                {
+                    valChanged = false;
+                    FillAutoVacuumParameters(sql, resetStr, wxT("autovacuum_vacuum_cost_delay"), newVal);
+                }
+
+                newVal = AppendNum(valChanged, txtVacLimit, tableCostLimit);
+                if (valChanged)
+                {
+                    valChanged = false;
+                    FillAutoVacuumParameters(sql, resetStr, wxT("autovacuum_vacuum_cost_limit"), newVal);
+                }
+
+                newVal = AppendNum(valChanged, txtFreezeMinAge, tableFreezeMinAge);
+                if (valChanged)
+                {
+                    valChanged = false;
+                    FillAutoVacuumParameters(sql, resetStr, wxT("autovacuum_freeze_min_age"), newVal);
+                }
+                
+                newVal = AppendNum(valChanged, txtFreezeMaxAge, tableFreezeMaxAge);
+                if (valChanged)
+                {
+                    valChanged = false;
+                    FillAutoVacuumParameters(sql, resetStr, wxT("autovacuum_freeze_max_age"), newVal);
+                }
+                
+                newVal = AppendNum(valChanged, txtFreezeTableAge, tableFreezeTableAge);
+                if (valChanged)
+                {
+                    valChanged = false;
+                    FillAutoVacuumParameters(sql, resetStr, wxT("autovacuum_freeze_table_age"), newVal);
+                }
+            }
+            sql += wxT("\n)\n");
         }
         else
         {
@@ -845,6 +1070,7 @@
                     + wxT(" IS ") + qtDbString(lstColumns->GetText(pos, 5))
                     + wxT(";\n");
         }
+
     }
 
     AppendComment(sql, wxT("TABLE"), schema, table);
@@ -974,6 +1200,16 @@
             stFreezeMinAgeCurr->SetLabel(NumToStr((tableFreezeMinAge == -1) ? settingFreezeMinAge : tableFreezeMinAge));
             stFreezeMaxAgeCurr->SetLabel(NumToStr((tableFreezeMaxAge == -1) ? settingFreezeMaxAge : tableFreezeMaxAge));
         }
+        if (connection->BackendMinimumVersion(8, 4))
+        {
+            txtFreezeTableAge->Enable(vacEn);
+            stFreezeTableAgeCurr->SetLabel(NumToStr((tableFreezeTableAge == -1) ? settingFreezeTableAge : tableFreezeTableAge));
+        }
+        else
+        {
+            stFreezeTableAgeCurr->SetLabel(wxT("N.A."));
+            txtFreezeTableAge->Enable(false);
+        }
     }
     OnChange(ev);
 }
@@ -1282,3 +1518,23 @@
 }
 
 
+void dlgTable::FillAutoVacuumParameters(wxString& setStr, wxString& resetStr,
+                                        const wxString& parameter, const wxString& val)
+{
+    if (val == wxT("-1"))
+    {
+        if (resetStr.IsEmpty())
+            resetStr = wxT(" RESET (");
+        else
+            resetStr += wxT(",");
+        resetStr += wxT("\n  ") + parameter;
+    }
+    else
+    {
+        if (setStr.IsEmpty())
+            setStr = wxT(" SET (");
+        else
+            setStr += wxT(",");
+        setStr += wxT("\n  ") + parameter + wxT(" = ") + val;
+    }
+}
Index: ui/dlgTable.xrc
===================================================================
--- ui/dlgTable.xrc	(revision 7594)
+++ ui/dlgTable.xrc	(working copy)
@@ -494,6 +494,26 @@
                   <flag>wxALIGN_CENTRE_VERTICAL|wxALL</flag>
                   <border>4</border>
                 </object>
+                <object class="sizeritem">
+                  <object class="wxStaticText" name="stFreezeTableAge">
+                    <label>FREEZE table age</label>
+                  </object>
+                  <flag>wxALIGN_CENTRE_VERTICAL|wxALL</flag>
+                  <border>4</border>
+                </object>
+                <object class="sizeritem">
+                  <object class="wxTextCtrl" name="txtFreezeTableAge">
+                  </object>
+                  <flag>wxEXPAND|wxALIGN_CENTRE_VERTICAL|wxALL</flag>
+                  <border>4</border>
+                </object>
+                <object class="sizeritem">
+                  <object class="wxStaticText" name="stFreezeTableAgeCurr">
+                    <label></label>
+                  </object>
+                  <flag>wxALIGN_CENTRE_VERTICAL|wxALL</flag>
+                  <border>4</border>
+                </object>
               </object>
             </object>
           </object>
Index: ui/xrcDialogs.cpp
===================================================================
--- ui/xrcDialogs.cpp	(revision 7594)
+++ ui/xrcDialogs.cpp	(working copy)
@@ -16310,7 +16310,7 @@
 10,60,114,101,115,111,117,114,99,101,62,10,32,32,60,111,98,106,101,99,116,
 32,99,108,97,115,115,61,34,119,120,68,105,97,108,111,103,34,32,110,97,109,
 101,61,34,100,108,103,83,116,101,112,34,62,10,32,32,32,32,60,116,105,116,
-108,101,47,62,10,32,32,32,32,60,115,105,122,101,62,50,50,48,44,51,51,48,
+108,101,47,62,10,32,32,32,32,60,115,105,122,101,62,50,50,48,44,50,53,48,
 100,60,47,115,105,122,101,62,10,32,32,32,32,60,115,116,121,108,101,62,119,
 120,68,69,70,65,85,76,84,95,68,73,65,76,79,71,95,83,84,89,76,69,124,119,
 120,67,65,80,84,73,79,78,124,119,120,83,89,83,84,69,77,95,77,69,78,85,124,
@@ -16327,7 +16327,7 @@
 101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,
 108,97,115,115,61,34,119,120,78,111,116,101,98,111,111,107,34,32,110,97,
 109,101,61,34,110,98,78,111,116,101,98,111,111,107,34,62,10,32,32,32,32,
-32,32,32,32,32,32,60,115,105,122,101,62,50,49,54,44,51,48,53,100,60,47,
+32,32,32,32,32,32,60,115,105,122,101,62,50,49,54,44,50,50,53,100,60,47,
 115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,115,101,108,101,
 99,116,101,100,62,48,60,47,115,101,108,101,99,116,101,100,62,10,32,32,32,
 32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,
@@ -17396,7 +17396,7 @@
 32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,101,99,
 116,62,10,60,47,114,101,115,111,117,114,99,101,62,10};
 
-static size_t xml_res_size_48 = 23163;
+static size_t xml_res_size_48 = 24030;
 static unsigned char xml_res_file_48[] = {
 60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,
 110,99,111,100,105,110,103,61,34,73,83,79,45,56,56,53,57,45,49,34,63,62,
@@ -18380,76 +18380,115 @@
 108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
 60,98,111,114,100,101,114,62,52,60,47,98,111,114,100,101,114,62,10,32,32,
 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,
-10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,
+10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,
+116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,
+10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,
+101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,
+120,116,34,32,110,97,109,101,61,34,115,116,70,114,101,101,122,101,84,97,
+98,108,101,65,103,101,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
+32,32,32,32,32,32,60,108,97,98,101,108,62,70,82,69,69,90,69,32,116,97,98,
+108,101,32,97,103,101,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,
+32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,
+32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,
+120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,
+119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,
+32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,52,60,47,98,111,
+114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,
+47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
+32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,
+114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
+32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,
+84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,116,120,116,70,
+114,101,101,122,101,84,97,98,108,101,65,103,101,34,47,62,10,32,32,32,32,
+32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,
+69,88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,95,86,
+69,82,84,73,67,65,76,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,
+32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,
+114,62,52,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,
+32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,
+32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,
+115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,
+32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,
+97,115,115,61,34,119,120,83,116,97,116,105,99,84,101,120,116,34,32,110,
+97,109,101,61,34,115,116,70,114,101,101,122,101,84,97,98,108,101,65,103,
+101,67,117,114,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
+32,32,32,32,32,60,108,97,98,101,108,47,62,10,32,32,32,32,32,32,32,32,32,
+32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,
+32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,
+65,76,73,71,78,95,67,69,78,84,82,69,95,86,69,82,84,73,67,65,76,124,119,
+120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,
+32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,52,60,47,98,111,114,100,
+101,114,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,
+98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,
+111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,
+98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,
+101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,
+10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,65,76,76,124,119,
+120,71,82,79,87,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,60,47,102,
+108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,
+60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,
+99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,
+115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,
+32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,
+101,120,71,114,105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,
+32,32,32,60,99,111,108,115,62,52,60,47,99,111,108,115,62,10,32,32,32,32,
+32,32,32,32,32,32,60,103,114,111,119,97,98,108,101,99,111,108,115,62,49,
+60,47,103,114,111,119,97,98,108,101,99,111,108,115,62,10,32,32,32,32,32,
+32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,
+105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,
+32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,
+116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,72,69,76,80,
+34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,
+62,72,101,108,112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,
+32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,
+32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,
+76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,
+98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,
+32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,
+32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,
+97,99,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,
+101,62,48,44,48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,
+32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,
+111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,
+116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,
+101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,
+32,110,97,109,101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,
+32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,112,59,79,
+75,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,
+32,60,100,101,102,97,117,108,116,62,49,60,47,100,101,102,97,117,108,116,
 62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,
-10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,
-32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,
-32,60,102,108,97,103,62,119,120,65,76,76,124,119,120,71,82,79,87,124,119,
-120,65,76,73,71,78,95,67,69,78,84,82,69,60,47,102,108,97,103,62,10,32,32,
-32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,
-101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,
-32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,
-122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,60,111,98,
-106,101,99,116,32,99,108,97,115,115,61,34,119,120,70,108,101,120,71,114,
-105,100,83,105,122,101,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,99,
-111,108,115,62,52,60,47,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,
-32,60,103,114,111,119,97,98,108,101,99,111,108,115,62,49,60,47,103,114,
-111,119,97,98,108,101,99,111,108,115,62,10,32,32,32,32,32,32,32,32,32,32,
-60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,
-105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,
-106,101,99,116,32,99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,
-34,32,110,97,109,101,61,34,119,120,73,68,95,72,69,76,80,34,62,10,32,32,
-32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,98,101,108,62,72,101,108,
-112,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,
+10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,
+88,80,65,78,68,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,
+32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,
+114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,
+99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,
+99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,
+32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,
+115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,101,61,34,
+119,120,73,68,95,67,65,78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,
+32,32,32,32,32,60,108,97,98,101,108,62,38,97,109,112,59,67,97,110,99,101,
+108,60,47,108,97,98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,
 47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,
 108,97,103,62,119,120,69,88,80,65,78,68,124,119,120,65,76,76,60,47,102,
 108,97,103,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,
 101,114,62,51,60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,
-32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,
-111,98,106,101,99,116,32,99,108,97,115,115,61,34,115,112,97,99,101,114,
-34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,48,44,
-48,100,60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,60,47,
-111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,32,32,60,111,98,106,
-101,99,116,32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,
-34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,
-99,108,97,115,115,61,34,119,120,66,117,116,116,111,110,34,32,110,97,109,
-101,61,34,119,120,73,68,95,79,75,34,62,10,32,32,32,32,32,32,32,32,32,32,
-32,32,32,32,60,108,97,98,101,108,62,38,97,109,112,59,79,75,60,47,108,97,
-98,101,108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,100,101,102,
-97,117,108,116,62,49,60,47,100,101,102,97,117,108,116,62,10,32,32,32,32,
-32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,
-32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,124,
-119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,32,32,32,32,32,32,32,
-32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,114,100,101,114,62,
-10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,
+32,32,60,47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,
+98,106,101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,
+120,69,88,80,65,78,68,124,119,120,84,79,80,124,119,120,76,69,70,84,124,
+119,120,82,73,71,72,84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,60,
+47,111,98,106,101,99,116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,
+32,99,108,97,115,115,61,34,115,105,122,101,114,105,116,101,109,34,62,10,
 32,32,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,
-34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,32,
-32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,
-66,117,116,116,111,110,34,32,110,97,109,101,61,34,119,120,73,68,95,67,65,
-78,67,69,76,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,108,97,
-98,101,108,62,38,97,109,112,59,67,97,110,99,101,108,60,47,108,97,98,101,
-108,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,
-62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,
-69,88,80,65,78,68,124,119,120,65,76,76,60,47,102,108,97,103,62,10,32,32,
-32,32,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,
-111,114,100,101,114,62,10,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,
-101,99,116,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,
-10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,
-68,124,119,120,84,79,80,124,119,120,76,69,70,84,124,119,120,82,73,71,72,
-84,60,47,102,108,97,103,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,
-116,62,10,32,32,32,32,32,32,60,111,98,106,101,99,116,32,99,108,97,115,115,
-61,34,115,105,122,101,114,105,116,101,109,34,62,10,32,32,32,32,32,32,32,
-32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,83,116,97,
-116,117,115,66,97,114,34,32,110,97,109,101,61,34,117,110,107,83,116,97,
-116,117,115,66,97,114,34,62,10,32,32,32,32,32,32,32,32,32,32,60,115,116,
-121,108,101,62,119,120,83,84,95,83,73,90,69,71,82,73,80,60,47,115,116,121,
-108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,10,
-32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,88,80,65,78,68,
-124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,60,47,102,108,97,103,62,
-10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,60,47,98,111,
-114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,
-10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,111,98,106,
-101,99,116,62,10,60,47,114,101,115,111,117,114,99,101,62,10};
+34,119,120,83,116,97,116,117,115,66,97,114,34,32,110,97,109,101,61,34,117,
+110,107,83,116,97,116,117,115,66,97,114,34,62,10,32,32,32,32,32,32,32,32,
+32,32,60,115,116,121,108,101,62,119,120,83,84,95,83,73,90,69,71,82,73,80,
+60,47,115,116,121,108,101,62,10,32,32,32,32,32,32,32,32,60,47,111,98,106,
+101,99,116,62,10,32,32,32,32,32,32,32,32,60,102,108,97,103,62,119,120,69,
+88,80,65,78,68,124,119,120,65,76,73,71,78,95,67,69,78,84,82,69,60,47,102,
+108,97,103,62,10,32,32,32,32,32,32,32,32,60,98,111,114,100,101,114,62,51,
+60,47,98,111,114,100,101,114,62,10,32,32,32,32,32,32,60,47,111,98,106,101,
+99,116,62,10,32,32,32,32,60,47,111,98,106,101,99,116,62,10,32,32,60,47,
+111,98,106,101,99,116,62,10,60,47,114,101,115,111,117,114,99,101,62,10};
 
 static size_t xml_res_size_49 = 11918;
 static unsigned char xml_res_file_49[] = {
@@ -18831,7 +18870,7 @@
 120,84,101,120,116,67,116,114,108,34,32,110,97,109,101,61,34,116,120,116,
 68,105,99,116,105,111,110,97,114,121,34,62,10,32,32,32,32,32,32,32,32,32,
 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,115,105,122,
-101,62,49,51,53,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,
+101,62,49,49,49,44,45,49,100,60,47,115,105,122,101,62,10,32,32,32,32,32,
 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,
 99,111,110,116,101,110,116,47,62,10,32,32,32,32,32,32,32,32,32,32,32,32,
 32,32,32,32,32,32,32,32,32,32,32,32,32,32,60,47,111,98,106,101,99,116,62,
@@ -18846,7 +18885,7 @@
 32,60,111,98,106,101,99,116,32,99,108,97,115,115,61,34,119,120,67,104,111,
 105,99,101,34,32,110,97,109,101,61,34,99,98,68,105,99,116,105,111,110,97,
 114,121,34,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,49,49,44,45,49,100,
+32,32,32,32,32,32,32,32,32,32,60,115,105,122,101,62,53,54,44,45,49,100,
 60,47,115,105,122,101,62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
 32,32,32,32,32,32,32,32,32,32,32,32,32,60,99,111,110,116,101,110,116,47,
 62,10,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
-- 
Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

Reply via email to