docs: def psql_query(query, user=None, host=None, port=None, maintenance_db=None,
                 password=None, runas=None, write=False):
      '''
      Run an SQL-Query and return the results as a list. This command
      only supports SELECT statements.  This limitation can be worked around
      with a query like this:
  
      WITH updated AS (UPDATE pg_authid SET rolconnlimit = 2000 WHERE
      rolname = 'rolename' RETURNING rolconnlimit) SELECT * FROM updated;
  
      query
          The query string.
  
      user
          Database username, if different from config or default.
  
      host
          Database host, if different from config or default.
  
      port
          Database port, if different from the config or default.
  
      maintenance_db
          The database to run the query against.
  
      password
          User password, if different from the config or default.
  
      runas
          User to run the command as.
  
      write
          Mark query as READ WRITE transaction.
  
      CLI Example:
  
      .. code-block:: bash
  
          salt '*' postgres.psql_query 'select * from pg_stat_activity'
      '''
      ret = []
  
      csv_query = 'COPY ({0}) TO STDOUT WITH CSV HEADER'.format(
          query.strip().rstrip(';'))
  
      # Mark transaction as R/W to achieve write will be allowed
      # Commit is necessary due to transaction
      if write:
          csv_query = 'START TRANSACTION READ WRITE; {0}; COMMIT TRANSACTION;'.format(csv_query)
  
      # always use the same datestyle settings to allow parsing dates
      # regardless what server settings are configured
      cmdret = _psql_prepare_and_run(['-v', 'datestyle=ISO,MDY',
                                      '-c', csv_query],
                                     runas=runas,
                                     host=host, user=user, port=port,
                                     maintenance_db=maintenance_db,
                                     password=password)
      if cmdret['retcode'] > 0:
          return ret
  
      csv_file = StringIO(cmdret['stdout'])
      header = {}
      for row in csv.reader(csv_file,
                            delimiter=salt.utils.stringutils.to_str(','),
                            quotechar=salt.utils.stringutils.to_str('"')):
          if not row:
              continue
          if not header:
              header = row
              continue
          ret.append(dict(zip(header, row)))
  
      # Remove 'COMMIT' message if query is inside R/W transction
      if write:
          ret = ret[0:-1]
  
      return ret