Calcular horas de trabalho entre 2 datas no PostgreSQL

Estou desenvolvendo um algoritmo com Postgres (PL / pgSQL) e preciso calcular o número de horas trabalhadas entre 2 timestamps, levando em conta que fins de semana não estão funcionando e o resto dos dias são contados apenas das 8h às 15h.

Exemplos:

De 3 de dezembro, das 14h às 10h, às 9h, conte duas horas:

3rd = 1, 4th = 1

De 3 de dezembro, das 15h às 7h, às 8h, devem contar 8 horas:

3rd = 0, 4th = 8, 5th = 0, 6th = 0, 7th = 0

Seria ótimo considerar as frações de hora também.

questionAnswers(3)

yourAnswerToTheQuestion