Remove select-builder-pgsql dependency from export-schema.js

master
Vitaliy Filippov 2020-09-07 18:47:39 +03:00
parent 809ddfad04
commit b98797ed49
2 changed files with 24 additions and 21 deletions

View File

@ -1,24 +1,28 @@
// Экспорт схемы PostgreSQL БД в HTML, GraphViz, SQL
// Упоротые случаи не покрывает, только вменяемые
// (c) Vitaliy Filippov 2019+
// Версия: 2020-04-29
// Версия: 2020-09-07
// Установить модуль pg: npm install pg
// Создать config.json формата:
// { db: { host, database, user, password, port }, skip_tables?: RegExp, skip_triggers?: RegExp, skip_functions?: RegExp }
// HTML:
// nodejs export-schema.js config.json html > schema.html
// В docx потом можно перегнать так (open/libreoffice):
// soffice --headless --infilter=writerglobal8_HTML --convert-to docx:"MS Word 2007 XML" --outdir . schema.html
// soffice --headless --infilter=writerglobal8_HTML --convert-to docx:"MS Word 2007 XML" --outdir . schema.html
// Graphviz:
// nodejs export-schema.js server-config.json dot > schema.dot
// nodejs export-schema.js config.json dot > schema.dot
// Потом перегнать в SVG:
// dot -Tsvg schema.dot
// SQL (воссоздать начальные определения таблиц, индексов, триггеров, функций и агрегатов без pg_dump-ного мусора):
// nodejs export-schema.js server-config.json sql <DIRECTORY>
// server-config.json:
// { db: { host, database, user, password, port }, skip_tables?: RegExp, skip_triggers?: RegExp, skip_functions?: RegExp }
// nodejs export-schema.js config.json sql <DIRECTORY>
const fsp = require('fs').promises || require('../lib/fsp.js');
const SQL = require('../lib/select-builder-pgsql.js');
const pg = require('pg');
const columninfo = (ver) => `select distinct on (c.relname, a.attnum, a.attname, a.attnotnull, t.typname)
c.relname as table,
@ -107,15 +111,16 @@ where n.nspname = 'public'`;
async function run()
{
const config = JSON.parse(await fsp.readFile(process.argv[2] || '../server-config.json', { encoding: 'utf-8' }));
const config = JSON.parse(await fsp.readFile(process.argv[2] || '../config.json', { encoding: 'utf-8' }));
const format = process.argv[3] || 'html';
const dbh = new SQL.Connection(config.db);
const pg_ver = await dbh.select('show server_version_num', SQL.MS_VALUE);
const columns = await dbh.select(columninfo(pg_ver), SQL.MS_HASH);
let indexes = await dbh.select(indexinfo, SQL.MS_HASH);
const triggers = await dbh.select(triggerinfo, SQL.MS_HASH);
const funcs = await dbh.select(funcinfo(pg_ver), SQL.MS_HASH);
const aggs = await dbh.select(agginfo, SQL.MS_HASH);
const dbh = new pg.Client(config.db);
await dbh.connect();
const pg_ver = (await dbh.query('show server_version_num')).rows[0]['server_version_num'];
const columns = (await dbh.query(columninfo(pg_ver))).rows;
let indexes = (await dbh.query(indexinfo)).rows;
const triggers = (await dbh.query(triggerinfo)).rows;
const funcs = (await dbh.query(funcinfo(pg_ver))).rows;
const aggs = (await dbh.query(agginfo)).rows;
const tables = {};
let skip = config.skip_tables && new RegExp(config.skip_tables, 'i');
for (const col of columns)

View File

@ -7,11 +7,9 @@
"name": "mw-select-builder",
"description": "MediaWiki-like select builder",
"dependencies": {
"pg": "^7.9.0",
"pg": "^7.18.2",
"pg-escape": "^0.2.0"
},
"devDependencies": {
},
"scripts": {
}
"devDependencies": {},
"scripts": {}
}