Você está chamando
unnest 3 vezes em FROM cláusula, isso significa que você está fazendo um CROSS JOIN (produto cartesiano) do 3. Se você estiver no PostgreSQL 9.4 ou superior, você pode simplesmente fazer uma chamada de
unnest dando cada array como entrada:select * from
unnest(
array['2001622', '2001624', '2007903'],
array[15,14,8],
array['type1', 'type1', 'type1'],
array[false, true, true]
) as u(id, ver, type, enabled)
Outra opção, para qualquer versão, é adicionar a chamada a
unnest em SELECT em vez de FROM :select
unnest(array['2001622', '2001624', '2007903']) as id,
unnest(array[15,14,8]) as ver,
unnest(array['type1', 'type1', 'type1']) as type,
unnest(array[false, true, true]) as enabled
Em ambos os casos, mas especialmente no último, você deve ter certeza de que cada array tem exatamente o mesmo número de elementos. Se isso não acontecer no primeiro método, cada linha ausente será preenchida como NULL, mas na segunda retornará tantas linhas quanto LCM do número de linhas retornadas por cada um, o que você provavelmente não deseja. Exemplo:
SELECT * FROM unnest(array[1,2,3,4], array['a','b','c','d','e','f']);
unnest | unnest
--------+--------
1 | a
2 | b
3 | c
4 | d
[null] | e
[null] | f
(6 rows)
SELECT unnest(array[1,2,3,4]), unnest(array['a','b','c','d','e','f']);
unnest | unnest
--------+--------
1 | a
2 | b
3 | c
4 | d
1 | e
2 | f
3 | a
4 | b
1 | c
2 | d
3 | e
4 | f
(12 rows)
Verifique a documentação sobre chamadas de funções de tabela Para maiores informações.