renaming a folder on the remote ... issue with defaults/main.yml

I am trying to rename a folder on a remote if it exists. this is being done via a role.

====== my two tasks ===============================================================
- name: move legacy postgres - stat postgres_data
  stat: path="{{ postgres_data }}"
  register: postgres_data

- name: move legacy postgres - rename $PGDATA to /opt/db/data/postgres/data_legacy
  command: mv "{{ postgres_data }}" "{{ postgres_data_legacy }}"
  when: postgres_data.stat.exists

        "mv: cannot stat '{'\\''changed'\\'': False, '\\''stat'\\'': {'\\''exists'\\'': True, '\\''path'\\'': '\\''/opt/db/data/postgres/data'\\'', '\\''mode'\\'': '\\''0750'\\'', '\\''isdir'\\'': True, '\\''ischr'\\'': False, '\\''isblk'\\'': False, '\\''isreg'\\'': False, '\\''isfifo'\\'': False, '\\''islnk'\\'': False, '\\''issock'\\'': False, '\\''uid'\\'': 1001, '\\''gid'\\'': 1001, '\\''size'\\'': 4096, '\\''inode'\\'': 65664, '\\''dev'\\'': 64779, '\\''nlink'\\'': 20, '\\''atime'\\'': 1659080065.949395, '\\''mtime'\\'': 1659017614.6222425, '\\''ctime'\\'': 1659080076.9242337, '\\''wusr'\\'': True, '\\''rusr'\\'': True, '\\''xusr'\\'': True, '\\''wgrp'\\'': False, '\\''rgrp'\\'': True, '\\''xgrp'\\'': True, '\\''woth'\\'': False, '\\''roth'\\'': False, '\\''xoth'\\'': False, '\\''isuid'\\'': False, '\\''isgid'\\'': False, '\\''blocks'\\'': 8, '\\''block_size'\\'': 4096, '\\''device_type'\\'': 0, '\\''readable'\\'': False, '\\''writeable'\\'': False, '\\''executable'\\'': False,
  '\\''pw_name'\\'': '\\''postgres'\\'', '\\''gr_name'\\'': '\\''postgres'\\'', '\\''mimetype'\\'': '\\''inode/directory'\\'', '\\''charset'\\'': '\\''binary'\\'', '\\''version'\\'': None, '\\''attributes'\\'': , '\\''attr_flags'\\'': '\\'''\\''}, '\\''failed'\\'': False}': No such file or directory"

You are trying to move a directory called '{'\\''changed'\\'': False,
'\\''stat'\\'': {'\\''exists'\\'': True, '\\''path'\\'':
'\\''/opt/db/data/postgres/data'\\'', '\\''mode'\\'': '\\''0750'\\'',
'\\''isdir'\\'': True, '\\''ischr'\\'': False, '\\''isblk'\\'': False,
'\\''isreg'\\'': False, '\\''isfifo'\\'': False, '\\''islnk'\\'':
False, '\\''issock'\\'': False, '\\''uid'\\'': 1001, '\\''gid'\\'':
1001, '\\''size'\\'': 4096, '\\''inode'\\'': 65664, '\\''dev'\\'':
64779, '\\''nlink'\\'': 20, '\\''atime'\\'': 1659080065.949395,
'\\''mtime'\\'': 1659017614.6222425, '\\''ctime'\\'':
1659080076.9242337, '\\''wusr'\\'': True, '\\''rusr'\\'': True,
'\\''xusr'\\'': True, '\\''wgrp'\\'': False, '\\''rgrp'\\'': True,
'\\''xgrp'\\'': True, '\\''woth'\\'': False, '\\''roth'\\'': False,
'\\''xoth'\\'': False, '\\''isuid'\\'': False, '\\''isgid'\\'': False,
'\\''blocks'\\'': 8, '\\''block_size'\\'': 4096,
'\\''device_type'\\'': 0, '\\''readable'\\'': False,
'\\''writeable'\\'': False, '\\''executable'\\'': False,

  '\\''pw_name'\\'': '\\''postgres'\\'', '\\''gr_name'\\'': '\\''postgres'\\'', '\\''mimetype'\\'': '\\''inode/directory'\\'', '\\''charset'\\'': '\\''binary'\\'', '\\''version'\\'': None, '\\''attributes'\\'': , '\\''attr_flags'\\'': '\\'''\\''}, '\\''failed'\\'': False}', which does not exist.

The variable you register with stat is not just a string, but a dict.
You should use the correct key from that dict (i.e. 'postgres_data.path')

probably 'postgres_data.stat.path'

it seems neither

´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´
- name: move legacy postgres - stat postgres_data
  stat: path="{{ postgres_data }}"
  register: postgres_data

- name: move legacy postgres - rename $PGDATA to /opt/db/data/postgres/data_legacy
  command: mv "{{ postgres_data }}" "{{ postgres_data_legacy }}" #
  when: postgres_data.stat.path
  become: true
´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´
nor

´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´
- name: move legacy postgres - stat postgres_data
  stat: path="{{ postgres_data }}"
  register: postgres_data

- name: move legacy postgres - rename $PGDATA to /opt/db/data/postgres/data_legacy
  command: mv "{{ postgres_data }}" "{{ postgres_data_legacy }}" #
  when: postgres_data.path
  become: true
´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´

seems to make any difference. When I put harcoded locations the dir is renamed, when I use the variables from the defaults/main.yml it isn't

Correct.
I assumed it was obvious that my suggestion was for the variable in
the command - because that is what the error is about.
You used it in the 'when' clause - which does not make sense as that
was OK to start with.
But now I see another issue with your code. You use 'postgres_data' as
a variable in the stat task, which you then overwrite with the results
of that task.
That is very confusing and the source of your error.
Rather than describing things and then running the risk of
misinterpretation again, perhaps it's better to just spell it out
entirely:

- name: move legacy postgres - stat postgres_data
  stat: path="{{ postgres_data }}"
  register: pgdatastat

- name: move legacy postgres - rename $PGDATA to
/opt/db/data/postgres/data_legacy
  command: mv "{{ pgdatastat.stat.path }}" "{{ postgres_data_legacy }}"
  when: pgdatastat.stat.exists

that works now, thx.

Apparently I still will have to study what 'stat' acutally does under the hood before I really get what actually happens here and why.