index column analysingh works for both postgres and cockroach

This commit is contained in:
Jan Prochazka
2021-08-25 18:43:08 +02:00
parent 10e63f3e77
commit b9e2e51bd7
4 changed files with 37 additions and 7 deletions

View File

@@ -66,6 +66,7 @@ class Analyser extends DatabaseAnalyser {
: 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']));
const indexcols = await this.driver.query(this.pool, this.createQuery('indexcols', ['tables']));
return {
tables: tables.rows.map(table => {
@@ -110,7 +111,14 @@ class Analyser extends DatabaseAnalyser {
.map(idx => ({
constraintName: idx.index_name,
isUnique: idx.is_unique,
columns: idx.column_names.split('|').map(columnName => ({ columnName })),
columns: _.compact(
idx.indkey
.split(' ')
.map(colid => indexcols.rows.find(col => col.oid == idx.oid && col.attnum == colid))
.map(col => ({
columnName: col.column_name,
}))
),
})),
};
}),

View File

@@ -11,6 +11,7 @@ const routines = require('./routines');
const routineModifications = require('./routineModifications');
const matviewColumns = require('./matviewColumns');
const indexes = require('./indexes');
const indexcols = require('./indexcols');
module.exports = {
columns,
@@ -26,4 +27,5 @@ module.exports = {
matviewModifications,
matviewColumns,
indexes,
indexcols,
};

View File

@@ -0,0 +1,24 @@
module.exports = `
select
a.attname as "column_name",
a.attnum as "attnum",
a.attrelid as "oid"
from
pg_class t,
pg_class i,
pg_attribute a,
pg_index ix,
pg_namespace c
where
t.oid = ix.indrelid
and a.attnum = ANY(ix.indkey)
and a.attrelid = t.oid
and i.oid = ix.indexrelid
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
order by
t.relname
`;

View File

@@ -5,12 +5,8 @@ module.exports = `
i.relname as "index_name",
ix.indisprimary as "is_primary",
ix.indisunique as "is_unique",
(
select
array_to_string(array_agg((select a.attname from pg_attribute a where ord = a.attnum and a.attrelid = t.oid)), '|')
from
unnest(ix.indkey) ord
) as "column_names"
ix.indkey as "indkey",
t.oid as "oid"
from
pg_class t,
pg_class i,