当前位置: 首页 > article >正文

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

我们已经与 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.kler.cn/a/297048.html

相关文章:

  • 周报 | 24.9.2-24.9.8文章汇总
  • flutter之常用数据类型
  • 佰朔资本:沪指跌0.23%,金融板块集体上扬,半导体等板块下挫
  • vue使用Export2Excel导出表格
  • 倒推因子分解法——C语言实现
  • 象过河在线进销存软件——简单、高效、智能,让生意更简单!
  • Qt-高DPI显示器
  • 大数据-119 - Flink Window总览 窗口机制-滚动时间窗口-基于时间驱动基于事件驱动
  • “声”临其境:iKF Ultra 降噪耳机,音乐与静谧的完美融合
  • 基于百度AIStudio飞桨paddleRS-develop版道路模型开发训练
  • 鸿蒙轻内核A核源码分析系列四(3) 虚拟内存
  • 视频监控管理平台LntonAIServer视频智能分析噪声检测应用场景
  • 【JUC】13-原子类
  • 如何在算家云搭建MindSearch(智能搜索)
  • [N1CTF 2018]eating_cms1
  • 【Redis】redis5种数据类型(string)
  • blender云渲染来了,blender云渲染教程!
  • CTFHub技能树-Git泄漏-Log
  • 5.测试用例设计方法
  • 移动端测试