Mi sugerencia sobre el archivo:  
- Crear archive_tablespace(si lo desea, puede separar el hardware en el archivo)
- Crea tablas. Por ejemplo, queremos archivar las publicaciones de la tabla.      - create table  posts_all ( LIKE public.posts)  ;
create table  posts_archive () inherits  ( public.posts_all)  ;
alter table  public.posts  inherits ( public.posts_all ) ;
 - Después de eso tendremos 2 nuevas tablas: public.posts_all (con las mismas columnas que en las publicaciones) para consultar todas las publicaciones (archivo y producción) y public.posts_archive para consultar todas las publicaciones de archivo. Public.posts heredará de posts_all. 
 Las inserciones deben ir de una manera antigua (a la tabla public.posts) a menos que escriba disparadores en posts_all para redirigir las inserciones a la tabla de publicaciones. Si tiene particiones, será más complicado. Con la aplicación en funcionamiento y antes de la migración de datos anterior, no tiene que cambiar nada en el código de la aplicación para trabajar con este enfoque.
 
- Cree un archivo de esquema para la separación lógica. Mi sugerencia será separar los datos de archivo por algún período de tiempo (año o mes) si es posible (archive_2005).   
- Crear tablas de archivo en el esquema archive_year - create table archive_2005.posts (
  check(record_date >= '2005-01-01 00:00:00'::timestamp 
    and record_date <  '2006-01-01 00:00:00'::timestamp)
) inherits (posts_archive) tablespace archive_tablesapce;
 - Después de eso, tendrá nuevas publicaciones en la tabla en el esquema archive_2005 y postgresql planer sabrá que los datos solo están en el período de tiempo diseñado. Si realiza una consulta por otro período de tiempo, postgresql no buscará en esta tabla. 
- Cree funciones / procedimientos / disparadores para mover datos a tablas de archivo. 
- Archive una vez por un período de tiempo (año aquí) y aspire la tabla antigua o hágalo automáticamente por disparadores (más pesado en autovacuum). Hay muchas ventajas y desventajas en ambas técnicas.  
Si se implementa:  
- Puede consultar el archivo (seleccione * de posts_archive), todos (seleccione * de posts_all) y los datos de producción (seleccione * de public.posts) por separado   
- Puede volcar esquemas de archivo por separado y soltarlos en cascada de manera fácil. pg_dump -s archive_2005 datase_name drop schema archive_2005 cascade; - tenga cuidado porque elimina todas las tablas relacionadas
- Datos antiguos separados físicamente por tablespace y lógicamente por esquema.  
- Estructura bastante complicada para gestionar el proceso de archivo  
- Puede crear diferentes índices en las tablas de producción y archivo para optimizar las consultas a ambos (índices más pequeños y especializados = consultas más rápidas y menos espacio requerido)  
- Si tiene tablas particionadas (por año o mes), el proceso de archivo será solo para mover la tabla completa archive_tablespaceo simplemente alterarla para heredar de posts_archive (no probé esto)
- Si no desea acceder a datos antiguos (archivados), no tiene que cambiar nada en la aplicación. 
Esta es una técnica general y debe adaptarla a sus necesidades. ¿Alguna sugerencia para mejorar esto?
Lectura adicional: herencia de PostgreSQL , particionamiento
                 
                
                
                
        
     
Create tables (table posts example):. ¿Puede explicar ese paso específico sobre cuántas tablas hay en total y cómo se relacionan la herencia entre tablas?posts,posts-alloposts-archive), que existe sólo para representar a todo el conjunto de datos?