Obtenha intervalo total de tempo de várias linhas se a sequência não estiver quebrada

Eu tenhoWork ePersonabelas (estes são apenas exemplos para entender o problema

EstruturWork mes
id INTEGER
person_id INTEGER
dt_from DATETIME
dt_to DATETIME
Person mes
person_id INTEGER
name VARCHAR(50)
DadoWork mes
id | person_id | dt_from    | dt_to
-------------------------------------------------
1  | 1         | 2011-01-01 | 2011-02-02
2  | 1         | 2011-02-02 | 2011-04-04
3  | 1         | 2011-06-06 | 2011-09-09
4  | 2         | 2011-01-01 | 2011-02-02
5  | 2         | 2011-02-02 | 2011-03-03
....etc.
Person mes

Apenas nomes de pessoas com o ID da pessoa

Saída esperada
Person 1 : 2011-01-01 - 2011-04-04
Person 1 : 2011-06-06 - 2011-09-09
Person 2 : 2011-01-01 - 2011-03-03

Interval deve estar em sequência. Não pode ser quebrado em algum lugar no meio. É por isso que a Pessoa 1 tem dois intervalos.

Estou usando o postgres se isso mudar alguma coisa. Você tem alguma opinião? Eu queria fazê-lo em uma consulta, mas se não houver essa solução, farei alguma intercalação de intervalo em php.

questionAnswers(2)

yourAnswerToTheQuestion