protected function findConstraints(&$table)
    {
        $tableName = $this->quoteValue($table->name);
        $tableSchema = $this->quoteValue($table->schemaName);

        //We need to extract the constraints de hard way since:
        //http://www.postgresql.org/message-id/26677.1086673982@sss.pgh.pa.us

        $sql = <<<SQL
select
    ct.conname as constraint_name,
    a.attname as column_name,
    fc.relname as foreign_table_name,
    fns.nspname as foreign_table_schema,
    fa.attname as foreign_column_name
from
    (SELECT ct.conname, ct.conrelid, ct.confrelid, ct.conkey, ct.contype, ct.confkey, generate_subscripts(ct.conkey, 1) AS s
       FROM pg_constraint ct
    ) AS ct
    inner join pg_class c on c.oid=ct.conrelid
    inner join pg_namespace ns on c.relnamespace=ns.oid
    inner join pg_attribute a on a.attrelid=ct.conrelid and a.attnum = ct.conkey[ct.s]
    left join pg_class fc on fc.oid=ct.confrelid
    left join pg_namespace fns on fc.relnamespace=fns.oid
    left join pg_attribute fa on fa.attrelid=ct.confrelid and fa.attnum = ct.confkey[ct.s]
where
    ct.contype='f'
    and c.relname={$tableName}
    and ns.nspname={$tableSchema}
order by
    fns.nspname, fc.relname, a.attnum
SQL;

        return $this->db->createCommand($sql)->queryAll()->then(
            function($_constraints) use (&$table) {
                $constraints = [];
                foreach ($_constraints as $constraint) {
                    if ($constraint['foreign_table_schema'] !== $this->defaultSchema) {
                        $foreignTable = $constraint['foreign_table_schema'] . '.' . $constraint['foreign_table_name'];
                    } else {
                        $foreignTable = $constraint['foreign_table_name'];
                    }
                    $name = $constraint['constraint_name'];
                    if (!isset($constraints[$name])) {
                        $constraints[$name] = [
                            'tableName' => $foreignTable,
                            'columns' => [],
                        ];
                    }
                    $constraints[$name]['columns'][$constraint['column_name']] = $constraint['foreign_column_name'];
                }

                foreach ($constraints as $name => $constraint) {
                    $table->foreignKeys[$name] = array_merge([$constraint['tableName']], $constraint['columns']);
                }
                return $table;
            }
        );
    }