fp/services/migrations-data/index.js

68 lines
1.7 KiB
JavaScript

import pg from 'pg'
import { migrate } from 'postgres-schema-migrations';
import path, { dirname } from 'node:path';
import { fileURLToPath } from 'url';
import 'dotenv/config';
const { Client } = pg
const __dirname = dirname(fileURLToPath(import.meta.url));
if (!process.env.DATABASE_PASSWORD) throw new Error('DATABASE_PASSWORD is missing in env');
/*
* Here we set up a Foreign Data Wrapper which connects us to the old strapi database.
* From this Strapi db futureporn-old, we migrate data to futureporn database.
*/
async function setupForeignDataWrapper(client) {
// Run the SQL commands
const sql = `
BEGIN;
CREATE EXTENSION IF NOT EXISTS postgres_fdw;
CREATE SERVER IF NOT EXISTS futureporn_old
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname 'futureporn_old');
CREATE USER MAPPING IF NOT EXISTS FOR postgres
SERVER futureporn_old
OPTIONS (password_required 'true', password '${process.env.DATABASE_PASSWORD}');
COMMIT;
`;
await client.query(sql);
console.log('Foreign Data Wrapper setup completed successfully.');
}
async function main() {
const dbConfig = {
database: "futureporn",
user: "postgres",
password: process.env.DATABASE_PASSWORD,
host: 'postgresql-primary.futureporn.svc.cluster.local',
port: 5432,
}
const client = new Client(dbConfig)
await client.connect()
const migrateConfig = {
client,
ensureDatabaseExists: false,
defaultDatabase: 'postgres'
}
try {
await setupForeignDataWrapper(client)
await migrate(migrateConfig, path.join(__dirname, "./migrations/"), { logger: console.log, schema: 'migrations_data' })
} finally {
await client.end()
}
}
await main()