<!--- 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.
("cluster" in PostgreSQL terminology) and, optionally,
  grants the user access to an existing database or tables.
- A user is a role with login privilege.
- The fundamental function of the module is to create, or delete, users from
  a PostgreSQL instances. Privilege assignment, or removal, is an optional
  step, which works on one database at a time. This allows for the module to
  be called several times in the same module to modify the permissions on
  different databases, or to grant permissions to already existing users.
- A user cannot be removed until all the privileges have been stripped from
  the user. In such situation, if the module tries to remove the user it
  will fail. To avoid this from happening the fail_on_user option signals
  the module to try to remove the user, but if not possible keep going; the
  module will report if changes happened and separately if the user was
  removed or not.
version_added: '0.6'
options:
  name:
    description:
    - Name of the user (role) to add or remove.
    type: str
    required: true
    aliases:
    - user
  password:
    description:
    - Set the user's password, before 1.4 this was required.
    - Password can be passed unhashed or hashed (MD5-hashed).
    - Unhashed password will automatically be hashed when saved into the
      database if C(encrypted) parameter is set, otherwise it will be save in
      plain text format.