**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/providers/postgres/hooks/test_postgres.py
open_mock = mock.mock_open(read_data='{"some": "json"}')
        with mock.patch('airflow.providers.postgres.hooks.postgres.open', open_mock):
            statement = "SQL"
            filename = "filename"
            self.cur.fetchall.return_value = None
            assert self.db_hook.copy_expert(statement, filename) is None
            assert self.conn.close.call_count == 1
            assert self.cur.close.call_count == 1
            assert self.conn.commit.call_count == 1
            self.cur.copy_expert.assert_called_once_with(statement, open_mock.return_value)
            assert open_mock.call_args[0] == (filename, "r+")
    @pytest.mark.backend("postgres")
    def test_bulk_load(self):
        hook = PostgresHook()
        input_data = ["foo", "bar", "baz"]
        with hook.get_conn() as conn:
            with conn.cursor() as cur:
                cur.execute(f"CREATE TABLE {self.table} (c VARCHAR)")
                conn.commit()
                with NamedTemporaryFile() as f:
                    f.write("\n".join(input_data).encode("utf-8"))
                    f.flush()
                    hook.bulk_load(self.table, f.name)
                cur.execute(f"SELECT * FROM {self.table}")
                results = [row[0] for row in cur.fetchall()]
        assert sorted(input_data) == sorted(results)
    @pytest.mark.backend("postgres")
    def test_bulk_dump(self):