C'è un metodo più semplice che è brutto, ma credo tecnicamente corretto:estrai la fetta più grande possibile dall'array, invece della fetta esatta con limiti calcolati. Evita le due chiamate di funzione.
Esempio:
select ('[5:7]={1,2,3}'::int[])[-2147483648:2147483647];
risulta in:
int4 --------- {1,2,3}