Eu finalmente encontrei uma solução. Provavelmente não é o melhor, mas não consegui encontrar um mais correto, tendo lido toda a documentação relevante de postfix e vários outros posts. Esta questão não sendo respondida é outro indicador de que uma solução "correta" pode não existir.
Minha solução é bem simples. Descobri que, se você especificar todos os endereços existentes na tabela virtual de aliases da seguinte forma:
[email protected] [email protected]
[email protected] [email protected]
(basicamente a mesma fonte e destino)
funciona como esperado pela intenção original. (essa foi uma sugestão que encontrei em outra pergunta sobre o mesmo assunto). Bem, colocar essas informações na tabela virtual_aliases está claramente errado (duplicação de informações, ...), então eu criei uma solução mais elegante:
CREATE OR REPLACE VIEW v_virtual_aliases AS
SELECT mailboxes.mailbox AS src,
mailboxes.mailbox AS dst
FROM mailboxes
UNION ALL
SELECT virtual_aliases.src,
virtual_aliases.dst
FROM virtual_aliases;
O que isto faz é simplesmente criar uma visão com todas as informações da tabela virtual_aliases combinada com todas as caixas de correio existentes da tabela de caixas de correio reais. Dessa forma, nenhum dado é duplicado e o aliasing funciona conforme o esperado - somente para endereços que não possuem uma entrada na tabela de caixas de correio. Dada essa consulta, o desempenho não deve ser um problema, mesmo para bancos de dados grandes.
Eu atualizei o arquivo valias.cf de acordo:
query = SELECT dst FROM virtual_aliases WHERE src = '%s'
Agora tudo funciona conforme o esperado pela pergunta original.