Documentazione di PostgreSQL 9.0 > Amministrazione del server > Gestire un database > Database template
PrecedenteCreare un databaseConfigurazione del databaseSuccessivo

21.3. Database template

CREATE DATABASE funziona effettivamente copiando un database esistente. In maniera predefinita, copia il database standard di sistema chiamato template1. Così quel database è il «modello» dal quale i nuovi database sono creati. Se si aggiungono oggetti a template1, questi oggetti saranno copiati nei database creati successivamente. Questo comportamento permette modifiche locali al sito all'insieme degli oggetti standard nei database. Per esempio, se si installa il linguaggio procedurale PL/Perl in template1, sarà disponibile automaticamente nei database degli utenti senza che venga fatta nessuna azione aggiuntiva quandi questi database vengono creati.

C'è un secono database standard di sistema chiamato template0. Questo database contiene gli stessi dati iniziali di template1, cioè, solo gli oggetti standard predefiniti dalla versione di PostgreSQL™. template0 non dovrebbe mai essere cambiato dopo che il cluster di database è stato inizializzato. Istruendo CREATE DATABASE a copiare da template0 invece che da template1, si può creare un utente del database «vergine» che non contiene le aggiunte fate localmente al sito in template1. Questo è particolarmente utile quando si sta ripristinando un dump pg_dump: lo script di dump dovrebbe essere ripristinato in un database vergine per assicurarsi che ricrei i contenuti corretti del database sottoposto a dump, senza avere conflitti con oggetti che potrebbero essere stati aggiunti a template1 più tardi.

Un'altra ragione comune per copiare da template0 invece che da template1 è che nuove impostazioni di codifica e localizzazione possono essere specificare quando si copia template0, mentre una copia do template1 deve usare gli stessi settaggi. Questo perchè template1 potrebbe contenere dati specifici della codifica o della localizzazione, mentre template0 non lo fa.

Per creare un database copiando da template0, usare:

CREATE DATABASE dbname TEMPLATE template0;

dall'ambiente SQL, o:

createdb -T template0 dbname

dalla shell.

È possibile creare database template aggiuntivi, ed è effettivamente possibile copiare qualsiasi database in un cluster specificando il suo nome come il template per CREATE DATABASE. È importante capire, comunque, che questo non è (ancora) inteso come una funzione «COPY DATABASE» di scopo generale. La limitazione principale è che non possono essere connesse altre sessioni al database sorgente mentre sta avvenendo la copia. CREATE DATABASE fallirà se qualsiasi altra connessione esiste quando comincia; durante l'operazione di copia, le nuove connessioni al database sorgente sono impedite.

Ci sono due utili flag in pg_database per ogni database: le colonne datistemplate e datallowconn. datistemplate può esssere impostata per indicare che un database viene considerato come un template per CREATE DATABASE. Se questo flag è impostato, il database può essere clonato da qualsiasi utente con privilegi CREATEDB; se non è impostato, solo i superutenti e il proprietario del database può clonarlo. Se datallowconn è false, allora non viene permessa nessuna nuova connessione al database (ma le sessioni già esistenti non vengono terminate semplicemente impostando questo flag a false). Il database template0 è normalmente contrassegnato da datallowconn = false per prevenire la sua modifica. Sia template0 che template1 dovrebbero essere sempre contrassegnati con datistemplate = true.

[Nota]

Nota

template1 e template0 non hanno nessuno stato speciale a parte il fatto che il nome template1 è il nome predefinito per il database sorgente per CREATE DATABASE. Per esempio, si potrebbe eliminare template1 e ricrearlo da template0 senza nessun effetto negativo. Comportarsi in questo modo potrebbe essere consigliabile se qualcuno ha aggiunto imprudentemente della "robaccia" a template1. (Per cancellare template1, deve avere pg_database.datistemplate = false).

Quando un cluster viene inizializzato viene anche creato il database postgres. Questo database è intesi come database predefinito per le connessione di utenti e applicazioni. È semplicemente una una copia di template1 e può essere eliminato e ricreato se necessario.

Documentazione di PostgreSQL 9.0 > Amministrazione del server > Gestire un database > Database template
PrecedenteCreare un databaseConfigurazione del databaseSuccessivo