从nodeJs中的stdin批量获取psql数据COPY

时间:2018-10-29 18:30:22

标签: node.js postgresql psql node-postgres

我需要通过节点应用程序不时地将数据加载到psql db中。 我正在使用node-postgres程序包,该程序包似乎可以与INSERT语句一起正常工作。

由于我的db_dum很大,因此我需要移动到pg_dump中的COPY语句(以获得更好的性能),但是在尝试使用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 dump文件的节点应用程序的伪代码:

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;语句加载数据的可能解决方案

任何建议/评论都值得赞赏。

0 个答案:

没有答案