PostgreSQL implémente FULL OUTER JOIN
avec un hachage ou une jointure par fusion.
Pour être éligible à une telle jointure, la condition de jointure doit avoir la forme
<expression using only left table> <operator> <expression using only right table>
Maintenant, votre condition de jointure fait ressemble à ceci, mais PostgreSQL n'a pas de IS NOT DISTINCT FROM
spécial opérateur, donc il analyse votre condition en :
(NOT ($1 IS DISTINCT FROM $2))
Et une telle expression ne peut pas être utilisée pour les jointures de hachage ou de fusion, d'où le message d'erreur.
Je peux penser à un moyen de contourner ce problème :
SELECT a_id, NULLIF(a_value, '<null>'),
b_id, NULLIF(b_value, '<null>')
FROM (SELECT id AS a_id,
COALESCE(value, '<null>') AS a_value
FROM a
) x
FULL JOIN
(SELECT id AS b_id,
COALESCE(value, '<null>') AS b_value
FROM b
) y
ON x.a_value = y.b_value;
Cela fonctionne si <null>
n'apparaît nulle part dans la value
colonnes.