**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**:


tests/hooks/test_dbapi.py
statement = "SQL"
        parameters = ["X", "Y", "Z"]
        rows = [("hello",), ("world",)]
        self.cur.fetchall.return_value = rows
        assert rows == self.db_hook.get_records(statement, parameters)
        assert self.conn.close.call_count == 1
        assert self.cur.close.call_count == 1
        self.cur.execute.assert_called_once_with(statement, parameters)
    def test_get_records_exception(self):
        statement = "SQL"
        self.cur.fetchall.side_effect = RuntimeError('Great Problems')
        with pytest.raises(RuntimeError):
            self.db_hook.get_records(statement)
        assert self.conn.close.call_count == 1
        assert self.cur.close.call_count == 1
        self.cur.execute.assert_called_once_with(statement)
    def test_insert_rows(self):
        table = "table"
        rows = [("hello",), ("world",)]
        self.db_hook.insert_rows(table, rows)
        assert self.conn.close.call_count == 1
        assert self.cur.close.call_count == 1
        commit_count = 2  
        assert commit_count == self.conn.commit.call_count
        sql = f"INSERT INTO {table}  VALUES (%s)"
        for row in rows:
            self.cur.execute.assert_any_call(sql, row)
    def test_insert_rows_replace(self):