Массовое копирование psql данных из stdin в nodeJs - PullRequest
0 голосов
/ 29 октября 2018

Мне нужно время от времени загружать данные в psql db через приложение узла. Я использую пакет node-postgres , который, кажется, отлично работает с INSERT операторами.

Так как мой db_dum огромен, мне нужно перейти к оператору COPY в pg_dump (для лучшей производительности), но при попытке загрузить все данные при попытке загрузить данные с пакетом pg в Node - Это работает, если Я использую командную строку psql

Файл дампа psql, который у меня есть, огромен и включает в себя COPY такие выражения:

COPY hibernate.address (id, create_timestamp, 
update_timestamp, street_address_line_1, street_address_line_2, city, state_code, postal_code, postal_code_suffix, country_code, latitude, longitude, updated_by_base_user_id) FROM stdin;
379173  2017-02-20 02:34:17.715-08  2018-01-20 08:34:17.715-08  3 Brewster St   \N  Phoenix AZ  17349   \N  US  \N  \N  719826
/.

Вот псевдокод для приложения узла, выполняющего файл дампа sql:

const sqlFile = fs.readFileSync('data_dump.sql').toString();
const connectionString = `postgres://<user>:${PgPassword}@${pgIpAndPort}/<table>`;
const client = new pg.Client(connectionString);
lient.connect();
client.query(sqlFile);

Вот пример pg_dump команды, которую я использую (которая предназначена только для данных - без схемы):

pg_dump -U <user> --data-only --disable-triggers -n hibernate <table_name> > <dump_file.sql>

но это не работает, когда я пытаюсь загрузить данные через приложение узла

Я знаю, --column-inserts решит проблему, но это резко снизит производительность.

Поэтому я ищу возможные решения для загрузки данных с помощью оператора COPY tbl FROM stdin; в приложении узла

Любые предложения / комментарии приветствуются.

...