简介
js-pg 是一款基于 Node.js 的 PostgreSQL 客户端库,它提供了一组简单易用的方法来连接 PostgreSQL 数据库,执行 SQL 语句,以及处理结果集等常见操作。它是 npm 上面最受欢迎的 PostgreSQL 库之一,广泛应用于 Node.js 后端开发中。
除了基本功能之外,js-pg 还支持许多高级特性,如连接池、事务管理、JSON 数据类型的支持等。使用 js-pg,可以方便地实现与 PostgreSQL 数据库的交互,提升后端业务处理的效率和可靠性。
安装
需要先安装 Node.js 以及 PostgreSQL 数据库,然后使用 npm 包管理器来安装 js-pg:
npm install pg
连接数据库
连接到 PostgreSQL 数据库需要提供以下信息:
- 主机地址
- 端口号
- 数据库名
- 用户名
- 密码
我们可以通过构造一个配置对象来传递这些信息,示例代码如下:
-- -------------------- ---- ------- ----- - ------ - - -------------- ----- ------ - --- -------- ----- ------------ ----- ----- --------- ----------- ----- ------------- --------- ------------ --- -----------------
执行 SQL 语句
连接成功之后,我们就可以执行 SQL 语句了。js-pg 使用 query()
方法来执行 SQL 语句,该方法返回一个 Promise 对象,在 Promise 回调函数中处理结果集。
以下示例代码展示了如何查询 PostgreSQL 中的所有表名:
client.query('SELECT table_name FROM information_schema.tables WHERE table_schema=\'public\' AND table_type=\'BASE TABLE\';', (err, res) => { if (err) { console.error(err.stack); } else { console.log(res.rows); } });
在 Promise 回调函数中处理结果集的示例:
async function getUsers() { try { const res = await client.query('SELECT * FROM users;'); console.log(res.rows); } catch (err) { console.error(err.stack); } }
参数化查询
如果 SQL 语句中包含用户输入的参数,我们需要使用参数化查询来防止 SQL 注入攻击。js-pg 使用 $1
、$2
、$3
等占位符来指定 SQL 中的参数,示例代码如下:
const name = 'John'; const age = 30; const res = await client.query('SELECT * FROM users WHERE name=$1 AND age=$2;', [name, age]); console.log(res.rows);
事务管理
在处理一组相关的 SQL 语句时,我们可以使用事务管理来确保这组 SQL 语句完全成功或完全失败,以保持数据的一致性。js-pg 提供了 client.query()
方法的一个变体 client.query()
,用于启动一个事务,示例代码如下:
-- -------------------- ---- ------- ----- -------- ------------------ ----------- ------- - ----- ------ - ----- --------------- --- - ----- ---------------------- ----- -------------------- -------- --- ------------------ ----- -------- -------- ----------- ----- -------------------- -------- --- ------------------ ----- -------- -------- ------------- ----- ----------------------- - ----- ----- - ----- ------------------------- ------------------------- - ------- - ----------------- - -
在上面代码中,我们首先使用 pool.connect()
方法获取一个连接客户端对象,然后在一个 try-catch-finally 块中执行一组 SQL 语句,如果中间出现了任何错误,则通过 ROLLBACK
回滚所有修改,否则通过 COMMIT
提交所有修改。
连接池
在实际应用中,频繁地打开关闭数据库连接会导致性能下降,也容易引发诸如 "too many clients already" 的异常。为了解决这个问题,我们可以使用连接池来管理数据库连接。js-pg 提供了 Pool
类来实现连接池功能:
-- -------------------- ---- ------- ----- - ---- - - -------------- ----- ---- - --- ------ ----- ------------ ----- ----- --------- ----------- ----- ------------- --------- ------------- ------------------------ ----- ------------------ ------ ---- -- ---
在创建连接池对象时,我们可以指定连接池的最大连接数、空闲超时时间、连接超时时间等参数,以满足不同应用场景的需求。连接池对象创建之后,我们可以通过 pool.connect()
方法来获取连接对象,使用方法与前面代码类似。
总结
本文介绍了如何使用 npm 包 js-pg 来操作 PostgreSQL 数据库。我们学习了如何连接数据库、执行 SQL 语句、参数化查询、事务管理以及连接池等高级功能。js-pg 是一款非常优秀的 PostgreSQL 客户端库,能够极大地提升 Node.js 后端开发的效率和稳定性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600562f681e8991b448e0bf5