Dopo questo commento a una delle mie domande, sto pensando se è meglio usare un database con schemi X o viceversa.
La mia situazione: sto sviluppando un'applicazione web in cui, quando le persone si registrano, creo (in realtà) un database (no, non è un social network: tutti devono avere accesso ai propri dati e non vedere mai i dati dell'altro utente) .
È così che ho usato per la versione precedente della mia applicazione (che è ancora in esecuzione su MySQL): attraverso l'API di Plesk, per ogni registrazione, faccio:
- Creare un utente del database con privilegi limitati;
- Creare un database a cui è possibile accedere solo dall'utente creato in precedenza e dal superutente (per manutenzione)
- Popolare il database
Ora, dovrò fare lo stesso con PostgreSQL (il progetto sta diventando maturo e MySQL ... non soddisfa tutte le esigenze).
Devo avere tutti i backup di database / schemi indipendenti: pg_dump funziona perfettamente in entrambi i modi e lo stesso per gli utenti che possono essere configurati per accedere a un solo schema o un database.
Quindi, supponendo che tu sia un utente PostgreSQL più esperto di me, quale pensi sia la migliore soluzione per la mia situazione e perché?
Ci saranno differenze di prestazioni usando il database $ x anziché gli schemi $ x? E quale soluzione sarà meglio mantenere in futuro (affidabilità)?
Tutti i miei database / schemi avranno sempre la stessa struttura!
Per il problema dei backup (usando pg_dump), forse è meglio usare un database e molti schemi, scaricando tutti gli schemi in una volta: il ripristino sarà abbastanza semplice caricare il dump principale in una macchina di sviluppo e quindi scaricare e ripristinare solo lo schema necessario: lì è un ulteriore passaggio, ma il dumping di tutti gli schemi sembra più rapido rispetto al dumping uno per uno.
AGGIORNAMENTO 2012
Bene, la struttura e il design dell'applicazione sono cambiati molto negli ultimi due anni. Sto ancora usando l' one db with many schemas
approccio, ma ho ancora un database per ogni versione della mia applicazione:
Db myapp_01
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Db myapp_02
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Per i backup, eseguo il dump periodico di ciascun database e quindi lo spostamento dei backup sul server di sviluppo.
Sto anche usando il backup PITR / WAL ma, come ho detto prima, non è probabile che dovrò ripristinare tutto il database in una volta ... quindi probabilmente verrà chiuso quest'anno (nella mia situazione non è l'approccio migliore ).
L'approccio one-db-many-schema ha funzionato molto bene per me da ora, anche se la struttura dell'applicazione è totalmente cambiata:
Ho quasi dimenticato: tutti i miei database / schemi avranno sempre la stessa struttura!
... ora, ogni schema ha una propria struttura che cambia in modo dinamico reagendo al flusso di dati degli utenti.