表设计规范
1、建议能使用小字节数类型,就不要用大字节数类型
2、建议能用varchar(N)、text就不用char(N);
3、建议使用default NULL,而不用default '';
4、建议使用NUMERIC(precision,scale)来存储货币金额和其它要求精确计算的数值,而不使用
real,double precision
5、如果有国际货业务的话,建议使用timestamp with time zone(timestamptz),而不用
timestamp without time zone,避免时间函数在对于不同时区的时间点返回值不同
建议建表时COLUMN加上COMMENT,便于后续了解业务及维护:
6、频繁更新的表建议设定适当的fillfactor,如85%,预留15%空间供hot更新使用
7、避免使用触发器,会使数据处理逻辑复杂,不便于调试
8、表设计建议加上增量设计,以方便数据获取、统计等
9、频繁访问的大表进行分区设置,一般超过千万级的宽表,或大于8GB的表可以考虑分区
10、建议设置命名规范,方便区分各个对象,建议小写字母、数字、下划线,统一简拼或是英
文,不建议拼音、英文混用
表名 t_
索引名 i_
视图 v_
函数 fun_
临时表或备份表加上关键字tmp、bak

索引设计规范
1、在选择性好的字段上创建索引
2、如使用逻辑外键,建议在逻辑外键上创建索引
3、优先考虑where条件中及order by字段添加索引
4、对于where条件中多个字段and条件的高频sql,可以参考数据分布情况创建多字段组合索引
5、对于固定条件且数据占比低的高频sql,可以创建partial index
6、对于经常使用表达式作为查询条件的sql,可以使用表达式索引,正常索引不会起作用

研发规范
1、避免使用select *,枚举所需要的字段
2、统计数量统一使用count(*),不使用count(常量),count(列名)
3、判空使用is null、is not null,不用=、!=判空
4、避免join过多表,union过多表
5、实现分页查询逻辑时,如果count为0,则直接返回,避免执行后续的分页语句
6、游标使用后要关闭、释放
7、应用程序开启autocommit,避免程序自动begin事务后不做任何操作
8、高并发应用场景使用数据库连接池
9、应用正确处理数据类型,避免在数据库中进行隐式转换
10、避免向客户端返回大量数据
11、避免单个事务过大、过长、过于复杂,将单个事务中多条sql操作分解、拆分,或者放到不同
的事务里,每个事务粒度尽可能小,这样可以尽量减少资源lock,检查锁阻塞、死锁的产生
12、大批量的数据入库时,使用copy替代insert,可以提高写入速度
13、避免频繁count大表,实时性要求不高的场景,可以定期count,并将count结果缓存使用
14、建议对报表类的或生成基础数据的查询,使用物化视图(MATERIALIZED VIEW)定期固化数据
快照,避免对多表(尤其多写频繁的表)重复跑相同的查询。PostgreSQL中物化视图支持并发更
新:REFRESH MATERIALIZED VIEW CONCURRENTLY。原理和优缺点与index CONCURRENTLY
类似,即以时间来换取锁,并发刷新的速度会比非CONCURRENTLY慢,但后者会阻塞其他从该物
化视图读数据的请求。

运维规范
1、ddl操作设置锁等待,防止雪崩
2、删除全表使用truncate,不使用delete
3、修改数据时先select确认范围,使用事务控制提交或回滚
4、在线创建索引使用CONCURRENTLY关键字,避免阻塞dml
5、数据库设置复杂密码,应用不使用超级用户,控制账号明确权限,不同应用共用数据库时分配
多个账号
6、发生主备切换后,新的主库在开放给应用程序使用前,建议使用pg_prewarm预热之前的主库
shared buffer里的热数据

postgresql使用规范解读的更多相关文章

  1. PostgreSQL 源码解读 node的模拟实现

      node的实现是PostgreSQL的查询解析的基础,实现的关键是两个宏,makeNode和newNode.其他节点继承自Node节点,如果增加新的结构体,需要添加NodeTag中添加对应的枚举值 ...

  2. MySQL数据库25条规范解读

    一.基础规范 (1)必须使用UTF8字符集 解读:万国码,无需转码,无乱码风险,节省空间(由于移动设备原因最好使用utf8mb4) (2)禁止使用存储过程.视图.触发器.Event 解读:高并发大数据 ...

  3. MySQL30条规范解读

    转载自:https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651959906&idx=1&sn=2cbdc66cfb ...

  4. 中国银联mPOS通用技术安全分析和规范解读

    mPOS是近年出现并得到迅速发展的一种新型受理产品,不少机构和生产企业进行了各种形式的试点. 因为mPOS引入了手机.平板电脑等通用智能移动设备.并通过互联网进行信息传输.因此其安全特点与传统银行卡受 ...

  5. PolarDB PostgreSQL 架构原理解读

    背景 PolarDB PostgreSQL(以下简称PolarDB)是一款阿里云自主研发的企业级数据库产品,采用计算存储分离架构,兼容PostgreSQL与Oracle.PolarDB 的存储与计算能 ...

  6. ULID规范解读与实现原理

    前提 最近发现各个频道推荐了很多ULID相关文章,这里对ULID的规范文件进行解读,并且基于Java语言自行实现ULID,通过此实现过程展示ULID的底层原理. ULID出现的背景 ULID全称是Un ...

  7. js 强转规范解读

    js的强转是我们很容易遇到坑的一个地方 比如 == 会产生很有意思的事情(使用===还是最佳实践的)  或者+new Date()一个当前的数字时间戳  这里面都涉及到强转  下面分享下学习强转的过程 ...

  8. 微信小程序 登录流程规范解读

    一. 官方登录时序图 二. 简单理解 这里仅按照官方推荐的规范来 0. 前置条件 一共有三端: - 微信小程序客户端 - 第三方服务器端(自己搭建) - 微信服务器端 1. 客户端获得code,并将c ...

  9. ECMAScript规范解读this

    在<JavaScript深入之执行上下文栈>中讲到,当JavaScript代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution conte ...

随机推荐

  1. 云计算openstack核心组件——glance— 镜像服务(6)

    一.glance介绍:              Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找.注册和检索等. Glance提供Restful API可以查询虚 ...

  2. 集群数据ID生成之美团叶子生成

    转自https://tech.meituan.com/2017/04/21/mt-leaf.html 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识.如在美团点评的金融.支付.餐饮.酒店. ...

  3. 【原创】K8S使用ceph-csi持久化存储之RBD

    一.集群和组件版本 K8S集群:1.17.3+Ceph集群:Nautilus(stables)Ceph-CSI:release-v3.1snapshotter-controller:release-2 ...

  4. Zookeeper集群"脑裂"问题 - 运维总结

    关于集群中的"脑裂"问题,之前已经在这里详细介绍过,下面重点说下Zookeeper脑裂问题的处理办法.ooKeeper是用来协调(同步)分布式进程的服务,提供了一个简单高性能的协调 ...

  5. 新版 C# 高效率编程指南

    前言 C# 从 7 版本开始一直到如今的 9 版本,加入了非常多的特性,其中不乏改善性能.增加程序健壮性和代码简洁性.可读性的改进,这里我整理一些使用新版 C# 的时候个人推荐的写法,可能不适用于所有 ...

  6. 极简 Node.js 入门 - 4.2 初识 stream

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  7. JMeter Websocket 二进制Binary压力测试或接口测试

    背景 最近在做游戏项目,做好java服务端,需要本地调试Websock服务,并且是二进制binary形式传输,网上的很多都是text形式传输的测试页面,所以不符合要求.为了解决websocket的二进 ...

  8. Appium的一些问题的总结答案

        问题 1. error: Failed to start an Appium session, err was: Error: Requested a new session but one ...

  9. centos7安装YouCompleteMe,vim打造成C++的IDE

    一.安装python3 1.安装编译工具 yum -y groupinstall "Development tools" yum -y install zlib-devel bzi ...

  10. LeetCode刷题总结-动态规划篇

    本文总结LeetCode上有动态规划的算法题,推荐刷题总数为54道.具体考点分析如下图: 1.中心扩展法 题号:132. 分割回文串 II,难度困难 2.背包问题 题号:140. 单词拆分 II,难度 ...