mirror of
https://github.com/levinsv/pgadmin3.git
synced 2026-05-15 06:05:49 -06:00
Add bt_index_check call frmMaintenance, bug fix issues #19.
добавлен вызов функции bt_index_check в форме обслуживания. Рассширение amcheck должно быть установлено. Исправлена ошибка #19. После изменения вывода bytea на hex формат, перестали распознаваться аргументы триггера.
This commit is contained in:
parent
af59b63ae7
commit
6de356e340
4 changed files with 37 additions and 3 deletions
|
|
@ -65,6 +65,7 @@ frmMaintenance::frmMaintenance(frmMain *form, pgObject *obj) : ExecutionDialog(f
|
|||
txtMessages->SetMaxLength(0L);
|
||||
#endif
|
||||
bool iscomprss = false;
|
||||
wxString cmd;
|
||||
if (object->GetMetaType() == PGM_INDEX || object->GetMetaType() == PGM_PRIMARYKEY || object->GetMetaType() == PGM_UNIQUE)
|
||||
{
|
||||
rbxAction->SetSelection(2);
|
||||
|
|
@ -74,6 +75,25 @@ frmMaintenance::frmMaintenance(frmMain *form, pgObject *obj) : ExecutionDialog(f
|
|||
wxString ratio = object->GetConnection()->ExecuteScalar("select left((cfs_fragmentation("+object->GetOidStr()+")*100)::text,5)::text");
|
||||
iscomprss = !(ratio == "NaN");
|
||||
}
|
||||
wxString sql = "SELECT \
|
||||
case when(SELECT max(pronargs) FROM pg_proc WHERE proname = 'bt_index_check') = 3 then\
|
||||
'bt_index_check(' || c.oid || ', true,' || i.indisunique || ')'\
|
||||
when(SELECT max(pronargs) FROM pg_proc WHERE proname = 'bt_index_check') = 2 then\
|
||||
'bt_index_check(' || c.oid || ', true)'\
|
||||
else\
|
||||
''\
|
||||
end\
|
||||
FROM pg_index i\
|
||||
JOIN pg_opclass op ON i.indclass[0] = op.oid\
|
||||
JOIN pg_am am ON op.opcmethod = am.oid\
|
||||
JOIN pg_class c ON i.indexrelid = c.oid\
|
||||
JOIN pg_namespace n ON c.relnamespace = n.oid\
|
||||
WHERE am.amname = 'btree'\
|
||||
AND c.relpersistence != 't'\
|
||||
AND c.relkind = 'i' AND i.indisready AND i.indisvalid and c.oid = "+object->GetOidStr();
|
||||
cmd = object->GetConnection()->ExecuteScalar(sql);
|
||||
cmdcheck = cmd;
|
||||
|
||||
}
|
||||
if (object->GetMetaType() == PGM_TABLE) {
|
||||
pgTable* t = (pgTable *)object;
|
||||
|
|
@ -81,6 +101,7 @@ frmMaintenance::frmMaintenance(frmMain *form, pgObject *obj) : ExecutionDialog(f
|
|||
|
||||
}
|
||||
rbxAction->Enable(4, iscomprss);
|
||||
rbxAction->Enable(5, !cmd.IsEmpty());
|
||||
wxCommandEvent ev;
|
||||
OnAction(ev);
|
||||
}
|
||||
|
|
@ -138,6 +159,11 @@ void frmMaintenance::OnAction(wxCommandEvent &ev)
|
|||
chkVerbose->SetValue(true);
|
||||
chkVerbose->Enable(true);
|
||||
}
|
||||
bool isAmcheck = (rbxAction->GetSelection() == 5);
|
||||
if (isAmcheck) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -240,6 +266,13 @@ wxString frmMaintenance::GetSql()
|
|||
}
|
||||
break;
|
||||
}
|
||||
case 5: // amchek
|
||||
{
|
||||
sql = wxT("SET client_min_messages = DEBUG1;select ");
|
||||
sql += cmdcheck;
|
||||
//wxString strindex = object->GetConnection()->ExecuteScalar("select string_agg('cfs_gc_relation('||indexrelid::text||')',',') from pg_index i where indrelid=" + object->GetOidStr() + " and cfs_fragmentation(indexrelid) between 0.01 and 1;");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return sql;
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ public:
|
|||
private:
|
||||
wxString GetHelpPage() const;
|
||||
void OnAction(wxCommandEvent &ev);
|
||||
|
||||
wxString cmdcheck;
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -403,7 +403,7 @@ pgObject *pgTriggerFactory::CreateObjects(pgCollection *coll, ctlTree *browser,
|
|||
}
|
||||
|
||||
wxString trig_sql;
|
||||
trig_sql = wxT("SELECT t.oid, t.xmin, t.*, relname, CASE WHEN relkind = 'r' THEN TRUE ELSE FALSE END AS parentistable, ")+ref+
|
||||
trig_sql = wxT("SELECT t.oid, t.xmin, encode(t.tgargs,'escape') tgargsE, t.*, relname, CASE WHEN relkind = 'r' THEN TRUE ELSE FALSE END AS parentistable, ")+ref+
|
||||
wxT(" nspname, des.description, l.lanname, p.prosrc, \n")
|
||||
wxT(" COALESCE(substring(pg_get_triggerdef(t.oid), 'WHEN (.*) EXECUTE PROCEDURE'), substring(pg_get_triggerdef(t.oid), 'WHEN (.*) \\$trigger')) AS whenclause\n")
|
||||
wxT(" FROM pg_trigger t\n")
|
||||
|
|
@ -491,7 +491,7 @@ pgObject *pgTriggerFactory::CreateObjects(pgCollection *coll, ctlTree *browser,
|
|||
trigger->iSetQuotedFullTable(collection->GetDatabase()->GetQuotedSchemaPrefix(triggers->GetVal(wxT("nspname"))) + qtIdent(triggers->GetVal(wxT("relname"))));
|
||||
wxString arglist = wxEmptyString;
|
||||
if (triggers->GetLong(wxT("tgnargs")) > 0)
|
||||
arglist = triggers->GetVal(wxT("tgargs"));
|
||||
arglist = triggers->GetVal(wxT("tgargse"));
|
||||
wxString args = wxEmptyString;
|
||||
|
||||
while (!arglist.IsEmpty())
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
<item>REINDEX</item>
|
||||
<item>CLUSTER</item>
|
||||
<item>COMPRESS</item>
|
||||
<item>AMCHECK</item>
|
||||
</content>
|
||||
<selection>0</selection>
|
||||
<style>wxRA_SPECIFY_ROWS</style>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue