如何从 node.js 中的 postgresql 脚本中读取
Posted
技术标签:
【中文标题】如何从 node.js 中的 postgresql 脚本中读取【英文标题】:How to read from postgresql script in node.js 【发布时间】:2021-09-14 03:47:48 【问题描述】:我使用 pg 模块将 postgres 数据库连接到 node.js 项目。
const pg = require('pg')
const pool = pg.Pool(
"user":"postgres",
"password":"password",
"host": "localhost",
"db" : "db1"
);
pool.connect();
pool.on('connect',(client)=>
client.query("insert into table1(id, name) values(1, "item1")")
client.query("select * from table 1",(err, res)=>
if( err) throw err;
console.log(res);
);
)
我的 sql 代码在一个名为 script.sql 的文件中。我的代码与上面非常相似,我想从 script.sql 文件中读取,而不是将 sql 代码放入查询函数中,例如 client.query("insert into table1(id, name) values(1, 'item1') ") 。有没有办法在 pg 模块中做到这一点,或者你有没有建议一种有效的方法来从 node-postgres 中的脚本中读取。
【问题讨论】:
“从脚本中读取”是什么意思? 可以将文件读入变量。可以在服务器启动前使用readFileSync
,也可以在服务器启动后使用readFile
。
【参考方案1】:
你要么synchronously read服务器启动前的文件(readFileSync
阻塞服务器):
const pg = require('pg');
const readFileSync = require('fs');
const sqlInsert = readFileSync('insert.sql');
const sqlSelect = readFileSync('select.sql');
const pool = pg.Pool(
"user":"postgres",
"password":"password",
"host": "localhost",
"db" : "db1"
);
pool.connect();
pool.on('connect', client =>
client.query(sqlInsert);
client.query(sqlSelect, (err, res) =>
if (err) throw err;
console.log(res);
);
);
或asynchronously read服务器启动后的文件:
const pg = require('pg');
const readFile = require('fs');
const pool = pg.Pool(
"user":"postgres",
"password":"password",
"host": "localhost",
"db" : "db1"
);
pool.connect();
pool.on('connect', client =>
readFile('insert.sql', sqlInsert =>
client.query(sqlInsert);
);
readFile('select.sql', sqlSelect =>
client.query(sqlSelect, (err, res) =>
if (err) throw err;
console.log(res);
);
);
);
您也可以使用promise-based operations 代替基于回调的操作:
const pg = require('pg');
const readFile = require('fs/promises');
const pool = pg.Pool(
"user":"postgres",
"password":"password",
"host": "localhost",
"db" : "db1"
);
pool.connect();
pool.on('connect', async client =>
await sqlInsert = readFile('insert.sql');
client.query(sqlInsert);
await sqlInsert = readFile('select.sql')
client.query(sqlSelect, (err, res) =>
if (err) throw err;
console.log(res);
);
);
【讨论】:
以上是关于如何从 node.js 中的 postgresql 脚本中读取的主要内容,如果未能解决你的问题,请参考以下文章
使用 Node JS 连接到在线托管的 PostgreSQL
Node.js、PostgreSQL 中的事务冲突、乐观并发控制和事务重试
如何将在 zeit 中运行的 node.js 与 postgresql 连接起来?