Migración de tablas en PostgreSQL

Hola a tod@s, hoy vamos a ver cómo realizar una migración de las tablas en PostgreSQL.

Para poder realizar dicha migración tenemos que tener un usuario con los suficientes permisos para realizar la copia de las tablas.

Script de creación y generación de la tabla

Sacamos el script de creación de la tabla que queremos migrar del servidor de origen. Utilizamos la siguiente query:

pg_dump -d cdr_pro -s -t table1

Nos generará un código parecido al siguiente:

CREATE TABLE test.table1 (
    id int NOT NULL,
    datecolumn timestamp NOT NULL
);

ALTER TABLE test.table1 OWNER TO user1;

GRANT SELECT ON TABLE test.table1 TO user1;

Nos vamos al servidor destino y creamos la tabla a partir del código que hemos sacado en el servidor de origen.

Migración de tablas

Generamos los archivos .csv en el servidor origen para la migración de tablas

Sobre «server1» (ORIGEN)

COPY (SELECT * FROM table1 WHERE timecolumn >= '2023-01-01 00:00:00' and timecolumn < '2023-09-01 00:00:00'TO '/Migration/table1_2023.csv' DELIMITER ';' CSV HEADER;

En la query anterior el archivo que generamos engloba las filas desde el 1 de enero de 2023 hasta los resultados de antes del 1 de septiembre de 2023. Es importante tener en cuenta cual es la columna que tiene como referencia del tiempo para poder migrar el lapso de tiempo que nos interesa, para averiguar cual es la columna que nos indica la fecha podemos realizar la siguente query dentro de nuestro postgres:

\d+ table1;
user1=# \d+ test.table1;
                                                            Tabla particionada «test.table1»
      Columna       |            Tipo             | Ordenamiento | Nulable  |                     Por omisión                      | Almacenamiento | Estadísticas | Descripción
--------------------+-----------------------------+--------------+----------+------------------------------------------------------+----------------+--------------+-------------
 id                 | integer                     |              | not null | 													   | plain          |              |
 datecolumn         | timestamp 				  |              | not null |                                                      | plain          |              |
Llave de partición: RANGE (datecolumn)
Particiones: table1_p2023_01 FOR VALUES FROM ('2023-01-01 00:00:00') TO ('2023-02-01 00:00:00'),
             table1_p2023_02 FOR VALUES FROM ('2023-02-01 00:00:00') TO ('2023-03-01 00:00:00'),
             table1_p2023_03 FOR VALUES FROM ('2023-03-01 00:00:00') TO ('2023-04-01 00:00:00'),
             table1_p2023_04 FOR VALUES FROM ('2023-04-01 00:00:00') TO ('2023-05-01 00:00:00'),
             table1_p2023_05 FOR VALUES FROM ('2023-05-01 00:00:00') TO ('2023-06-01 00:00:00'),
             table1_p2023_06 FOR VALUES FROM ('2023-06-01 00:00:00') TO ('2023-07-01 00:00:00'),
             table1_p2023_07 FOR VALUES FROM ('2023-07-01 00:00:00') TO ('2023-08-01 00:00:00'),
             table1_p2023_08 FOR VALUES FROM ('2023-08-01 00:00:00') TO ('2023-09-01 00:00:00'),
             table1_p2023_09 FOR VALUES FROM ('2023-09-01 00:00:00') TO ('2023-10-01 00:00:00'),
             table1_p2023_10 FOR VALUES FROM ('2023-10-01 00:00:00') TO ('2023-11-01 00:00:00'),
             table1_p2023_11 FOR VALUES FROM ('2023-11-01 00:00:00') TO ('2023-12-01 00:00:00'),

En Llave de partición: RANGE (datecolumn) podemos ver cual es la columna que debemos utilizar para nuestras queries y elegir el rango de fechas que consideremos.

Copiamos los archivos generados en el anterior paso sobre el servidor de destino.

Sobre «server2» (DESTINO)

COPY test1 FROM '/Migration/table1_2023.csv' DELIMITER ';' CSV HEADER;

Añadimos los parámetros “DELIMITER ‘;’” y “CSV HEADER” para que al generar el .csv tenga como delimitador “;” y tenga en cuenta que la primera fila es el nombre de las columnas.

Comprobación de los datos de la migración de tablas

Para poder comprobar que la copia se ha realizado correctamente una forma que podemos utilizar es un simple «count».

SELECT count (*) FROM test1 WHERE timecolumn >= '2023-01-01 00:00:00' and timecolumn < '2023-09-01 00:00:00';

Para mayor facilidad a la hora de realizar los pasos lo recomendable es utilizar una unidad compartida para poder acceder desde ambos servidores y así sea directa la trasladación de los archivos.

 Si quieres que te ayudemos con la gestión y mantenimiento del servidor, o chequeemos tu migración para ver si se ha realizado de forma correcta. Estamos a tu disposición en nuestra página de contacto sin compromiso alguno. Somos expertos en PostgreSQL.

¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.

Sígue a GPS en LinkedIn

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *