findIndexesNamesInUse method
Relation names are unique per schema (an index, a table, a sequence...): the ones visible in the search path.
Implementation
@override
FutureOr<Map<String, String?>?> findIndexesNamesInUse(
String table,
Iterable<String> indexesNames,
) {
var names = indexesNames
.map((n) => "'${n.replaceAll("'", "''")}'")
.join(', ');
if (names.isEmpty) return <String, String?>{};
var sql =
'''
SELECT
c.relname AS name,
t.relname AS table_name
FROM pg_class c
LEFT JOIN pg_index ix ON ix.indexrelid = c.oid
LEFT JOIN pg_class t ON t.oid = ix.indrelid
WHERE
c.relname IN ($names)
AND pg_table_is_visible(c.oid);
''';
return executeWithPool(
(connection) => connection
.mappedResultsQuery(sql)
.then(
(rows) => <String, String?>{
for (var row in rows)
row['name'].toString(): row['table_name']?.toString(),
},
),
);
}