首页 > 解决方案 > 从nodeJs中的stdin批量复制psql数据

问题描述

我需要通过节点应用程序不时地将数据加载到 psql db 中。我正在使用node-postgres包,它似乎可以很好地处理INSERT语句。

由于我的 db_dum 很大,我需要转到COPYpg_dump 中的语句(以获得更好的性能),但是在尝试使用 Node 中的包加载数据时出现各种错误pg- 如果我使用命令行,则可以找到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;在节点应用程序中使用语句加载数据的可能解决方案

任何建议/意见表示赞赏。

标签: node.jspostgresqlpsqlnode-postgres

解决方案


推荐阅读