I’m reading the docs @ community.postgresql.postgresql_query module – Run PostgreSQL queries — Ansible Community Documentation but I keep getting errors when trying to execute a few simple commands…
This is the output I’m getting
Any idea on what I’m doing wrong?
             
            
              
              
              
            
            
           
          
            
            
              Not posting text, but pixely/hard-to-read images, for starters...
             
            
              
              
              
            
            
           
          
            
            
              This is the code I’m using:
- name: DELETE POSTGRESQL ROLE
 community.postgresql.postgresql_query:
 login_host: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 db: db_test
 login_user: master
 login_password: 0123456789
 query: GRANT %(role)s TO %(admin)s; REASSIGN OWNED BY %(role)s TO %(admin)s; DROP OWNED BY %(role)s; DROP ROLE %(role)s;
 named_args:
 role: delete-user
 admin: master
This is the console output:
fatal: [localhost]: FAILED! => {“changed”: false, “msg”: “Cannot execute SQL ‘GRANT %(role)s TO %(admin)s; REASSIGN OWNED BY %(role)s TO %(admin)s; DROP OWNED BY %(role)s; DROP ROLE %(role)s;’ {‘role’: ‘delete-user’, ‘admin’: ‘master’}: syntax error at or near "‘delete-user’"\nLINE 1: GRANT ‘delete-user’ TO ‘master’; REASSIGN OWNED BY 'delete-u…\n ^\n, query list: [‘GRANT %(role)s TO %(admin)s; REASSIGN OWNED BY %(role)s TO %(admin)s; DROP OWNED BY %(role)s; DROP ROLE %(role)s;’]”}
             
            
              
              
              
            
            
           
          
            
            
              I see that you're supplying multiple SQL statements at the 'query' parameter.
I don't know the module that well, but it could be that that is not supported?
In that case, probably you could loop over a list of queries:
- name: DELETE POSTGRESQL ROLE
  community.postgresql.postgresql_query:
    login_host: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    db: db_test
    login_user: master
    login_password: 0123456789
    query: GRANT %(role)s TO %(admin)s; REASSIGN OWNED BY %(role)s TO
%(admin)s; DROP OWNED BY %(role)s; DROP ROLE %(role)s;
    named_args:
      role: delete-user
      admin: master
  loop:
   - GRANT %(role)s TO %(admin)s;
   - REASSIGN OWNED BY %(role)s TO %(admin)s;
   - DROP OWNED BY %(role)s;
   - DROP ROLE %(role)s;
(not tried, ymmv)
             
            
              
              
              
            
            
           
          
            
            
              The SQL is not idempotent: It will fail if run again, and nothing is
apparent in the code snippet to prevent ansible from trying to run it
even if it's already succeeded. Check the status of the relevant SQL
server to see whether the relevant roles and accounts exist now.