@tricoteuses/senat
Version:
Handle French Sénat's open data
76 lines (69 loc) • 2.05 kB
text/typescript
import commandLineArgs from 'command-line-args'
import { execSync } from 'child_process'
import assert from 'assert'
import { getTables } from '../model'
import { Dataset, 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: Dataset[] = [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)
})