Supabase è una piattaforma open source che offre funzionalità backend pronte all'uso, basata su PostgreSQL come sistema di gestione dei dati. PostgreSQL è un database relazionale potente e ricco di funzionalità, molte delle quali vengono sfruttate da Supabase per offrire una piattaforma moderna e scalabile. In questo articolo esaminiamo le principali caratteristiche di PostgreSQL utilizzate da Supabase.
1. Estensioni PostgreSQL
Supabase abilita numerose estensioni PostgreSQL per potenziare le funzionalità del database. Tra le più rilevanti:
- pgcrypto: per la crittografia e la generazione di UUID sicuri.
- postgis: per supporto geospaziale avanzato.
- pgroonga: per la ricerca full-text multilingua.
- http: per effettuare richieste HTTP direttamente dal database.
-- Abilitazione di un'estensione
CREATE EXTENSION IF NOT EXISTS pgcrypto;
2. Row-Level Security (RLS)
Una delle caratteristiche fondamentali di Supabase è la sicurezza a livello di riga. RLS consente di definire politiche granulari su chi può leggere o scrivere determinate righe.
-- Abilitare RLS su una tabella
ALTER TABLE messages ENABLE ROW LEVEL SECURITY;
-- Definire una policy
CREATE POLICY "Users can view their messages"
ON messages
FOR SELECT
USING (user_id = auth.uid());
3. Funzioni SQL e RPC
Supabase espone le funzioni definite in PostgreSQL come Remote Procedure Calls (RPC) tramite la sua API RESTful. Questo permette di scrivere logica di business direttamente nel database.
-- Creare una funzione SQL
CREATE FUNCTION get_user_profile(uid uuid)
RETURNS TABLE(name text, email text)
AS $$
SELECT name, email FROM profiles WHERE id = uid;
$$ LANGUAGE sql STABLE;
4. Trigger e funzioni PL/pgSQL
I trigger permettono di automatizzare azioni in risposta a eventi sui dati, come inserimenti, aggiornamenti o cancellazioni.
-- Trigger per aggiornare il timestamp
CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = now();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER set_timestamp
BEFORE UPDATE ON posts
FOR EACH ROW
EXECUTE FUNCTION update_modified_column();
5. Replicazione in tempo reale con Logical Decoding
Supabase utilizza la replicazione logica per implementare funzionalità di realtime. Grazie a questa, ogni modifica al database può essere ascoltata da client in tempo reale.
PostgreSQL emette eventi di cambiamento (INSERT, UPDATE, DELETE) attraverso un canale di pubblicazione che può essere consumato da Supabase Realtime Server.
6. Tipi JSON e JSONB
PostgreSQL supporta tipi dati JSON e JSONB, che permettono di archiviare e interrogare strutture semi-strutturate. Supabase sfrutta queste capacità per offrire una maggiore flessibilità nello schema dei dati.
-- Query su dati JSONB
SELECT data->>'name'
FROM users
WHERE data->'settings'->>'theme' = 'dark';
7. Partizionamento e performance
PostgreSQL offre strumenti di partizionamento che Supabase può utilizzare per scalare database di grandi dimensioni, dividendo logicamente le tabelle in sottosezioni gestibili.
Conclusione
Grazie alle potenti funzionalità di PostgreSQL, Supabase riesce a offrire una piattaforma moderna, sicura e altamente personalizzabile. Estensioni, sicurezza avanzata, supporto JSON, funzioni server-side e realtime sono solo alcune delle caratteristiche che rendono PostgreSQL la scelta ideale per un backend open source come Supabase.