最近在学习 PostgreSQL ,看到里面有一些高级功能,但是想象不太到有哪些业务场景会用,有没有人能分享一下?
Indexes 我倒是比较熟悉,其它的比如 Triggers 和 View ,有没有业务已经在使用的能简单说一下?
1
niubee1 2023-09-10 14:26:09 +08:00 1
&t=21s
|
2
pelloz 2023-09-10 14:27:30 +08:00 1
不要用触发器,你知道有这么个东西就好。视图的话用得也不多,可以用于简化复杂查询,方便数据查看权限的控制,不过在我遇到这些需求的时候一般也是在程序里面做而不是在数据库上弄。
|
3
Mrun 2023-09-10 14:49:12 +08:00 1
表结构继承,在租户系统架构中,很实用
|
4
monsterxx03 2023-09-10 15:20:04 +08:00 1
trigger 可以做一些 audit 的事,比如对核心数据表做了 CUD 操作时候自动记录或同步,在企业级应用里用的还挺多。之前碰到的一个具体例子是用户多端登陆的时候只保持最新 session 的有效性,在代码里当然能做,但当时场景特殊,客户那端不能部署新代码,但可以操作数据库,就用 pg 的 trigger 监听了 token 表的插入事件,将该用户所有 valid 的 token 全部置 false 。用 trigger 会导致逻辑分散,难以排查死锁问题,对表做 DDL/DML 操作时还要当心上面有 trigger ,在有一定并发量的互联网业务里都不推荐用。
view 在 OLAP 场景下用的很多,比如 materialized view 就很实用,对纯开发用处就不大。 |
5
dayeye2006199 2023-09-10 16:46:47 +08:00
用过全文搜索和 pgvector
|
6
adoal 2023-09-10 17:29:19 +08:00 1
在业务系统里用好高级功能主要是可以简化开发。比如某些查询需要根据两个不同的时区对某个时间戳字段的 rounded to hours 值做聚合,按互联网派 24 氪金纯程序员的做法就是写数据时生成在这两个时区里的 rounded hour 作为附加字段,而传统行业信息化环境里的 DBA 就写个触发器在插入和修改数据时自动完整这事,不需要程序员关心。就当代海量阿狗阿猫程序员的普遍水平和素质而言,我更相信 DBMS 里做各种约束和自动化更靠谱一些。
至于视图,嗯,传统行业里,同一法人实体下的各业务主体单位之间做数据交换,用视图的太多了。有些人会觉得这样太落后。我也这么觉得。但是呢,这样短平快啊,基本上业务主体单位自己的运维人员就能搞定。做 API 来对接要人要钱要时间而且成本投下去来做的阿猫阿狗还不一定靠谱啊。 另外,居然触发器和视图都能算高级功能了?这在传统的信息化圈子里都是很很很常规的。 |
7
monster1priest OP @adoal 哈哈,我数据库的掌握程度不高。看的教程里面把 trigger 和 view 放在高级部分里了。
|
8
monster1priest OP @adoal 我理解 trigger 对并发会有一些影响,所以互联网行业不用。
|
9
troywinter 2023-09-11 11:27:02 +08:00
ltree 处理多层级结构时很有用,比如复杂的组织关系,可以轻松的实现一些以前需要递归查询的场景
|