Después de este comentario a una de mis preguntas, estoy pensando si es mejor usar una base de datos con esquemas X o viceversa.
Mi situación: estoy desarrollando una aplicación web donde, cuando las personas se registran, creo (en realidad) una base de datos (no, no es una red social: todos deben tener acceso a sus propios datos y nunca ver los datos del otro usuario) .
Esa es la forma en que utilicé la versión anterior de mi aplicación (que todavía se ejecuta en MySQL): a través de la API de Plesk, para cada registro, hago:
- Crear un usuario de base de datos con privilegios limitados;
- Cree una base de datos a la que pueda acceder solo el usuario creado anteriormente y el superusuario (para mantenimiento)
- Poblar la base de datos
Ahora, tendré que hacer lo mismo con PostgreSQL (el proyecto está madurando y MySQL ... no cumple con todas las necesidades).
Necesito tener todas las copias de seguridad de bases de datos / esquemas independientes: pg_dump funciona perfectamente en ambos sentidos, y lo mismo para los usuarios que se pueden configurar para acceder a un solo esquema o una base de datos.
Entonces, suponiendo que son usuarios de PostgreSQL más experimentados que yo, ¿cuál creen que es la mejor solución para mi situación y por qué?
¿Habrá diferencias de rendimiento con la base de datos $ x en lugar de los esquemas $ x? ¿Y qué solución será mejor mantener en el futuro (confiabilidad)?
Todas mis bases de datos / esquemas siempre tendrán la misma estructura!
Para el problema de las copias de seguridad (usando pg_dump), tal vez sea mejor usar una base de datos y muchos esquemas, volcar todos los esquemas a la vez: recuperar será bastante simple cargar el volcado principal en una máquina de desarrollo y luego volcar y restaurar solo el esquema necesario: allí es un paso adicional, pero eliminar todo el esquema parece más rápido que hacerlo uno por uno.
ACTUALIZACIÓN 2012
Bueno, la estructura y el diseño de la aplicación cambiaron mucho durante los últimos dos años. Todavía estoy usando el one db with many schemas
enfoque, pero aún así, tengo una base de datos para cada versión de mi aplicación:
Db myapp_01
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Db myapp_02
\_ my_customer_foo_schema
\_ my_customer_bar_schema
Para las copias de seguridad, estoy volcando cada base de datos regularmente y luego moviendo las copias de seguridad en el servidor de desarrollo.
También estoy usando la copia de seguridad PITR / WAL pero, como dije antes, no es probable que tenga que restaurar toda la base de datos de de una vez ... por lo que probablemente se descarte este año (en mi situación no es el mejor enfoque )
El enfoque one-db-many-schema funcionó muy bien para mí desde ahora, incluso si la estructura de la aplicación cambia totalmente:
Casi se me olvida: ¡todas mis bases de datos / esquemas siempre tendrán la misma estructura!
... ahora, cada esquema tiene su propia estructura que cambia dinámicamente reaccionando al flujo de datos de los usuarios.