PostgreSQL guarda totes les dades dins del directori PGDATA. Tot i així, permet repartir els objectes
en altres ubicacions del disc mitjançant tablespaces, per exemple, per aprofitar un disc més ràpid
o amb més capacitat.
En aquests apunts es veu, en primer lloc, com es gestionen els tablespaces i, després,
com s'assignen a les bases de dades i als objectes que contenen.
Un tablespace en PostgreSQL és simplement un directori del sistema de fitxers
on es guarden els fitxers dels objectes que s'hi assignen. No cal definir fitxers de dades
ni mides inicials o màximes: la mida creix segons l'espai disponible al sistema de fitxers.
Un tablespace es pot eliminar amb DROP TABLESPACE, sempre que no continga cap objecte.
Per tant, abans cal moure o eliminar els objectes que conté i canviar el tablespace per defecte
de les bases de dades que l'utilitzen:
Un servidor (clúster) PostgreSQL pot allotjar múltiples bases de dades independents,
cadascuna amb el seu propi conjunt d'esquemes, taules i permisos.
Cada base de dades és totalment independent: no es poden fer consultes entre bases de dades
diferents del mateix clúster sense mecanismes addicionals (com dblink o foreign data wrappers).
Cada base de dades té un tablespace per defecte, on es guarden els objectes que s'hi creen
sense indicar cap tablespace. Si no s'indica res, és pg_default, és a dir, el directori PGDATA.
Una base de dades nova es crea a partir d'una plantilla. En l'exemple següent, es crea
la base de dades vendes_db a partir de template0, amb la codificació UTF-8 i amb vendes
com a tablespace per defecte:
Canvi del tablespace per defecte (ALTER DATABASE)¶
Per canviar el tablespace per defecte d'una base de dades existent, s'utilitza
ALTER DATABASE ... SET TABLESPACE. Aquesta ordre mou físicament tots els objectes que estaven
en l'antic tablespace per defecte al nou:
ALTERDATABASEvendes_dbSETTABLESPACEpg_default;
Ningú pot estar connectat a la base de dades mentre se'n canvia el tablespace per defecte, ni tan sols la sessió que executa l'ordre.
Per això, cal executar ALTER DATABASE connectat a una altra base de dades, com postgres.
El paràmetre default_tablespace té prioritat sobre el tablespace per defecte de la base de dades.
Aquest paràmetre es pot definir per sessió (SET default_tablespace = vendes;) o per base de dades
(ALTER DATABASE vendes_db SET default_tablespace = vendes;). A diferència de
ALTER DATABASE ... SET TABLESPACE, només afecta els objectes nous i no en mou cap d'existent.
Encara que una base de dades tinga un tablespace per defecte, cada taula o índex es pot guardar
en un tablespace diferent. Això permet, per exemple, posar els índexs en un disc més ràpid
que les dades.