Este é o comportamento atual do PostgreSQL. Índices exclusivos abordam a partição, não a tabela como um todo. Você tem poucas opções:
-
Se possível, particione suas tabelas para que os intervalos de chaves sejam exclusivos de alguma forma. Em outras palavras, particione em dados de chave. Esta é a abordagem mais fácil e sem complicações. Aqui você está particionando em dados não-chave, o que é um problema.
-
Se isso não funcionar, você pode adicionar o valor da partição ao outro lado da junção. Observe que, neste ponto, você precisa de gatilhos fkey personalizados.
-
Se você realmente precisar, você pode criar uma visualização materializada mantida por gatilho de todos os ids e criar um índice exclusivo sobre isso.