Digamos que tengo una tabla Pago con las siguientes columnas
payment_id - UUID amount - Numeric order_id - Unique VARCHAR psp_order_id - Third Party Unique Order Id created by Payment Service Provider psp_payment_id -Third Party Unique Payment Id created by Payment Service Provider created_at - payment created at ended_at - payment ended atAhora hay un requisito para integrar una nueva PSP. Pero dado que la tabla de pagos está estrechamente ligada a una PSP, me gustaría mover psp_order_id, psp_payment_id a otra tabla, por ejemplo: razorpay_payment_details.
Entonces el esquema resultante podría ser:
Tabla de pagos
payment_id - UUID amount - Numeric order_id - Unique VARCHAR created_at - payment created at ended_at - payment ended atrazorpay_pago_detalles
id - UUID (Primary Key) psp_order_id (Unique String) psp_payment_id (Unique String) payment_id (Foreign Key which relates Payment Entity to razorpay_payment_details entity)¿Cómo se debe cambiar el esquema y migrar los datos de producción existentes a la nueva tabla?
Tecnologías utilizadas - Spring Boot, PostgreSQL PD: No administro migraciones de bases de datos usando Flyway/Liquibase.
Por lo general, crearía la nueva tabla ( razorpay_payment_details ) y luego copiaría las filas/columnas relevantes de la tabla original ( payment ) con una consulta de insert ... select .
insert into razorpay_payment_details(psp_order_id, psp_payment_id, payment_id) select psp_order_id, psp_payment_id, payment_id from payment; La columna de id debe ser una columna generada automáticamente (como una columna serial ), por lo que la dejé aparte en la consulta.
A continuación, puede continuar con la validación de los resultados. Finalmente, puede eliminar las columnas de la tabla original.
alter table payment drop column psp_order_id, drop column psp_payment_id;Tus pasos con la consulta serán así:
Cree su tabla razorpay_payment_details primero:
create table razorpay_payment_details( id uuid DEFAULT uuid_generate_v4 (), psp_order_id varchar(100), psp_payment_id varchar(100), payment_id uuid, primary key(id), constraint fk_paymentid foreign key(payment_id) references payment(payment_id) ) Migre sus datos de la tabla de payment a la nueva tabla razorpay_payment_details utilizando la siguiente consulta:
insert into razorpay_payment_details (psp_order_id, psp_payment_id, payment_id) select psp_order_id, psp_payment_id, payment_id from payment Después de completar la migración y la verificación de los datos, puede ejecutar la siguiente consulta para modificar la tabla de payment :
alter table payment drop column psp_order_id , drop column psp_payment_id;No olvides hacer una copia de seguridad antes de esta actividad.