1

使用javascript连接postgresql数据库 -利来国际app

张玉龙 2021-11-07
350

在postgresql发行版中只包含两个客户端接口: libpq 和 ecpg

  • libpq is included because it is the primary c language interface, and because many other client interfaces are built on top of it.
  • ecpg is included because it depends on the server-side sql grammar, and is therefore sensitive to changes in postgresql itself.

其他语言客户端接口:

name language comments website
dbd::pg perl perl dbi driver
jdbc java type 4 jdbc driver
libpqxx c c interface
node-postgres javascript node.js driver
npgsql .net .net data provider
pgtcl tcl -
pgtclng tcl -
pq go pure go driver for go’s database/sql
psqlodbc odbc odbc driver
psycopg python db api 2.0-compliant

node.js

  简单的说 node.js 就是运行在服务端的 javascript。
  node.js 是一个 javascript 运行环境(runtime),它让 javascript 可以开发后端程序,它几乎能实现其他后端语言能实现的所有功能。
  node.js 基于 google v8 引擎,v8 引擎是 google 发布的一款开源的 javascript 引擎,原来主要用于 chrome 浏览器的 js 解释部分,后来让 ryan dahi 把这个 v8 引擎搬到了服务器上,用做服务器的软件。
  node.js 最擅长的就是处理高并发,在java、php或者.net等服务器端语言中,会为每一个客户端连接创建一个新的线程。而每个线程需要耗费大约2mb内存。也就是说,理论上,一个8gb内存的服务器可以同时连接的最大用户数为4000个左右。要让web应用程序支持更多的用户,就需要增加服务器的数量,而web应用程序的硬件成本当然就上升了。node.js不为每个客户连接创建一个新的线程,而仅仅使用一个线程。当有用户连接了,就触发一个内部事件,通过非阻塞i/o、事件驱动机制,让node.js程序宏观上也是并行的。使用node.js,一个8gb内存的服务器,可以同时处理超过4万用户的连接
  node.js的官方网站:中文 英文
  之前研究postgresql高可用装 etcd-browser web可视化界面时用过 nodejs,使用 nodejs 启动 etcd-browser。
  postgresql高可用测试系列之patroni etcd haproxy keepalived 离线部署(三) 7. etcd-browser web可视化界面

node.js 连接各个数据库使用的包

数据库 包名 安装命令 github地址
postgresql node-postgres npm install pg
oracle node-oracledb npm install oracledb
mysql node-mysql2 npm install --save mysql2
sql server node-mssql npm install mssql
mongodb node-mongodb-native npm install mongodb
ibm db2 node-ibm_db npm install ibm_db
opengauss node-opengauss npm install node-opengauss --save
达梦8 dmdb npm install dmdb -

node-postgres

  node-postgres 是一组 node.js 模块,用于与 postgresql 数据库交互。
  node-postgres的官方网站:

  1. 下载安装 nodejs
    nodejs下载地址: 文件:node-v16.13.0-linux-x64.tar.xz
# 安装nodejs,已经编译好的包,解压即是安装 [[email protected] ~]# tar -xvf /enmo/soft/node-v16.13.0-linux-x64.tar.xz -c /enmo/app [[email protected] ~]# mv /enmo/app/node-v16.13.0-linux-x64 /enmo/app/node-16.13.0 [[email protected] ~]# ln -s /enmo/app/node-16.13.0 /enmo/app/nodejs [[email protected] ~]# sed -i "s;:\$path:;:/enmo/app/nodejs/bin:\$path:;g" /etc/profile [[email protected] ~]# source /etc/profile [[email protected] ~]# node -v v16.13.0
  1. 下载安装 node-postgres
    node-postgres下载地址: 文件:node-postgres-master.zip
    安装 node-postgres 需要使用 npm 命令或者 cnpm 命令。npm 是随同 node.js 一起安装的包(模块的集合)管理工具,可以使用 npm 安装第三方模块包,第三方模块包可以在找到。cnpm 是 npm 的国内替代命令,如果 npm 下载包比较慢或安装出现各种问题,可以选择使用 cnpm。

  如果服务器可以连接互联网,直接使用 npm 命令安装 node-postgres

# 先创建一个项目目录,将模块安装到这个项目目录下 [[email protected] ~]# mkdir -p /enmo/app/test_nodejs # 进入项目目录在执行 npm 安装 [[email protected] ~]# cd /enmo/app/test_nodejs # 在开发项目中,建议安装时加上--save,会把安装的包信息写入到package.json文件的dependencies里,可以方便找到依赖包 # 但是新版的npm不加-save也可以自动写进去,但是如果使用 cnpm 就不一定会写入了 # npm可以指定安装版本 npm install [email protected] --save [[email protected] ~]# npm install pg --save [[email protected] test_nodejs]# npm list [email protected] /enmo/app/test_nodejs └── [email protected]8.7.1 [[email protected] test_nodejs]# ll drwxr-xr-x 22 root root 4096 nov 8 00:33 node_modules -rw-r--r-- 1 root root 47 nov 8 00:33 package.json -rw-r--r-- 1 root root 13170 nov 8 00:33 package-lock.json # 查看包的信息 [[email protected] test_nodejs]# npm info pg [email protected]8.7.1 | mit | deps: 7 | versions: 211 postgresql client - pure javascript & libpq with the same api https://github.com/brianc/node-postgres keywords: database, libpq, pg, postgre, postgres, postgresql, rdbms dist .tarball: https://registry.npmjs.org/pg/-/pg-8.7.1.tgz .shasum: 9ea9d1ec225980c36f94e181d009ab9f4ce4c471 .integrity: sha512-7bdycv7v6u3katwjpqjjbww0ueswuh4yq/ejnf2heo/nnvkjpvheie/a/tlep6wtmsknunghs5a9juok6iddka== .unpackedsize: 71.5 kb dependencies: buffer-writer: 2.0.0 packet-reader: 1.0.0 pg-connection-string: ^2.5.0 pg-pool: ^3.4.1 pg-protocol: ^1.5.0 pg-types: ^2.1.0 pgpass: 1.x ... ...

  如果服务器可以连接互联网,也可以使用 cnpm 命令安装 node-postgres

# 首先安装 cnpm [[email protected] ~]# npm install -g cnpm --registry=https://registry.npmmirror.com [[email protected] ~]# mkdir -p /enmo/app/test_cnpm [[email protected] ~]# cd /enmo/app/test_cnpm [[email protected] test_cnpm]# cnpm install pg --save [[email protected] test_cnpm]# cat package.json { "dependencies": { "pg": "^8.7.1" } } [[email protected] test_cnpm]# cnpm list /enmo/app/test_cnpm ├── buffer[email protected]2.0.0 extraneous ├── [email protected]2.0.4 extraneous ├── [email protected]1.0.0 extraneous ├── [email protected]2.5.0 extraneous ├── [email protected]1.0.1 extraneous ├── [email protected]3.4.1 extraneous ├── [email protected]1.5.0 extraneous ├── [email protected]2.2.0 extraneous ├── [email protected]8.7.1 extraneous ├── [email protected]1.0.4 extraneous ├── [email protected]2.0.0 extraneous ... ...

  如果服务器不能连接互联网,就得从其他服务器上将安装好的node_modules复制过来,有的说下载源码可以离线安装,半天没整明白,我从能联网的服务器复制过来也好使,网盘分享中是我打的包,有需要的可以试试,不一定好使:链接: 提取码:pphi

# 首先在可以联网的服务器上安装 node-postgres # 在可以联网的服务器上打包项目目录 [[email protected] ~]# cp /enmo/app/test_nodejs /enmo/app/node-postgres-8.7.1 [[email protected] ~]# cd /enmo/app [[email protected] app]# tar -zcvf node-postgres-8.7.1.tar.gz node-postgres-8.7.1 # 将 node-postgres-8.7.1.tar.gz 传到不能联网的服务器上解压 [[email protected] ~]# tar -zxvf /enmo/soft/node-postgres-8.7.1.tar.gz -c /enmo/app/ # mv成项目名 [[email protected] ~]# mv /enmo/app/node-postgres-8.7.1 /enmo/app/nodejs_conn_pg # cd nodejs_conn_pg 创建项目脚本 [[email protected] ~]# cd /enmo/app/nodejs_conn_pg [[email protected] nodejs_conn_pg]# vi conn_pg.js const pg = require('pg') const clientclass = pg.client const pgurl = 'postgres://postgres:[email protected]:5432/postgres' const client = new clientclass(pgurl) async function connect(client) { try { await client.connect() console.log(`client connected.`) const {rows} = await client.query('select inet_server_addr(),pg_is_in_recovery(),current_database(),current_user') console.table(rows) await client.end() } catch(ex){ console.log("some error" ex) } finally { await client.end() } } connect(client) # node 执行 [[email protected] nodejs_conn_pg]# node conn_pg.js client connected. ┌─────────┬──────────────────┬───────────────────┬──────────────────┬──────────────┐ │ (index) │ inet_server_addr │ pg_is_in_recovery │ current_database │ current_user │ ├─────────┼──────────────────┼───────────────────┼──────────────────┼──────────────┤ │ 0 │ '192.168.58.10' │ false │ 'postgres' │ 'postgres' │ └─────────┴──────────────────┴───────────────────┴──────────────────┴──────────────┘

使用pool的测试

const { pool } = require('pg') const connectionstring = 'postgres://postgres:[email protected]:5432/postgres' const pool = new pool({ connectionstring, max: 10, idletimeoutmillis: 30000, connectiontimeoutmillis: 2000, }) pool.on('error', (err, client) => { console.error('unexpected error on idle client', err) process.exit(-1) }) ;(async function() { const client = await pool.connect() const { rows } = await client.query('select inet_server_addr(),pg_is_in_recovery(),current_database(),current_user') console.table(rows) client.release() })() pool.end(() => { console.log('pool has ended') })

测试超出连接池最大限制

最后修改时间:2021-11-07 23:43:15
「喜欢文章,快来给作者赞赏墨值吧」
【利来手机国际的版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:[email protected]进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论