资深研发的心愿:PostgreSQL未来若能加入这些功能,将更臻完善

news2024/11/17 5:31:03

我们已经与 PostgreSQL 和其他数据库一起工作了一段时间。在数据库管理领域,PostgreSQL 以其稳健性和灵活性脱颖而出。然而,随着开发人员在现代应用程序开发的复杂性中航行,还有一些额外功能可以简化他们的工作流。以下是我希望 PostgreSQL 具备的功能,让研发工作更加轻松。

带版本记录的 Schema

PG Catalog 仅存储当前最新的 schema。Schema 变更工具通常需要创建外部表来存储 Schema 变更的历史记录。内置的带版本记录的 schema 能带来如下好处:

  1. 标准化格式。例如版本号格式,表示 schema 变更是否正在进行中的状态。
  2. 一致性。当 schema 变更历史存储在外部时,很难完全保证变更历史与实际 schema 之间的一致性。
  3. 回滚。如果新的 schema 变更引入了问题,版本控制允许安全地回滚到以前稳定状态,最大程度地减少停机时间和对用户的影响。
  4. 流程控制。有了带版本号的 schema 变更状态和历史记录,就更容易强制要求数据库上任何时候只能运行一个 schema 变更。

在线 Schema 变更

多年来,PostgreSQL 一直在这个领域持续迭代,但仍然存在一些情况下变更 schema 会阻塞数据库的读写。pg-osc、reshape 等工具旨在解决这个问题。理想情况下,PostgreSQL 可以封装耗时的 schema 变更过程:

  • Schema 变更过程中创建的临时表是内部表。因此不会污染用户空间。
  • Postgres 只要把 schema 变更的进度百分比暴露出来。

分支

在开发过程中,最好拥有一个高仿真度的测试环境,尽可能接近生产环境。这里的挑战在于能够快速基于生产环境创建测试数据库(为了合规性,还需要清理敏感数据)。如果 PostgreSQL 可以像 Git 一样具有即时创建分支的能力呢?

归档表

为了防止误删数据,我们通过添加一个 is_deleted 列来,这就是所谓的软删除 (soft-delete) 模式。然而,这给外键、唯一索引带来了额外的复杂性。理想情况下,PostgreSQL 可以允许用户配置一个归档表。被移除的数据首先会被移到归档表中,并在过了配置的保留期 (retention period) 后清除。这可以简化应用逻辑和数据合规工作。

标签

PostgreSQL 允许向对象添加 SECURITY LABEL。我希望它可以扩展成一个更通用的标签系统,用户可以附加任意的 KV 对。这在数据字典、报告和编排开发者工作流中将会很有用。例如:

  • 查找特定应用程序拥有的所有数据库 / 表。
  • 当更改与某个标签匹配的表时需要额外审查。

Git 集成

Snowflake 在它的 2023 summit 上也推出了 Git 集成

file

这使开发人员能够将存储过程、自定义函数和祖传运维脚本和代码放在一起。因此,他们将采用统一的版本控制最佳实践。类似于 Foreign Data Wrapper (FDW) 的实现方式,PostgreSQL 内核可以提供基础架构,而和特定的版本控制系统集成可以通过扩展来实现。

总结

关于数据库开发工作流,Git 始终是灵感的源泉,困难之处在于 Git 是为管理无状态的代码而生,如何能移植到管理有状态的数据库上。业界也有不少公司在不断拓展前沿:

  • Neon 重写了 Postgres 引擎,实现了 serverless 和即时分支。
  • Xata 提供 serverless、分支,以及在线 schema 变更。
  • Snaplet 用于生成合规的测试数据库。
  • Supabase 则是围绕 Postgres 构建了整个应用开发平台。
  • Bytebase 统一所有人与 Postgres 的操作,包括 schema 变更、临时数据订正、数据访问控制和动态脱敏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2052822.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

18Canvas 组件

18 Canvas 组件 Tkinter 的 Canvas 组件是一个灵活的绘图区域,允许我们在其中绘制图形、文本和图像。它支持各种绘图操作,如画线、画矩形、画圆形等。 Canvas 组件属性 width 和 height: Canvas的宽度和高度,可以是像素值或以字符为单位。…

【C++】unordered_set和unordered_map的封装(哈希)

🌈个人主页:秦jh_-CSDN博客🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12575764.html?spm1001.2014.3001.5482 ​ 目录 key和pair 仿函数hash 迭代器 operator HashTable.h my_unordered_map.h my_unordered_se…

【自动驾驶】控制算法(一)绪论与前期准备

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…

白盒测试-发送请求

发送请求-怎么操作? 先创建发送请求对象mockmvc--用mockmvc对象发送请求(包含请求url,请求头,请求参数等) 用到的源码是mockmvc源码--其中perform方法,他的入参是接口类 用mockmvc对象发送请求,代码是mock…

【机器学习第11章——特征选择与稀疏学习】

机器学习第11章——特征选择与稀疏学习 11.特征选择与稀疏学习11.1子集搜索与评价子集搜索子集评价 11.2 过滤式选择11.3 包裹式选择11.4 嵌入式选择11.5 稀疏表示与字典学习稀疏表示字典学习 11.6 压缩感知 11.特征选择与稀疏学习 11.1子集搜索与评价 特征:描述物…

全国计算机二级Python学习笔记

格式化操作符辅助指令: 格式化输出16进制,十进制,八进制整数 %x — hex 十六进制 %d — dec 十进制 %o — oct 八进制 turtle.setup()函数用于启动一个图形窗口,它有四个参数 turtle.setup(width, height, startx, starty) 分别是&…

kali实用工具之ettercap

ettercap最初是交换局域网的嗅探器,但在开发的过程中,它获得了越来越多的功能,从而使其转变为强大而灵活的中间人攻击工具。它支持许多协议(甚至是加密协议)的主动和被动解剖,并包括许多用于网络和主机分析…

Unity音频管理器插件AudioToolKit

Unity音频管理器插件AudioToolKit 介绍AudioToolKit介绍具体用法总结 介绍 最近在自己写音频管理器的时候在网上发现了一款比较好用并且功能很全的一个音频管理插件,叫做AudioToolKit的插件。 如果需要的可以直接从我资源中找AudioToolKit。 AudioToolKit介绍 A…

助农扶贫小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,商品信息管理,订单信息管理,订单配送管理,商品评价管理,商品退货管理,管理员管理 微信端账号功能包括:系统…

Flink消费Kafka数据积压排查解决

0、背景 有个Flink任务每天不定时会出现数据积压,无论是白天还是数据量很少的夜里,且积压的数据量会越来越多,得不到缓解,只能每日在积压告警后重启,重启之后消费能力一点毛病没有,积压迅速缓解&#xff0…

性能测试常见面试问题汇总

性能测试是什么? 答:性能测试是评估系统或应用程序在不同负载条件下的表现的过程。它可以帮助我们确定系统在正常使用期间所需的资源,并找出系统在何时无法满足用户需求的瓶颈。 性能测试包括哪些方面? 答:性能测试包括…

计算中间件平台之Linkis

Linkis 是由WeBank自主研发的一款面向大数据和AI的计算中间件平台。它的设计初衷是为了简化和统一各种计算引擎的调用和管理,降低使用大数据和AI技术的门槛。Linkis可以帮助用户在一个平台上方便地调用各种数据处理引擎,如Hadoop、Spark、Hive、Flink等&…

bridge资产导入blender错误 显示bidge Could not send data over port 28888

bridge资产导入blender错误 显示bidge Could not send data over port 28888 解决办法 1.在Quixel bridge里点击Edit找到Manage Plugins下载blender插件 我的显示已经下载好了 2.在Quixel bridge里点击Edit找到Settings找到插件保存路径 3.在路径里找到E:\Documents\Mega…

HTML5服装电商网上商城模板源码

文章目录 1.设计来源1.1 主界面1.2 购物车界面1.3 电子产品界面1.4 商品详情界面1.5 联系我们界面1.6 各种标签演示界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 【博主推荐】:前些天发…

STM32——I2C协议以及软件读写

I2C协议中SCL用于同布,当某一方发送/接收数据时,另一方将会发应答表示数据已收到。 一主多从:类似于老师是主在讲课,学生是从机,只有老师点名学生才能应答,否则不能自己应答。 之后是硬件电路的设置 对于…

【ACL2024】面向Stable Station的交互式多轮Prompt生成模型DiffChat

近日,阿里云人工智能平台PAI与华南理工大学金连文教授团队合作,在自然语言处理顶级会议 ACL 2024 上发表论文《DiffChat: Learning to Chat with Text-to-Image Synthesis Models for Interactive Image Creation. ACL 2024》。DiffChat算法是一个文到文…

【活动议题介绍】2024-08-25 | PowerData 数字经济·杭州开源行

【活动议题介绍】2024-08-25 | PowerData 数字经济杭州开源行 活动介绍议题介绍活动信息扫码报名往期开源行回顾 活动介绍 “总把西湖比西子,浓妆淡抹总相宜”,杭州,这座温婉如画的江南水乡,自古便以其独有的风姿吸引着无数文人墨…

【C++报错已解决】`RuntimeError: CUDA error: invalid device ordinal`

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引言 你是否在运行CUDA程序时遇到了RuntimeError: CUDA error: invalid device ordinal这样的错误?这通常是由于设…

STM32标准库学习笔记-9.DMA 直接存储器存取

参考教程:【STM32入门教程-2023版 细致讲解 中文字幕】 DMA(Direct Memory Access) DMA(Direct Memory Access)直接存储器存取DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预…

OpenCV图像滤波(20)模糊处理函数stackBlur()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 stackBlur() 函数用于对图像进行模糊处理。该函数对图像应用了 stackBlur 技术。stackBlur 可以生成与高斯模糊相似的结果,而且随着模…