**Apache Airflow version**:


**Kubernetes version (if you are using kubernetes)** (use `kubectl version`):

**Environment**:

- **Cloud provider or hardware configuration**:
- **OS** (e.g. from /etc/os-release):
- **Kernel** (e.g. `uname -a`):
- **Install tools**:
- **Others**:

**What happened**:
`get_uri()` and `get_sqlalchemy_engine()` had not been implemented in PostgresHook.

When using `PostgresHook('CONNECTION_NAME', schema='another_schema').get_sqlalchemy_engine()` that will still use connection default schema setting through `get_uri()`, instead of schema that is assigned to `PostgresHook()`.

**What you expected to happen**:
`get_uri()` should follow schema in PostgresHook.

**How to reproduce it**:
`PostgresHook('CONNECTION_NAME', schema='another_schema'). get_uri()`

**Anything else we need to know**:


airflow/hooks/dbapi.py
with closing(self.get_conn()) as conn:
            if self.supports_autocommit:
                self.set_autocommit(conn, autocommit)
            with closing(conn.cursor()) as cur:
                results = []
                for sql_statement in sql:
                    self._run_command(cur, sql_statement, parameters)
                    if handler is not None:
                        result = handler(cur)
                        results.append(result)
            
            
            if not self.get_autocommit(conn):
                conn.commit()
        if handler is None:
            return None
        if scalar:
            return results[0]
        return results
    def _run_command(self, cur, sql_statement, parameters):
        """Runs a statement using an already open cursor."""
        self.log.info("Running statement: %s, parameters: %s", sql_statement, parameters)
        if parameters:
            cur.execute(sql_statement, parameters)
        else:
            cur.execute(sql_statement)
        
        if cur.rowcount >= 0:
            self.log.info("Rows affected: %s", cur.rowcount)
    def set_autocommit(self, conn, autocommit):