mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-01 13:13:58 +00:00
fixed loading constraints #734
This commit is contained in:
@@ -359,7 +359,7 @@ export class DatabaseAnalyser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static byTableFilter(table) {
|
static byTableFilter(table) {
|
||||||
return x => x.pureName == table.pureName && x.schemaName == x.schemaName;
|
return x => x.pureName == table.pureName && x.schemaName == table.schemaName;
|
||||||
}
|
}
|
||||||
|
|
||||||
static extractPrimaryKeys(table, pkColumns) {
|
static extractPrimaryKeys(table, pkColumns) {
|
||||||
|
|||||||
@@ -97,30 +97,30 @@ class Analyser extends DatabaseAnalyser {
|
|||||||
let fkColumns = null;
|
let fkColumns = null;
|
||||||
|
|
||||||
this.feedback({ analysingMessage: 'Loading foreign key constraints' });
|
this.feedback({ analysingMessage: 'Loading foreign key constraints' });
|
||||||
const fk_tableConstraints = await this.analyserQuery('fk_tableConstraints', ['tables']);
|
// const fk_tableConstraints = await this.analyserQuery('fk_tableConstraints', ['tables']);
|
||||||
|
|
||||||
this.feedback({ analysingMessage: 'Loading foreign key refs' });
|
this.feedback({ analysingMessage: 'Loading foreign key refs' });
|
||||||
const fk_referentialConstraints = await this.analyserQuery('fk_referentialConstraints', ['tables']);
|
const foreignKeys = await this.analyserQuery('foreignKeys', ['tables']);
|
||||||
|
|
||||||
this.feedback({ analysingMessage: 'Loading foreign key columns' });
|
this.feedback({ analysingMessage: 'Loading foreign key columns' });
|
||||||
const fk_keyColumnUsage = await this.analyserQuery('fk_keyColumnUsage', ['tables']);
|
const fk_keyColumnUsage = await this.analyserQuery('fk_keyColumnUsage', ['tables']);
|
||||||
|
|
||||||
const cntKey = x => `${x.constraint_name}|${x.constraint_schema}`;
|
// const cntKey = x => `${x.constraint_name}|${x.constraint_schema}`;
|
||||||
const fkRows = [];
|
const fkRows = [];
|
||||||
const fkConstraintDct = _.keyBy(fk_tableConstraints.rows, cntKey);
|
// const fkConstraintDct = _.keyBy(fk_tableConstraints.rows, cntKey);
|
||||||
for (const fkRef of fk_referentialConstraints.rows) {
|
for (const fkRef of foreignKeys.rows) {
|
||||||
const cntBase = fkConstraintDct[cntKey(fkRef)];
|
// const cntBase = fkConstraintDct[cntKey(fkRef)];
|
||||||
const cntRef = fkConstraintDct[`${fkRef.unique_constraint_name}|${fkRef.unique_constraint_schema}`];
|
// const cntRef = fkConstraintDct[`${fkRef.unique_constraint_name}|${fkRef.unique_constraint_schema}`];
|
||||||
if (!cntBase || !cntRef) continue;
|
// if (!cntBase || !cntRef) continue;
|
||||||
const baseCols = _.sortBy(
|
const baseCols = _.sortBy(
|
||||||
fk_keyColumnUsage.rows.filter(
|
fk_keyColumnUsage.rows.filter(
|
||||||
x => x.table_name == cntBase.table_name && x.constraint_name == cntBase.constraint_name
|
x => x.table_name == fkRef.table_name && x.constraint_name == fkRef.constraint_name && x.table_schema == fkRef.table_schema
|
||||||
),
|
),
|
||||||
'ordinal_position'
|
'ordinal_position'
|
||||||
);
|
);
|
||||||
const refCols = _.sortBy(
|
const refCols = _.sortBy(
|
||||||
fk_keyColumnUsage.rows.filter(
|
fk_keyColumnUsage.rows.filter(
|
||||||
x => x.table_name == cntRef.table_name && x.constraint_name == cntRef.constraint_name
|
x => x.table_name == fkRef.ref_table_name && x.constraint_name == fkRef.unique_constraint_name && x.table_schema == fkRef.ref_table_schema
|
||||||
),
|
),
|
||||||
'ordinal_position'
|
'ordinal_position'
|
||||||
);
|
);
|
||||||
@@ -132,10 +132,10 @@ class Analyser extends DatabaseAnalyser {
|
|||||||
|
|
||||||
fkRows.push({
|
fkRows.push({
|
||||||
...fkRef,
|
...fkRef,
|
||||||
pure_name: cntBase.table_name,
|
pure_name: fkRef.table_name,
|
||||||
schema_name: cntBase.table_schema,
|
schema_name: fkRef.table_schema,
|
||||||
ref_table_name: cntRef.table_name,
|
ref_table_name: fkRef.ref_table_name,
|
||||||
ref_schema_name: cntRef.table_schema,
|
ref_schema_name: fkRef.ref_table_schema,
|
||||||
column_name: baseCol.column_name,
|
column_name: baseCol.column_name,
|
||||||
ref_column_name: refCol.column_name,
|
ref_column_name: refCol.column_name,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
module.exports = `
|
|
||||||
select
|
|
||||||
fk.constraint_name as "constraint_name",
|
|
||||||
fk.constraint_schema as "constraint_schema",
|
|
||||||
fk.update_rule as "update_action",
|
|
||||||
fk.delete_rule as "delete_action",
|
|
||||||
fk.unique_constraint_name as "unique_constraint_name",
|
|
||||||
fk.unique_constraint_schema as "unique_constraint_schema"
|
|
||||||
from information_schema.referential_constraints fk
|
|
||||||
where fk.constraint_schema =SCHEMA_NAME_CONDITION
|
|
||||||
`;
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
module.exports = `
|
|
||||||
select
|
|
||||||
base.table_name as "table_name",
|
|
||||||
base.table_schema as "table_schema",
|
|
||||||
base.constraint_name as "constraint_name",
|
|
||||||
base.constraint_schema as "constraint_schema"
|
|
||||||
from information_schema.table_constraints base
|
|
||||||
where ('tables:' || base.table_schema || '.' || base.table_name) =OBJECT_ID_CONDITION and base.table_schema =SCHEMA_NAME_CONDITION
|
|
||||||
`;
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
module.exports = `
|
||||||
|
SELECT
|
||||||
|
nsp.nspname AS table_schema,
|
||||||
|
rel.relname AS table_name,
|
||||||
|
con.conname AS constraint_name,
|
||||||
|
nsp2.nspname AS ref_table_schema,
|
||||||
|
rel2.relname AS ref_table_name,
|
||||||
|
conpk.conname AS unique_constraint_name
|
||||||
|
FROM pg_constraint con
|
||||||
|
JOIN pg_class rel ON rel.oid = con.conrelid
|
||||||
|
JOIN pg_namespace nsp ON nsp.oid = rel.relnamespace
|
||||||
|
JOIN pg_class rel2 ON rel2.oid = con.confrelid
|
||||||
|
JOIN pg_namespace nsp2 ON nsp2.oid = rel2.relnamespace
|
||||||
|
JOIN pg_constraint conpk
|
||||||
|
ON conpk.conrelid = con.confrelid
|
||||||
|
AND conpk.conkey = con.confkey
|
||||||
|
AND conpk.contype IN ('p','u') -- 'p' = primary key, 'u' = unique constraint
|
||||||
|
WHERE con.contype = 'f' AND ('tables:' || nsp.nspname || '.' || rel.relname) =OBJECT_ID_CONDITION AND nsp.nspname =SCHEMA_NAME_CONDITION
|
||||||
|
;
|
||||||
|
`;
|
||||||
@@ -15,10 +15,8 @@ const uniqueNames = require('./uniqueNames');
|
|||||||
const geometryColumns = require('./geometryColumns');
|
const geometryColumns = require('./geometryColumns');
|
||||||
const geographyColumns = require('./geographyColumns');
|
const geographyColumns = require('./geographyColumns');
|
||||||
const proceduresParameters = require('./proceduresParameters');
|
const proceduresParameters = require('./proceduresParameters');
|
||||||
|
const foreignKeys = require('./foreignKeys');
|
||||||
const fk_keyColumnUsage = require('./fk_key_column_usage');
|
const fk_keyColumnUsage = require('./fk_key_column_usage');
|
||||||
const fk_referentialConstraints = require('./fk_referential_constraints');
|
|
||||||
const fk_tableConstraints = require('./fk_table_constraints');
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
columns,
|
columns,
|
||||||
@@ -27,8 +25,7 @@ module.exports = {
|
|||||||
viewModifications,
|
viewModifications,
|
||||||
primaryKeys,
|
primaryKeys,
|
||||||
fk_keyColumnUsage,
|
fk_keyColumnUsage,
|
||||||
fk_referentialConstraints,
|
foreignKeys,
|
||||||
fk_tableConstraints,
|
|
||||||
views,
|
views,
|
||||||
routines,
|
routines,
|
||||||
routineModifications,
|
routineModifications,
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ select
|
|||||||
key_column_usage.column_name as "column_name"
|
key_column_usage.column_name as "column_name"
|
||||||
from information_schema.table_constraints
|
from information_schema.table_constraints
|
||||||
inner join information_schema.key_column_usage on table_constraints.table_name = key_column_usage.table_name and table_constraints.constraint_name = key_column_usage.constraint_name
|
inner join information_schema.key_column_usage on table_constraints.table_name = key_column_usage.table_name and table_constraints.constraint_name = key_column_usage.constraint_name
|
||||||
|
and table_constraints.table_schema = key_column_usage.table_schema
|
||||||
where
|
where
|
||||||
table_constraints.table_schema !~ '^_timescaledb_'
|
table_constraints.table_schema !~ '^_timescaledb_'
|
||||||
and table_constraints.constraint_type = 'PRIMARY KEY'
|
and table_constraints.constraint_type = 'PRIMARY KEY'
|
||||||
|
|||||||
Reference in New Issue
Block a user