Files
Compass/backend/scripts/restore_data_column.ts

43 lines
1.2 KiB
TypeScript

import {runScript} from './run-script'
import {log} from 'shared/monitoring/log'
import {chunk} from 'lodash'
import {Client} from 'pg'
runScript(async ({pg}) => {
// Connect to local Supabase emulator
const localClient = new Client({
host: '127.0.0.1',
port: 54322,
user: 'postgres',
password: 'postgres',
database: 'postgres',
})
await localClient.connect()
log('Connected to local emulator')
// Read all user data from the backup
let {rows} = await localClient.query<{id: string; data: object}>(`SELECT id, data FROM users`)
await localClient.end()
// rows = rows.slice(0, 5)
// log(rows)
log(`Found ${rows.length} users in backup`)
// Update remote in batches
let count = 0
for (const batch of chunk(rows, 100)) {
await pg.none(
`UPDATE users AS target
SET data = v.data::jsonb
FROM (VALUES ${batch.map((_, i) => `($${i * 2 + 1}, $${i * 2 + 2})`).join(', ')})
AS v(id, data)
WHERE target.id = v.id`,
batch.flatMap((r) => [r.id, JSON.stringify(r.data)]),
)
log(`Restored data for ${(count += batch.length)} / ${rows.length} users`)
}
log('Done restoring data column from backup')
})