PostgreSQL 9.2: il tipo di dato RANGE

PostgreSQL 9.2 introduce un nuovo tipo di dato: RANGE. Questo tipo di dato rappresenta un intervallo di valori consecutivi.

I valori ai limiti dell’intervallo possono essere considerati o meno parte di esso. Similmente a quanto avviene in ambito matematico, si utilizzano le parentesi quadre in caso di limite incluso, quelle tonde in caso di limite escluso.

La sintassi per definire un dato di tipo RANGE è:

-- Usando il CAST da una stringa
SELECT '(5,100)'::numrange;

-- Usando l'apposito costruttore
SELECT tstzrange(now(), now() + '1 day'::INTERVAL, '()');

A corredo del tipo di dato, sono stati introdotti numerosi operatori e alcune funzioni di utilità.

Ad esempio, è possibile controllare facilmente che un valore sia contenuto o meno in un dato intervallo.

Ecco un esempio di utilizzo banale:

BEGIN;

CREATE TABLE prodotti AS
    SELECT md5(id::TEXT) AS codice_prodotto,
        round(random() * 1000)+1 AS prezzo
    FROM generate_series(1,10000) id;

-- Seleziona prodotti con prezzo da 1 a 50 €
SELECT codice_prodotto FROM prodotti
    WHERE '(1,50)'::numrange @> prezzo::NUMERIC;

-- Seleziona prodotti con prezzo da 10 a 50 €
SELECT codice_prodotto FROM prodotti
    WHERE '(10,50)'::numrange @> prezzo::NUMERIC;

-- Seleziona prodotti con prezzo da 50 a 1000 €
SELECT codice_prodotto FROM prodotti
    WHERE '(50,1000)'::numrange @> prezzo::NUMERIC;

ROLLBACK;

Nella prima riga, apriamo una transazione con BEGIN;.

Successivamente, creiamo una tabella contente dei dati generati casualmente. La tabella rappresenta i prodotti di un negozio, e contiene un codice_prodotto alfanumerico e un prezzo compreso tra 1 e 1000 euro.

Le successive tre SELECT servono a selezionare i prodotti in base alla fascia di prezzo, sfruttando l’operatore @>, che indica l’appartenenza ad un range di un valore scalare.

La lista completa di operatori e funzioni disponibili è disponibile nella documentazione ufficiale.

Non è difficile immaginare l’impatto che questa funzionalità, unica di Postgres, avrà in ambito data warehousing, scientifico, finanziaria e organizzativo (e.g. calendari).

This Post Has 0 Comments

Leave A Reply