## Environment
**Liquibase Version**: 3.6.0+

**Liquibase Integration & Version**: CLI

**Liquibase Extension(s) & Version**: -

**Database Vendor & Version**: PostgreSQL 11

**Operating System Type & Version**: Windows 10

## Description
After upgrading liquibase from 3.5.5 to 3.6.0 running migrations on empty database increased from 30 sec to 20 min. The issue remains in 3.9.0 and 4.0.0 beta 1.

My database contains 10 tables with unique column constraint and there are about 80 csv that are loaded with loadUpdateData to other tables. Output shows that before loading each csv liquibase performs a query for each unique column in database:

```
select const.CONSTRAINT_NAME, COLUMN_NAME from information_schema.table_constraints const join information_schema.key_column_usage col on const.constraint_schema=col.constraint_schema and const.table_name=col.table_name and const.constraint_name=col.constraint_name where const.constraint_catalog='testdb' and const.constraint_schema='public' and const.table_name='person' and const.constraint_name='person_name_key'order by ordinal_position
```

This queries perform 1-2 sec each on large database, which results in up to 20 min total time.

## Steps To Reproduce
Simple reproduction to show that query above is performed for tables not having unique columns:
Create two tables, one of them with unique column constraint

```
--liquibase formatted sql

--changeset user:1
create table person (
    id int primary key,
    name varchar(50) not null,
    unique(name)
)

--changeset user:2
create table company (
    id int primary key,
    title varchar(50) not null
)
```

Load data to second table

```
<changeSet author="user" id="companies" runAlways="true">
    <loadUpdateData tableName="company" primaryKey="id" file="company.csv" encoding="UTF-8" separator=";"/>
</changeSet>
```

```
id;title
1;qwe
```

This issue is similar to https://github.com/liquibase/liquibase/issues/1171, but jira issue mentioned there says that it is probably caused by foreign key constraints.

Thanks

## Integration Test Requirement
* Dev to write an integration test for this fix.
* QA will _not_ write a functional test.
* QA will validate fix manually.

## QA Manual Test Requirements
##### Setup
* Add two additional create table with a unique constraint to the changelog.
* At desk check, ask the developer how the fix was implemented; this will impact the test validations.

_Verify update is performant._
ASSERT :: 

* The query for unique constraints does not run three times (one for each table with UQ)
* IF dev implements the fix to run the query for unique constraints once per update, verify the query runs once.
* ELSE IF dev implements the fix to run the query for unique constraints _only_ for the table being updated, verify the query runs only for that table.


+ "and t.tabschema = '" + database.correctObjectName(schema.getName(), Schema.class) + "' "
                            + "order by colseq";
                }
            } else if (database instanceof DerbyDatabase) {
                sql = "SELECT cg.descriptor as descriptor, t.tablename "
                        + "FROM sys.sysconglomerates cg "
                        + "JOIN sys.syskeys k ON cg.conglomerateid = k.conglomerateid "
                        + "JOIN sys.sysconstraints c ON c.constraintid = k.constraintid "
                        + "JOIN sys.systables t ON c.tableid = t.tableid "
                        + "WHERE c.constraintname='" + database.correctObjectName(name, UniqueConstraint.class) + "'";
                List<Map<String, ?>> rows = ExecutorService.getInstance().getExecutor("jdbc", database).queryForList(new RawSqlStatement(sql));
                List<Map<String, ?>> returnList = new ArrayList<>();
                if (rows.isEmpty()) {
                    return returnList;
                } else if (rows.size() > 1) {
                    throw new UnexpectedLiquibaseException("Got multiple rows back querying unique constraints");
                } else {
                    Map rowData = rows.get(0);
                    String descriptor = rowData.get("DESCRIPTOR").toString();
                    descriptor = descriptor.replaceFirst(".*\\(", "").replaceFirst("\\).*", "");
                    for (String columnNumber : StringUtils.splitAndTrim(descriptor, ",")) {
                        String columnName = (String) ExecutorService.getInstance().getExecutor("jdbc", database).queryForObject(new RawSqlStatement(
                                "select c.columnname from sys.syscolumns c "
                                        + "join sys.systables t on t.tableid=c.referenceid "
                                        + "where t.tablename='" + rowData.get("TABLENAME") + "' and c.columnnumber=" + columnNumber), String.class);
                        Map<String, String> row = new HashMap<>();
                        row.put("COLUMN_NAME", columnName);
                        returnList.add(row);
                    }
                    return returnList;