**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
self.connection.extra = '{"iam":true, "redshift":true, "cluster-identifier": "different-identifier"}'
        self.connection.host = 'cluster-identifier.ccdfre4hpd39h.us-east-1.redshift.amazonaws.com'
        login = f'IAM:{self.connection.login}'
        mock_client.return_value.get_cluster_credentials.return_value = {
            'DbPassword': 'aws_token',
            'DbUser': login,
        }
        self.db_hook.get_conn()
        get_cluster_credentials_call = mock.call(
            DbUser=self.connection.login,
            DbName=self.connection.schema,
            ClusterIdentifier="different-identifier",
            AutoCreate=False,
        )
        mock_client.return_value.get_cluster_credentials.assert_has_calls([get_cluster_credentials_call])
        mock_connect.assert_called_once_with(
            user=login, password='aws_token', host=self.connection.host, dbname='schema', port=5439
        )
        
        self.db_hook.get_conn()
        mock_client.return_value.get_cluster_credentials.assert_has_calls(
            [get_cluster_credentials_call, get_cluster_credentials_call]
        )
class TestPostgresHook(unittest.TestCase):