Para evitar qualquer confusão sobre como escapar de aspas simples e geralmente simplificar a sintaxe, use cotação de dólares para a string de consulta:
SELECT *
FROM crosstab($$
SELECT person_id, item_name, item_value
FROM t1
WHERE person_id = 1
AND item_name IN ('NAME', 'GENDER')
$$) AS virtual_table (person_id int, name varchar, gender varchar)
E você deve adicionar
ORDER BY
para sua string de consulta. Cito o manual do módulo tablefunc
:Mais detalhes: