@tricoteuses/senat
Version:
Handle French Sénat's open data
65 lines (64 loc) • 2.21 kB
JavaScript
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);
});