У меня есть один запущенный веб-сервис A с postgres, и у меня также есть другой запущенный сервис node.js B, который копирует данные postgres из сервиса A. Некоторые люди предлагают использовать миграцию базы данных, но вот две причины, по которым я могу это сделать 'сделать это.
1. Zero Downtime for the web service A, so I can't do any migration on postgres on service A.
2. postgres database have tens of Gigabytes data, migration process might eat up my CPU or block the database, which I don't want to risk it.
Я думаю использовать knex на сервисе B (node.js) для извлечения базы данных postgres на сервисе A, это больше похоже на простой ETL, код ниже может хорошо работатьв качестве примера.
var knex1 = knex({
client:'pg',
connection:{
database: co.database,
host: co.host,
user: co.user,
password: co.password,
port:co.port
}
});
var sqlQuery = 'select * from abc';
var data = await knex1.select().from(knex1.raw('(' + sqlQuery + ') Wstmain'));
Хотя выборка данных из postgres (служба A) в порядке, моя проблема заключается в том, чтобы вставить данные в postgres (служба B), база данных postgres (служба B) должна сначала знать,схема таблицы и создание таблицы.
, поэтому сейчас я не знаю, как использовать для получения и экспорта схемы таблицы в базе данных A, а затем использовать схему для создания таблицы в базе данных B. Я нахожуМодуль с именем 'widget-knex-schema'.
const migrate = require('widget-knex-schema');
const knex = require('knex')({config...});
const usersSchema = {
id: {type: 'increments', nullable: false, primary: true},
name: {type: 'string', maxlength: 200, nullable: false},
email: {type: 'string', maxlength: 254, nullable: false, unique: true},
password: {type: 'string', maxlength: 254, nullable: false}
};
migrate.createTable(knex, 'users', usersSchema, true)
.then(function () {
// success
})
Может создавать новую таблицу со схемой на основе json, но как бы я использовал knex для экспорта такой схемы на основе json из базы данных A.