экспортировать схему таблицы базы данных и переместить данные на другой компьютер, используя knex в node.js - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть один запущенный веб-сервис 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.

1 Ответ

0 голосов
/ 28 сентября 2019

Если вам нужно скопировать базу данных A в B pg_dump и pg_restore - это самый простой инструмент для этого https://www.postgresql.org/docs/9.3/app-pgdump.html`

pg_dump не блокирует доступ других пользователей к базе данных(читатели или писатели).

Так что вам не следует беспокоиться о блокировке БД из-за создания дампа.

...