表设计规范
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. 初识ABP vNext(10):ABP设置管理

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 定义设置 使用设置 最后 前言 上一篇介绍了ABP模块化开发的基本步骤,完成了一个简单的文件上传功能.通常的模块都有一 ...

  2. matlab中的多项式计算

    在做多项式加法的时候需要做多项式扩展.这里将g1扩展到与f等长 多项式的乘积,是两个多项式之和减1, 多项式求导函数:ployder() 先建立两个多项式,再求a的导函数 在计算两个多项式乘积的导函数 ...

  3. netty字符串流分包

    @Override protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf in, List<Obj ...

  4. 记一次Java获取本地摄像头(基于OpenCV)

    OpenCV官网下载地址(下载安装后,在安装目录可以找到动态链接库和OpenCv.jar) https://opencv.org/releases/ 安装完成后,这是我的安装目录 maven 依赖(这 ...

  5. C++ (C#)实现获取NX PART预览图

    VS环境下 C++版本: 1 int GetPreviewImage(const TCHAR* prtFile, const TCHAR* imageFile) 2 { 3 IStorage* pSt ...

  6. springboot maven项目运行常见报错 及ajax请求报错

    如图所示 tomcat运行后直接停止,也不报错 原因:我的原因是controller路径配置重名或者service没有配置@Service 遇见这错找了好久问题,网上也搜不到,特此记录一下 问题2 a ...

  7. 国产化之路-安装达梦DM8数据库

    专题目录 国产化之路-统信UOS操作系统安装 国产化之路-国产操作系统安装.net core 3.1 sdk 国产化之路-安装WEB服务器 国产化之路-安装达梦DM8数据库 国产化之路-统信UOS + ...

  8. 081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字

    081 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 06 new关键字 本文知识点:new关键字 说明:因为时间紧张,本人写博客过程中只是 ...

  9. fopen和fopen_s的区别

    转载:https://blog.csdn.net/keith_bb/article/details/50063075 fopen: 原型:FILE * fopen(const char * path, ...

  10. Tomcat 第六篇:类加载机制

    1. 引言 Tomcat 在部署 Web 应用的时候,是将应用放在 webapps 文件夹目录下,而 webapps 对应到 Tomcat 中是容器 Host ,里面的文件夹则是对应到 Context ...