**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
def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.table = "test_postgres_hook_table"
    def setUp(self):
        super().setUp()
        self.cur = mock.MagicMock(rowcount=0)
        self.conn = conn = mock.MagicMock()
        self.conn.cursor.return_value = self.cur
        class UnitTestPostgresHook(PostgresHook):
            conn_name_attr = 'test_conn_id'
            def get_conn(self):
                return conn
        self.db_hook = UnitTestPostgresHook()
    def tearDown(self):
        super().tearDown()
        with PostgresHook().get_conn() as conn:
            with conn.cursor() as cur:
                cur.execute(f"DROP TABLE IF EXISTS {self.table}")
    @pytest.mark.backend("postgres")
    def test_copy_expert(self):