<!--- Verify first that your issue is not already reported on GitHub -->
<!--- Also test if the latest release and devel branch are affected too -->
<!--- Complete *all* sections as described, this form is processed automatically -->

##### SUMMARY
The `postgres_user` module does not commit changes if the variable groups is set. The create action will be commited, but any changes after that which do not change the `groups` variable will not be commited. This is due to [this line](https://github.com/ansible/ansible/blob/80bf24b17c52546c081b27e639499ba128824cf3/lib/ansible/modules/database/postgresql/postgresql_user.py#L855) which overrides the changed variable regardless of hte previous settings

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
`postgres_user`

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below
prod@ansible # ansible --version
ansible 2.9.0
  config file = /root/ansible.cfg
  configured module search path = [u'/root/galaxy_roles/kafka_lib/library']
  ansible python module location = /root/env/local/lib/python2.7/site-packages/ansible
  executable location = /root/env/bin/ansible
  python version = 2.7.12 (default, Oct  8 2019, 14:14:10) [GCC 5.4.0 20160609]

```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```paste below
ANSIBLE_PIPELINING(/root/ansible.cfg) = True
ANSIBLE_SSH_RETRIES(/root/ansible.cfg) = 3
CACHE_PLUGIN(/root/ansible.cfg) = jsonfile
CACHE_PLUGIN_CONNECTION(/root/ansible.cfg) = /root/.ansible_jsonfile_cache
CACHE_PLUGIN_TIMEOUT(/root/ansible.cfg) = 86400000
DEFAULT_GATHERING(/root/ansible.cfg) = smart
DEFAULT_MODULE_PATH(env: ANSIBLE_LIBRARY) = [u'/root/galaxy_roles/kafka_lib/library']
HOST_KEY_CHECKING(env: ANSIBLE_HOST_KEY_CHECKING) = False
```

##### OS / ENVIRONMENT
Tested on mac and linux 


##### STEPS TO REPRODUCE
Run the following:

```yaml
- name: Create read group
  postgresql_user:
    name: read
    role_attr_flags: NOLOGIN
    state: present
  become: yes
  become_user: postgres

- name: Create/grant postgres user
  postgresql_user:
    name: some_user
    state: present
    groups: [read]
    password: abc123
  become: yes
  become_user: postgres
```

Then change something (such as password) without changing groups:
```yaml
- name: Create/grant postgres user
  postgresql_user:
    name: some_user
    state: present
    groups: [read]
    password: abc1234
  become: yes
  become_user: postgres
```
And run the playbook again. The play will be reported as `changed: false` and the password will not be updated.



##### EXPECTED RESULTS
Changes are commited without changing the groups var


##### ACTUAL RESULTS

Changes are only commited if the groups var is changed.
raise InvalidPrivsError('Invalid privs specified for %s: %s' %
                                    (type_, ' '.join(priv_set.difference(VALID_PRIVS[type_]))))
        priv_set = normalize_privileges(priv_set, type_)
        o_privs[type_][name] = priv_set
    return o_privs
def get_valid_flags_by_version(cursor):
    """
    Some role attributes were introduced after certain versions. We want to
    compile a list of valid flags against the current Postgres version.
    """
    current_version = cursor.connection.server_version
    return [
        flag
        for flag, version_introduced in FLAGS_BY_VERSION.items()
        if current_version >= version_introduced
    ]
#
def main():
    argument_spec = postgres_common_argument_spec()
    argument_spec.update(
        user=dict(type='str', required=True, aliases=['name']),
        password=dict(type='str', default=None, no_log=True),
        state=dict(type='str', default='present', choices=['absent', 'present']),
        priv=dict(type='str', default=None),
        db=dict(type='str', default='', aliases=['login_db']),
        fail_on_user=dict(type='bool', default='yes', aliases=['fail_on_role']),
        role_attr_flags=dict(type='str', default=''),
        encrypted=dict(type='bool', default='yes'),
        no_password_changes=dict(type='bool', default='no'),
        expires=dict(type='str', default=None),