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