Release It! Second Edition: about Deploy Like the Pros (page 261)

About “Deploy Like the Pros”:

For instance, there’s a common omission that causes hours of downtime: forgetting an index on a foreign key constraint. (…) If you start from the premise that your build pipeline should be able to catch all mechanical errors like that, (…)

I think SchemaCrawler could be mentioned. Its linter has a rule for that purpose:

schemacrawler.tools.linter.LinterForeignKeyWithNoIndexes