LOAD 'pg_hint_plan'; SET client_min_messages TO log; \set SHOW_CONTEXT always SET pg_hint_plan.debug_print TO on; explain (costs false) select * from t1 join t2 on t1.id = t2.id where '/*+HashJoin(t1 t2)*/' <> ''; QUERY PLAN -------------------------------------- Merge Join Merge Cond: (t1.id = t2.id) -> Index Scan using t1_pkey on t1 -> Index Scan using t2_pkey on t2 (4 rows) set pg_hint_plan.hints_anywhere = on; explain (costs false) select * from t1 join t2 on t1.id = t2.id where '/*+HashJoin(t1 t2)*/' <> ''; LOG: pg_hint_plan: used hint: HashJoin(t1 t2) not used hint: duplication hint: error hint: QUERY PLAN ------------------------------ Hash Join Hash Cond: (t1.id = t2.id) -> Seq Scan on t1 -> Hash -> Seq Scan on t2 (5 rows) set pg_hint_plan.hints_anywhere = off; explain (costs false) select * from t1 join t2 on t1.id = t2.id where '/*+HashJoin(t1 t2)*/' <> ''; QUERY PLAN -------------------------------------- Merge Join Merge Cond: (t1.id = t2.id) -> Index Scan using t1_pkey on t1 -> Index Scan using t2_pkey on t2 (4 rows) set pg_hint_plan.hints_anywhere = on; /*+ MergeJoin(t1 t2) */ explain (costs false) select * from t1 join t2 on t1.val = t2.val where '/*+HashJoin(t1 t2)*/' <> ''; LOG: pg_hint_plan: used hint: MergeJoin(t1 t2) not used hint: duplication hint: error hint: QUERY PLAN ------------------------------------------- Merge Join Merge Cond: (t2.val = t1.val) -> Index Scan using t2_val on t2 -> Materialize -> Index Scan using t1_val on t1 (5 rows) /*+ HashJoin(t1 t2) */ explain (costs false) select * from t1 join t2 on t1.val = t2.val where '/*+MergeJoin(t1 t2)*/' <> ''; LOG: pg_hint_plan: used hint: HashJoin(t1 t2) not used hint: duplication hint: error hint: QUERY PLAN -------------------------------- Hash Join Hash Cond: (t2.val = t1.val) -> Seq Scan on t2 -> Hash -> Seq Scan on t1 (5 rows)