UNPKG

@tricoteuses/senat

Version:

Handle French Sénat's open data

65 lines (64 loc) 2.21 kB
import commandLineArgs from 'command-line-args'; import { execSync } from 'child_process'; import assert from 'assert'; import { getTables } from '../model'; import { datasets } from '../datasets'; import config from '../config'; const optionsDefinitions = [ { help: 'move database tables to public schema', name: 'updateSchema', type: Boolean, }, { alias: 's', help: 'don\'t log anything', name: 'silent', type: Boolean, }, { alias: "v", help: "verbose logs", name: "verbose", type: Boolean, }, ]; const options = commandLineArgs(optionsDefinitions); async function fixDatabase() { process.env = { ...process.env, PGHOST: process.env.PGHOST || config.db.host, PGPORT: process.env.PGPORT || config.db.port, PGUSER: process.env.PGUSER || config.db.user, PGPASSWORD: process.env.PGPASSWORD || config.db.password }; assert(process.env.PGHOST && process.env.PGPORT && process.env.PGUSER && process.env.PGPASSWORD, 'Missing database configuration: environment variables PGHOST, PGPORT, PGUSER and PGPASSWORD or TRICOTEUSES_SENAT_DB_* in .env file'); const choosenDatasets = [datasets.questions]; for (const dataset of choosenDatasets) { if (!options.silent) { console.log(`Fixing database ${dataset.database}…`); } if (options.updateSchema && dataset.schema != "public") { const tables = await getTables(dataset.database, dataset.schema); for (const table of tables) { if (!options.silent) { console.log(`Move table ${table} from schema "${dataset.schema}" to "public"…`); } execSync(`psql -d ${dataset.database} -c "ALTER TABLE ${dataset.schema}.${table} SET SCHEMA public"`, { env: process.env, encoding: 'utf-8', // stdio: ["ignore", "ignore", "pipe"], }); } } } } fixDatabase() .then(() => process.exit(0)) .catch((error) => { console.log(error); process.exit(1); });