Moduli di Estensione Ufficiali PostgreSQL
ServBay, un potente ambiente di sviluppo web locale, integra numerosi strumenti utili per gli sviluppatori, tra cui il completo database PostgreSQL. La forza di PostgreSQL risiede non solo nelle funzionalità di base, ma anche nell’ampio ecosistema di estensioni ufficiali disponibili. ServBay preinstalla la maggior parte dei moduli ufficiali di estensione di PostgreSQL, consentendo agli sviluppatori di attivarli e utilizzarli facilmente nell’ambiente locale, ampliando notevolmente le funzionalità del database per soddisfare ogni esigenza applicativa complessa.
In questo articolo verranno presentati alcuni fra i moduli di estensione ufficiali più utilizzati di PostgreSQL e verrà spiegato come installarli e utilizzarli su ServBay.
Panoramica delle Estensioni Più Usate
PostgreSQL offre numerose estensioni ufficiali che coprono una vasta gamma di funzionalità, dalla supervisione delle performance a nuovi tipi di dati fino alla ricerca full-text. Di seguito alcuni moduli comunemente utilizzati dagli sviluppatori:
1. pg_stat_statements
- Funzionalità: raccoglie e registra statistiche su tutte le query SQL eseguite dal server, come conteggi delle chiamate, tempo totale di esecuzione, righe elaborate e altro.
- Utilizzo: supporta amministratori e sviluppatori nell’analisi delle performance delle query, nell’identificazione delle query lente e nell’ottimizzazione dei colli di bottiglia.
- Comando di installazione:sqlAttenzione: dopo l’installazione, è necessario configurare
CREATE EXTENSION pg_stat_statements;
1shared_preload_libraries = 'pg_stat_statements'
nel filepostgresql.conf
e riavviare il servizio PostgreSQL per una raccolta dati completa. ServBay offre modalità pratiche per modificare la configurazione.
2. pg_trgm
- Funzionalità: fornisce funzioni e supporto per indici basati sulle trigramme per misurare la similitudine tra testi.
- Utilizzo: ideale per implementare ricerche fuzzy, confronti di similarità o ricerche full-text, in particolare con testi che possono contenere errori di battitura o varianti.
- Comando di installazione:sql
CREATE EXTENSION pg_trgm;
1
3. hstore
- Funzionalità: introduce un nuovo tipo di dato che consente di archiviare coppie chiave/valore in una singola colonna PostgreSQL.
- Utilizzo: adatto per registrare attributi dinamici o dati (semi-)strutturati come configurazioni, metadati o preferenze utenti, senza dover progettare una struttura di tabella rigida.
- Comando di installazione:sql
CREATE EXTENSION hstore;
1
4. citext
- Funzionalità: offre un tipo di dato testuale case-insensitive.
- Utilizzo: ideale dove è necessario effettuare confronti senza distinzione tra maiuscole e minuscole, ad esempio per username, email o tag, evitando la necessità di utilizzare continuamente la funzione
LOWER()
nelle query. - Comando di installazione:sql
CREATE EXTENSION citext;
1
5. uuid-ossp
- Funzionalità: fornisce funzioni per la generazione di UUID (identifier univoci universali), supportando vari standard (versioni 1, 3, 4, 5).
- Utilizzo: utile per generare identificativi unici a livello globale, come chiavi primarie, session ID o tag unici in sistemi distribuiti.
- Comando di installazione:sqlNota: il nome dell’estensione contiene un trattino e va racchiuso tra doppi apici nel comando
CREATE EXTENSION "uuid-ossp";
1CREATE EXTENSION
.
6. intarray
- Funzionalità: introduce funzioni aggiuntive e operatori per la gestione avanzata degli array di interi.
- Utilizzo: permette di eseguire elaborate operazioni di insieme, controlli di appartenenza, ordinamenti e altro, direttamente su array di numeri interi a livello di database.
- Comando di installazione:sql
CREATE EXTENSION intarray;
1
7. btree_gin
- Funzionalità: aggiunge il supporto per la creazione di indici GIN (Generalized Inverted Index) per tipi di dati solitamente gestiti tramite B-tree, come numeri interi, testo, date.
- Utilizzo: gli indici GIN sono fondamentali per grandi moli di dati contenenti insiemi (array,
hstore
,tsvector
).btree_gin
consente l’uso di GIN anche su sottotipi indicizzabili con B-tree, migliorando le performance delle query. - Comando di installazione:sql
CREATE EXTENSION btree_gin;
1
8. btree_gist
- Funzionalità: aggiunge il supporto agli indici GiST (Generalized Search Tree) per i tipi di dati normalmente gestiti da B-tree.
- Utilizzo: GiST è una struttura d’indice generica;
btree_gist
ne consente l’utilizzo anche su dati B-tree, molto utile laddove occorrono query complesse di range, inclusione o indici multicolonna. - Comando di installazione:sql
CREATE EXTENSION btree_gist;
1
9. cube
- Funzionalità: implementa un nuovo tipo di dato per rappresentare punti o cubi n-dimensionali, corredato di operatori e funzioni specifiche.
- Utilizzo: ideale per la gestione e l’analisi di dati multidimensionali, come dati geografici semplici (punti 2D o 3D), analisi di data warehouse o computazioni scientifiche.
- Comando di installazione:sql
CREATE EXTENSION cube;
1
10. fuzzystrmatch
- Funzionalità: offre varie funzioni per determinare somiglianze o distanze tra stringhe, come Levenshtein, Soundex, Metaphone.
- Utilizzo: supporta la realizzazione di confronti fuzzy per stringhe, correzione errori di battitura, deduplicazione o data cleaning.
- Comando di installazione:sql
CREATE EXTENSION fuzzystrmatch;
1
11. plpgsql
- Funzionalità: il linguaggio procedurale interno di PostgreSQL, indispensabile per scrivere stored procedure, trigger e blocchi di codice anonimi.
- Utilizzo: consente di implementare logiche applicative articolate, automazioni e flussi di manipolazione dati direttamente lato server.
plpgsql
è preinstallato come linguaggio predefinito, ma è possibile verificarne la presenza o reinstallarlo conCREATE EXTENSION
. - Comando di installazione:sql
CREATE EXTENSION plpgsql;
1
12. tablefunc
- Funzionalità: fornisce funzioni per la trasformazione e la gestione di tabelle intere, con la famosa funzione
crosstab
. - Utilizzo: essenziale per query di tipo pivot (“tabella pivot”), trasponendo valori unici in colonne, particolarmente utile in reportistica e analisi dati.
- Comando di installazione:sql
CREATE EXTENSION tablefunc;
1
13. dblink
- Funzionalità: consente di collegare un database PostgreSQL a un altro e di eseguire query remote.
- Utilizzo: utile per scambiare dati o migrare informazioni tra differenti database senza gestire connessioni multiple a livello applicativo.
- Comando di installazione:sql
CREATE EXTENSION dblink;
1
14. postgres_fdw
- Funzionalità: offre un Foreign Data Wrapper per accedere e interrogare tabelle presenti su altri server PostgreSQL come fossero locali.
- Utilizzo: ideale per integrare dati tra database diversi e realizzare query federate tra sistemi, superando le possibilità di
dblink
e beneficiando di un’integrazione più avanzata e ottimizzata. - Comando di installazione:sql
CREATE EXTENSION postgres_fdw;
1
15. pgcrypto
- Funzionalità: implementa funzioni per crittografare e decrittografare dati, con supporto per hash, cifratura simmetrica e cifratura a chiave pubblica.
- Utilizzo: protegge dati sensibili, consente di memorizzare hash delle password, gestire firme digitali ed implementare sicurezza lato database.
- Comando di installazione:sql
CREATE EXTENSION pgcrypto;
1
Queste sono solo alcune delle estensioni ufficiali PostgreSQL preinstallate in ServBay. L'obiettivo di ServBay è includere la maggior parte delle estensioni ufficiali della community PostgreSQL, rispondendo così alle esigenze più disparate degli sviluppatori.
Come Installare e Utilizzare le Estensioni PostgreSQL in ServBay
Installare e utilizzare le estensioni PostgreSQL in ServBay è un processo semplice e diretto. Le estensioni vengono attivate su ogni singolo database, quindi è necessario abilitarle separatamente in ciascun database che le richiede.
Prerequisiti:
- Assicurati che ServBay sia in esecuzione e che il servizio PostgreSQL sia stato avviato.
Procedura operativa:
Connettiti al database PostgreSQL di destinazione:
Apri il terminale (ad esempio Terminale o iTerm2 su macOS) e utilizza il client da riga di comandopsql
per collegarti al database in cui vuoi installare l’estensione. Per impostazione predefinita, su ServBay sia l’utente che il database PostgreSQL si chiamanopostgres
.bashpsql -U your_username -d your_database
1Ad esempio, per connettersi al database predefinito
postgres
:bashpsql -U postgres -d postgres
1Se ti viene richiesta la password, inserisci quella impostata per l’utente root/postgres di PostgreSQL in ServBay.
Installa il modulo di estensione:
Una volta collegato, accedi all’interfacciapsql
ed esegui il comandoCREATE EXTENSION
per installare il modulo desiderato, sostituendomodule_name
con il nome dell’estensione.sqlCREATE EXTENSION module_name;
1Ad esempio, per installare l’estensione
pg_trgm
:sqlCREATE EXTENSION pg_trgm;
1Verifica l’installazione:
Dopo l’installazione, puoi controllare la lista delle estensioni installate sul database corrente con il comando\dx
per confermare che sia tutto andato a buon fine.sql\dx
1
Esempio: Abilitazione dell’estensione pg_trgm
Segue un esempio completo dell’interazione tramite riga di comando per connettersi al database postgres
e attivare l’estensione pg_trgm
:
# Esegui il seguente comando in terminale per collegarti al database
psql -U postgres -d postgres
# Una volta collegato, verrà mostrato il prompt del client psql
psql (16.3 (ServBay))
Type "help" for help.
postgres=# -- Visualizza le estensioni già installate (l’esempio mostra solo plpgsql e pgcrypto)
postgres=# \dx
List of installed extensions
Name | Version | Schema | Description
----------+---------+------------+------------------------------
pgcrypto | 1.3 | public | cryptographic functions
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(2 rows)
postgres=# -- Installa l’estensione pg_trgm
postgres=# CREATE EXTENSION pg_trgm;
CREATE EXTENSION
postgres=# -- Controlla di nuovo la lista per confermare che pg_trgm sia attiva
postgres=# \dx
List of installed extensions
Name | Version | Schema | Description
----------+---------+------------+-------------------------------------------------------------------
pg_trgm | 1.6 | public | text similarity measurement and index searching based on trigrams
pgcrypto | 1.3 | public | cryptographic functions
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(3 rows)
postgres=# -- Installazione completata, ora puoi usare le funzioni e gli operatori di pg_trgm in questo database
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Elenco delle Estensioni PostgreSQL Disponibili su ServBay
Prima di procedere con l’attivazione delle estensioni, può essere utile conoscere quali sono i moduli disponibili nella versione di PostgreSQL fornita da ServBay. Questo ti aiuterà a scoprire nuove funzionalità utili.
Dopo esserti collegato a un database PostgreSQL, puoi ottenere una lista completa delle estensioni dell’installazione con il seguente comando SQL:
SELECT * FROM pg_available_extensions ORDER BY name;
Questo comando restituirà una tabella con tutte le estensioni supportate dalla versione di PostgreSQL in ServBay, incluse nome, versione di default, stato di installazione e descrizione.
Un tipico risultato del comando (l’elenco può essere molto lungo e variare in base alla versione PostgreSQL integrata in ServBay) potrebbe essere:
name | default_version | installed_version | comment
------------------------------+-----------------+-------------------+---------------------------------------------------------------------------------------------------------------------
address_standardizer | 3.4.2 | | Used to parse an address into constituent elements. Generally used to support geocoding address normalization step.
address_standardizer_data_us | 3.4.2 | | Address Standardizer US dataset example
adminpack | 2.1 | | administrative functions for PostgreSQL
amcheck | 1.3 | | functions for verifying relation integrity
autoinc | 1.0 | | functions for autoincrementing fields
bloom | 1.0 | | bloom access method - signature file based index
btree_gin | 1.3 | | support for indexing common datatypes in GIN
btree_gist | 1.7 | | support for indexing common datatypes in GiST
citext | 1.6 | | data type for case-insensitive character strings
cube | 1.5 | | data type for multidimensional cubes
dblink | 1.2 | | connect to other PostgreSQL databases from within a database
dict_int | 1.0 | | text search dictionary template for integers
dict_xsyn | 1.0 | | text search dictionary template for extended synonym processing
earthdistance | 1.1 | | calculate great-circle distances on the surface of the Earth
file_fdw | 1.0 | | foreign-data wrapper for flat file access
fuzzystrmatch | 1.2 | | determine similarities and distance between strings
hstore | 1.8 | | data type for storing sets of (key, value) pairs
insert_username | 1.0 | | functions for tracking who changed a table
intagg | 1.1 | | integer aggregator and enumerator (obsolete)
intarray | 1.5 | | functions, operators, and index support for 1-D arrays of integers
isn | 1.2 | | data types for international product numbering standards
lo | 1.1 | | Large Object maintenance
ltree | 1.2 | | data type for hierarchical tree-like structures
moddatetime | 1.0 | | functions for tracking last modification time
old_snapshot | 1.0 | | utilities in support of old_snapshot_threshold
pageinspect | 1.12 | | inspect the contents of database pages at a low level
pg_buffercache | 1.4 | | examine the shared buffer cache
pg_freespacemap | 1.2 | | examine the free space map (FSM)
pg_jieba | 1.1.1 | | a parser for full-text search of Chinese
pg_prewarm | 1.2 | | prewarm relation data
pg_stat_statements | 1.10 | | track planning and execution statistics of all SQL statements executed
pg_surgery | 1.0 | | extension to perform surgery on a damaged relation
pg_trgm | 1.6 | 1.6 | text similarity measurement and index searching based on trigrams
pg_visibility | 1.2 | | examine the visibility map (VM) and page-level visibility info
pg_walinspect | 1.1 | | functions to inspect contents of PostgreSQL Write-Ahead Log
pgcrypto | 1.3 | 1.3 | cryptographic functions
pgrouting | 3.6.2 | | pgRouting Extension
pgrowlocks | 1.2 | | show row-level locking information
pgstattuple | 1.5 | | show tuple-level statistics
plpgsql | 1.0 | 1.0 | PL/pgSQL procedural language
postgis | 3.4.2 | | PostGIS geometry and geography spatial types and functions
postgis_sfcgal | 3.4.2 | | PostGIS SFCGAL functions
postgis_tiger_geocoder | 3.4.2 | | PostGIS tiger geocoder and reverse geocoder
postgres_fdw | 1.1 | | foreign-data wrapper for remote PostgreSQL servers
refint | 1.0 | | functions for implementing referential integrity (obsolete)
seg | 1.4 | | data type for representing line segments or floating-point intervals
sslinfo | 1.2 | | information about SSL certificates
tablefunc | 1.0 | | functions that manipulate whole tables, including crosstab
tcn | 1.0 | | Triggered change notifications
tsm_system_rows | 1.0 | | TABLESAMPLE method which accepts number of rows as a limit
tsm_system_time | 1.0 | | TABLESAMPLE method which accepts time in milliseconds as a limit
unaccent | 1.1 | | text search dictionary that removes accents
vector | 0.7.0 | | vector data type and ivfflat and hnsw access methods
xml2 | 1.1 | | XPath querying and XSLT
zhparser | 2.2 | | a parser for full-text search of Chinese
(55 rows)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Nota: la lista sopra è solo un esempio e potresti riscontrare estensioni e versioni diverse in base agli aggiornamenti di ServBay o PostgreSQL.
Conclusioni
ServBay, grazie al ricco set di estensioni ufficiali PostgreSQL preinstallate, rende molto più semplice sfruttare avanzate funzionalità del database in ambiente di sviluppo locale. Gli sviluppatori possono attivare le estensioni necessarie semplicemente tramite pochi comandi SQL senza la necessità di compilazione o installazione manuale, concentrandosi così sullo sviluppo applicativo e aumentando la propria efficienza. Grazie a queste estensioni è possibile potenziare il proprio progetto con funzionalità avanzate di analisi delle performance, ricerca full-text, sicurezza dei dati e molto altro ancora.