Postgre-SQL 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Postgre-SQL 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
Postgre-SQL 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
Postgre-SQL 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
Postgre-SQL 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 BSD
操作系统 跨平台
软件类型 开源软件
开源组织
地区 国产
投 递 者 blusewang
适用人群 未知
收录时间 2017-07-15

软件简介

Postgre-SQL

一个用于node.js上的,基于pg/pg-native/pg-pool的一个PostgreSQL数据库操作库。

设计目标是:用更少的代码,写出更直观的(复杂)查询。

比如:

  • * await db.table(table).add(data). 在insert into 之后,自动检测是否有主键,主键是否是序列,如果是,返回ID。否则返回影响的行数。如果`table`表中有`create_at`字段,会自动填充`NOW()`。

  • * await db.table(table).where(condition).find(). 自动在SQL中追加`limit 1`,并返回rows[0]或null。

  • * await db.table(table).where(condition).getField(field). 自动在SQL中追加`limit 1`,并返回rows[0][field]或null。

使用类似ThinkPHP的语法,去操作PostgreSQL数据库。

> 可来这里https://runkit.com/blusewang/postgre-sql-play先过手瘾。

库本身已经包含了连接池功能。所以可以直接连接PostgreSQL不必经过pgbouncer。

可以在业务里按需要在三个不同的级别自由切换。更灵活更高效。

有了连接池可以很好的避免因为node.js过载产生的连锁反应,波及到PostgreSQL数据库。

安装

npm i postgre-sql

配置

const {connect} = require('postgre-sql');
connect({user:'postgres',database:'test',max:2,idleTimeoutMillis:100});

使用DEMO

const {client} = require('postgre-sql');
let db = new client();
(async ()=>{
    try{
        let res = await db.table('public.users')
            .where({vip:true},"create_at>'2017-01-01' and coordinate <-> point(116,39) < 1")
            .field('uid,user_name').order('uid desc').page(2).select();
            // res -> [{uid:34,use_name:'alice'},{uid:35,user_name:'david'}...]
    }catch (e){
        // something else
    }
    try{
        await db.begin();
        let new_uid = await db.table('public.users').add({user_name:'charles'});
        await db.commit();
    }catch (e){
        db.rollback();
    }
    
})();

会话模式

默认是statement模式,这个模式的语句会平均负载到池中所有的连接。适合并行查询!

会话模式会根据业务自动调整。

语句模式 statement

const {client} = require('postgre-sql');
let db = new client();
(async ()=>{
    try{
        let res = await db.table('public.users')
            .where({vip:true},"create_at>'2017-01-01' and coordinate <-> point(116,39) < 1")
            .field('uid,user_name').order('uid desc').page(2).select();
            // res -> [{uid:34,use_name:'alice'},{uid:35,user_name:'david'}...]
    }catch (e){
        // something else
    }
})();

会话模式 session

const {client} = require('postgre-sql');
let db = new client();
(async ()=>{
    try{
        await db.connect();
        let res = await db.table('public.users')
            .where({vip:true},"create_at>'2017-01-01' and coordinate <-> point(116,39) < 1")
            .field('uid,user_name').order('uid desc').page(2).select();
            // res -> [{uid:34,use_name:'alice'},{uid:35,user_name:'david'}...]
        await db.release(); // Attention! if connection a session don't forget release it!
    }catch (e){
        await db.release(); // Attention! if connection a session don't forget release it!
        // something else
    }
})();

事务模式 transaction

const {client} = require('postgre-sql');
let db = new client();
(async ()=>{
    try{
        await db.begin();
        let new_uid = await db.table('public.users').add({user_name:'charles'});
        await db.commit(); // Attention! if start a transaction don't forget finish it!
    }catch (e){
        db.rollback(); // Attention! if start a transaction don't forget finish it!
    }
    
})();

自动完成

如果表中有create_atupdate_atdelete_at。在CUD的操作中会自动填充NOW()

软删除只在db.table(tableName).where(conditions).delete();时影响结果。

SELECT类型的语句中,不会主动识,别并剔除delete_at非空的记录。需要手动写在conditions中。

更多姿势,见:https://github.com/blusewang/postgre-sql/blob/master/test/main.test.js

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
2019/03/12 20:46

在Centos上安装Postgre SQL

检查PostgreSQL 是否已经安装 rpm -qa | grep postgres 检查PostgreSQL 是否已经安装 rpm -qal | grep postgres 检查PostgreSQL 安装位置 返回信息 [root@dn07 ~]# rpm -qa | grep postgres postgresql-libs-9.2.18-1.el7.x86_64 [root@dn07 ~]# rpm -qal | grep postgres /usr/share/doc/postgresql-libs-9.2.18 /usr/share/doc/postgresql-libs-9.2.18/COPYRIGHT /usr/lib/firewalld/services/postgresql.xml /u...

0
0
2019/06/14 17:58

如何在Postgre SQL输入命令

进入后,如何输入命令呢 新手进入pg,居然不知道输入什么?输入help试一下: postgres-# help Use ? for help or press control-C to clear the input buffer. 原来要输入 ? 才是帮助 postgres-# ? General copyright show PostgreSQL usage and distribution terms crosstabview [COLUMNS] execute query and display results in crosstab errverbose show most recent error message at maximum verbosity g [FILE] or ; exec...

0
0
发表于数据库专区
2020/01/07 10:24

postgre的连接问题

postgre数据库如果连接mybatis,需要使用org.postgresql:postgresql:9.4.1212.jre7驱动。如果使用jdbc,会报jdbc4不支持连接方式的错误

0
0
2018/07/11 20:50

postgre与mysql区别

SQL兼容性 PostgreSQL 9.5 兼容 SQL:2011 子集 http://www.postgresql.org/docs/9.5/static/features-sql-standard.html MySQL 5.7 兼容 SQL:1999 子集 功能差异 - 高级SQL 递归查询, connect by, 树形查询 PostgreSQL 通过(with 或 tablefunc支持)支持,MySQL 不支持 例子 https://yq.aliyun.com/articles/240 http://www.postgresql.org/docs/9.5/static/tablefunc.html 窗口查询, window ...

0
1
2019/03/14 09:47

postgre数据库迁移

1.python脚本 1 import datetime 2 import os 3 import time 4 class MoveData(): 5 #将一个时间段格式化成,数组时间格式 6 def getBetweenDay(self,startStr,endStr): 7 date_list = [] 8 begin_date = datetime.datetime.strptime(startStr, "%Y-%m-%d") 9 end_date = datetime.datetime.strptime(endStr, "%Y-%m-%d") 10 while begin_date <= end_date: 11 ...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表于服务端专区
2020/01/15 11:53

Mybatis,如何自定义TypeHandler获取数组类型?我自己自定义了一个TypeHandler,但测试没触发调用,是什么问题,如何解决?

需要接受Postgresql的数组字段,先用编写一个返回值为map<String,Object>的mapper,查询返回带有数组字段的结果集,其中有字段是varchar[][],而map返回值的是[[Ljava.lang.String;,是二维数组的字节码表示。然后创建了一个实体,编写一个二维数组字段,新建一个查询用的mapper,返回值被设定为测试的实体类类型 其中typeHandler如下: public class StringTwoArrayTypeHandler implements TypeHandler<String[][]> {   @Ove...

1
0
2019/12/11 15:58

数据库用uuid做主键的情况下,是否还需要增加一个(Integer/Long型自增)字段并设置为索引?

增加一个自增字段的好处: 1、按创建时间排序的情况,可以改为用 自增字段排序,提高性能 2、大数据量分页可用上 增加一个自增字段的坏处: 1、没必要

3
0
发表于数据库专区
2019/12/04 09:54

Postgresql如果要存经纬度,数据类型用什么比较合适?

要经纬度类型的数据,numeric和float8也就是double,如果要包含经纬度计算之类的,这两个谁比较适合存经纬度? 比如下列数据,谷歌和腾讯的两家地图产品的经纬度较大。而其他的地产品数据相对较短 腾讯地图 赤道附近 14.110858899980778,161.02593742887498 太平洋南美西南 -55.92557217633626,-115.90732656918395 谷歌地图 非洲西南海 0.18871204579660034,2.4746566676908444 南极 -75.52063650935783,-80.13246186790002...

5
0
发表于数据库专区
2019/09/24 11:21

postgreSQL 新增数据报 ERROR: value too long for type character varying(20)错误

我的项目是给第三方应用提供API以供其查询和同步数据的,然后其中一个接口在接收第三方应用推过来的数据往数据库写入的时候报错,错误信息如下: Caused by: org.postgresql.util.PSQLException: ERROR: value too long for type character varying(20)     at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2440)     at org.postgresql.core.v3.QueryExecutorImpl.process...

3
0
发表于数据库专区
2019/09/19 17:02

为PostgreSQL编译Windows下的mongo_fdw

@有理想的猪 你好,想跟你请教个问题: 看到你发的两篇文章“为PostgreSQL编译Windows下的mysql_fdw”和“使用已编译PostgreSQL二进制包编译mysql_fdw”很受启发,现在有个需求是:使用PG外部表远程访问MONGODB数据库,但是PG安装在windows系统下,目前官方提供的mongo_fdw都是linux下的包,是否有windows下安装包,或者能否请教在windows下如何编译mongo_fdw,非常感谢!...

7
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
0 评论
5 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部