On the server where it's not working:
postqueue -p -v
postqueue: name_mask: all
postqueue: inet_addr_local: configured 5 IPv4 addresses
postqueue: inet_addr_local: configured 11 IPv6 addresses
postqueue: connect to subsystem public/showq
postqueue: public/showq socket: wanted attribute: protocol
postqueue: input attribute name: (end)
postqueue: warning: missing attribute protocol in input from public/showq socket
postqueue: public/showq socket: EOF
postqueue: fatal: malformed showq server response
On a server where it's working:
postqueue -p -v
postqueue: name_mask: all
postqueue: inet_addr_local: configured 7 IPv4 addresses
postqueue: inet_addr_local: configured 8 IPv6 addresses
postqueue: connect to subsystem public/showq
postqueue: public/showq socket: wanted attribute: protocol
postqueue: input attribute name: protocol
postqueue: input attribute value: mail_queue_list_protocol
postqueue: public/showq socket: wanted attribute: (list terminator)
postqueue: input attribute name: (end)
postqueue: public/showq socket: terminator (consumed)
Mail queue is empty
The difference seems to be
postqueue: input attribute name: protocol
postqueue: input attribute value: mail_queue_list_protocol
postqueue: public/showq socket: wanted attribute: (list terminator)