Documentazione di PostgreSQL 9.0 > Amministrazione del server > Gestire un database > Tablespace
PrecedenteDistruggere un DatabaseLocalizationSuccessivo

21.6. Tablespace

I tablespace in PostgreSQL™ permettono agli amministratori di database di definire posizioni nel file system dove possono essere immagazzinati file che rappresentano gli oggetti del database. Una volta creato, si si può riferire a un un tablespace attraverso il suo nome quando si creano oggetti del database.

Usando i tablespace, un amministratore può controllare il layout del disco di un'installazione di PostgreSQL™. Questo è utile in almeno due casi. Primo, se la partizione o il volume sul quale è stato inizializzato il cluster eccede lo spazio disponibile e non può essere esteso, può essere creato un tablespace su una partizione differente e usato finchè il sistema non viene riconfigurato.

Secondo, i tablespace permettono ad un amministratore di usare la conoscenza del modello di utilizzo degli oggetti del database per ottimizzare le prestazioni. Per esempio, un indice che è usato pesantemente può essere posizionato su un disco molto veloce, altamente disponibile, tipo un apparecchio costoso a stato solido. Allo stesso tempo una tabella che immagazzina dati archiviati che è usata raramente o non ha problemi di prestazioni potrebbe essere immagazzinata su un disco meno costoso e più lento.

Per definire un tablespace, usare il comando CREATE TABLESPACE(7), per esempio: :

CREATE TABLESPACE fastspace LOCATION '/mnt/sda1/postgresql/data';

La posizione deve essere una directory vuota esistente in possesso dall'utente PostgreSQL™ del sistema operativo. Tutti gli oggetti creati successivamente all'interno del tablespace saranno immagazzinati in file sottostanti questa directory.

[Nota]

Nota

Di solito non è molto vantaggioso fare più di un tablespace per file system logico, dato che non si può controllare la posizione di file individuali all'interno di un file system logico. Comunque, PostgreSQL™ non forza nessun tipo di limitazione, e effettivamente non è direttamente consapevole dei limiti del file system del sistema. Semplicemente immagazzina file nelle directory che gli si dice di usare.

La creazione del tablespace stesso dev'essere fatta come superutente del database, ma dopo è possibile permettere agli utenti normali del database di usarlo. Per fare ciò, condcedergli il privilegio CREATE su di lui.

Tabelle, indici e interi database possono essere assegnati a tablespace particolari. Per fare ciò, un utente con il privilegio CREATE su un dato tablespace deve passare il nome del tablespace come parametro del comando pertinente. Per esempio, il seguente comando crea una tabella nel tablespace space1:

CREATE TABLE foo(i int) TABLESPACE space1;

Alternativamente, usare il parametro default_tablespace:

SET default_tablespace = space1;
CREATE TABLE foo(i int);

Quando default_tablespace è impostato a qualsiasi cosa non sia una una stringa vuota, fornise un implicita clausola TABLESPACE per i comandi CREATE TABLE e CREATE INDEX che non ne hanno una esplicita.

C'è anche un parametro temp_tablespaces, che determina il posizionamento di tabelle temporanee e indici, così come file temporanei che sono usati per scopi tipo l'ordinamento di grandi insiemi di dati. Questo può essere un elenco di nomi di tablespace, piuttosto che uno solo, così che il caricamento associato ad oggetti temporanei che possono essere divisi su molteplici tablespace. Un membro casuale dell'elenco è scelto ogni volta che viene creato che un oggetto temporaneo.

Il tablespace associato ad un database viene usato per immagazzinare i cataloghi di quel database. Inoltre, è il tablespace predefinito usato per le tabelle, gli indici e i file temporanei creati all'interno del database, se nessuna clausola TABLESPACE è fornita e nessuna altra selezione è specificata da default_tablespace o temp_tablespaces (come appropriato). Se un database viene creato senza specificare un tablespace, usa lo stesso tablespace del database template da cui viene copiato.

Due tablespace sono creati automaticamente quando il cluster di database viene inizializzato. Il tablespace pg_global è usato per cataloghi di sistema condivisi. Il tablespace pg_default è il tablespace predefinito dei dtabase template1 e template0 (e, inoltre, sarà quello predefinito anche per altri database, a meno che non si sovrascriva con una clausola TABLESPACE in CREATE DATABASE).

Una volta creato, un tablespace può essere usato da qualsiasi database, purchè l'utente abbia sufficienti privilegi. Questo significa che un tablespace non può essere eliminato finchè gli oggetti (di tutti i database) che usano quel tablespace sono stati rimossi.

Per rimuovere un tablespace vuoto, usare il comando DROP TABLESPACE(7).

Per determinare l'insieme di tablesapce esistenti, esaminare il catalogo di sistema pg_tablespace, per esempio

SELECT spcname FROM pg_tablespace;

Il meta comando di psql(1) \db è utile anche per elencare i tablespace.

PostgreSQL™ utilizza i link simbolici per semplificare l'implementazione dei tablespace. Questo significa che i tablespace possono essere usati solo su sistemi che supportano i link simbolici.

La directory $PGDATA/pg_tblspc contiene link simbolici che puntano ad ogni tablespace non predefinito del cluster. Anche se non è raccomandato, è possibile aggiustare il layout dei tablespace a mano ridefinendo questi link. Due avvertimenti: non fare questo mentre il server è in esecuzione; e dopo che si è riavviato il server, aggiornare il catalogo pg_tablespace con le nuove posizioni. (Se non lo si fa, pg_dump continuerà a mostrare in output le vecchie posizioni dei tablespace).

Documentazione di PostgreSQL 9.0 > Amministrazione del server > Gestire un database > Tablespace
PrecedenteDistruggere un DatabaseLocalizationSuccessivo