postgre sql indexes analysis - partialy working

This commit is contained in:
Jan Prochazka 2021-08-20 22:17:02 +02:00
parent 89c904abc1
commit 820044b489
4 changed files with 46 additions and 1 deletions

View File

@ -6,6 +6,6 @@ module.exports = `
INDEX_TYPE AS indexType,
NON_UNIQUE AS nonUnique
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = '#DATABASE#' AND TABLE_NAME =OBJECT_ID_CONDITION AND INDEX_NAME != 'PRIMARY' AND INDEX_NAME NOT LIKE 'IFK_%'
WHERE TABLE_SCHEMA = '#DATABASE#' AND TABLE_NAME =OBJECT_ID_CONDITION AND INDEX_NAME != 'PRIMARY'
ORDER BY SEQ_IN_INDEX
`;

View File

@ -65,6 +65,7 @@ class Analyser extends DatabaseAnalyser {
? await this.driver.query(this.pool, this.createQuery('matviewColumns', ['matviews']))
: null;
const routines = await this.driver.query(this.pool, this.createQuery('routines', ['procedures', 'functions']));
const indexes = await this.driver.query(this.pool, this.createQuery('indexes', ['tables']));
return {
tables: tables.rows.map(table => {
@ -104,6 +105,13 @@ class Analyser extends DatabaseAnalyser {
refSchemaName: x.ref_schema_name,
}))
),
indexes: indexes.rows
.filter(x => x.table_name == table.pure_name && x.schema_name == table.schema_name)
.map(idx => ({
constraintName: idx.index_name,
isUnique: idx.is_unique,
columns: idx.column_names.split('|').map(columnName => ({ columnName })),
})),
};
}),
views: views.rows.map(view => ({

View File

@ -10,6 +10,7 @@ const matviews = require('./matviews');
const routines = require('./routines');
const routineModifications = require('./routineModifications');
const matviewColumns = require('./matviewColumns');
const indexes = require('./indexes');
module.exports = {
columns,
@ -24,4 +25,5 @@ module.exports = {
matviews,
matviewModifications,
matviewColumns,
indexes,
};

View File

@ -0,0 +1,35 @@
module.exports = `
select
t.relname as "table_name",
c.nspname as "schema_name",
i.relname as "index_name",
ix.indisprimary as "is_primary",
ix.indisunique as "is_unique",
array_to_string(array_agg(a.attname), '|') as "column_names"
from
pg_class t,
pg_class i,
pg_index ix,
pg_attribute a,
pg_namespace c
where
t.oid = ix.indrelid
and i.oid = ix.indexrelid
and a.attrelid = t.oid
and a.attnum = ANY(ix.indkey)
and t.relkind = 'r'
and ix.indisprimary = false
and t.relnamespace = c.oid
and c.nspname != 'pg_catalog'
and ('tables:' || c.nspname || '.' || t.relname) =OBJECT_ID_CONDITION
group by
i.oid,
t.relname,
i.relname,
c.nspname,
ix.indisprimary,
ix.indisunique
order by
t.relname,
i.relname
`;