待辦事項
來自 PostgreSQL wiki
(從 XML Todo 重定向)
跳轉到導航跳轉到搜索此列表包含一些已知的 PostgreSQL 错误、一些功能请求,以及一些我们甚至不确定是否想要的东西。其中许多项目很困难,有些可能是不可能的。如果你想参与一个项目,请先阅读 开发者常见问题解答。还有一個 開發信息頁面。
随着时间的推移,可能會清楚地發現,待办事项已经过时,或者由于其他原因而被判定為太具争议性或不值得投入开发工作。这些项目应该被放到 不值得做 页面中。
有关编辑此列表的帮助,请参阅 Talk:Todo。请勿在未在 邮件列表 上进行讨论的情况下添加或删除此处項目。
開發流程
开发人员警告:不幸的是,此列表不包含开始编码某个功能所需的所有信息。其中一些项目自添加以来可能已变得不必要——另一些可能需要,但实现可能不明确。在选择下面列出的项目时,请做好首先讨论功能价值的准备。不要假设你可以选择一个项目,编码它,然后期望它被提交。在开始编码之前,始终在 Hackers 列表中讨论设计。流程应该是
Desirability -> Design -> Implement -> Test -> Review -> Commit
管理
- 允许在每个模块基础上指定 log_min_messages
- 这将允许管理员查看来自后端特定部分的更详细的信息,例如检查点、自动真空等。另一个想法是为每个模块允许单独的配置文件,或允许将任意 SET 命令传递给它们。另见 日志记录头脑风暴。
表空间
统计收集器
SSL
备用服务器模式
数据类型
數組
文本搜索
XML
- 允许 XML 分割
- 在某些情况下,分割可能是更好的选择(如果不需要完全保留 XML 文档,例如,如果我们已经开发了只理解关系数据的工具。这将是一个单独的模块,它实现带注释的模式分解技术,类似于 DB2 和 SQL Server 的功能。)
函数
多语言支持
视图和规则
SQL 命令
CREATE
- 将 NOT NULL 约束信息移动到 pg_constraint
- 当前 NOT NULL 约束存储在 pg_attribute 中,没有指定其来源,例如主键。一个明显的问题是,删除 PRIMARY KEY 约束不会删除 NOT NULL 约束的指定。另一个问题是,我们应该强制 NOT NULL 从父表传播到子表,就像 CHECK 约束一样。(但是,删除 PRIMARY KEY 会影响子表吗?)
- http://archives.postgresql.org/message-id/[email protected]
- http://archives.postgresql.org/message-id/[email protected]
- http://archives.postgresql.org/pgsql-hackers/2011-07/msg01223.php
- http://archives.postgresql.org/pgsql-hackers/2011-07/msg00358.php
- 如果父列具有 NOT NULL 约束,则防止 ALTER TABLE DROP NOT NULL 在子表上执行
更新
更改
聚类
复制
GRANT/REVOKE
声明游标
SHOW/SET
分析
解释
窗口函数
参见 窗口函数的待办事项。
完整性约束
键
参照完整性
检查约束
服务器端语言
PL/pgSQL
PL/Python
客户端
psql
pg_dump / pg_restore
- 避免在 pg_dumpall 输出中使用依赖于平台的区域设置名称
- 使用本机区域设置名称会阻碍将转储移植到其他平台。一种可能的解决方案是让 CREATE DATABASE 接受一组商定的区域设置名称,并将其修复为符合平台的要求。
pg_upgrade
- 想要更改的内容,可以防止使用 pg_upgrade 进行升级
- 32 位页面校验和
- 将元页添加到 GiST 索引
- 清理 hstore 的内部表示
- 删除元组信息掩码位 HEAP_MOVED_OFF 和 HEAP_MOVED_IN
- 修复 char() 索引尾随空格处理
- 对 GIN 操作类使用非排序感知比较
ecpg
libpq
触发器
继承
索引
- 允许在第一列基数较低的 B 树索引上进行“松散”扫描
- 关于:规划器中的松散索引扫描
- 在 -hackers 上,但使用“跳过扫描”而不是“松散索引扫描”:索引跳过扫描,以及 索引跳过扫描(新的 UniqueKeys)
- 允许对多列 B 树索引进行“跳过”扫描。这意味着应用类似于 多维访问方法 (MDAM) 论文中详述的技术
GIST
哈希
- 允许使用多列哈希索引
- 这要求在查询使用索引时指定所有列。
- 针对哈希索引的预写日志
排序
缓存使用
- 考虑在不同级别自动缓存语句
- 已解析的查询树
- 查询执行计划
- 查询结果
- 缓存的查询计划(之前称为:全局准备好的语句)
- PoC plpgsql - 强制使用自定义或通用计划的可能性
- 缓存/全局查询计划,自动准备
真空
自动真空
锁定
启动时间改进
预写日志
- 消除在修改页面之前将完整页面写入 WAL 的需要
- 当前,为了防止部分磁盘页面写入,我们在修改页面之前将完整页面映像写入 WAL,以便在恢复期间纠正任何部分页面写入。这些页面也可以从时间点存档文件中删除。
- 当关闭完整页面写入时,将 CRC 写入 WAL 并在恢复时检查文件系统块
- 如果 CRC 检查在恢复期间失败,请记住该页面,以防该页面的后续 CRC 正确匹配。困难在于提示位没有记录在 WAL 中,这意味着有效页面可能与之前的 CRC 不匹配。
- 在文件系统写入期间写入完整页面,而不是在缓冲区缓存中修改页面时写入
- 这使得大多数完整页面写入可以在后台写入器中进行。它可能会导致在恢复期间将 WAL 应用到部分写入的页面时出现问题,但随后将从 WAL 替换完整页面。
- 使用更少的字节来存储 WAL 记录的信息。
- WAL 记录格式非常冗长,通常包含比重做和解码所需的字节数更多的字节。通过更新 WAL 格式,我们可以将例如 pgbench 的平均 WAL 记录大小减少几个百分点。
- 更新 WAL 基础设施 跟踪一些正在进行的开发的进展
- Re: RFC: WAL 基础设施问题、更新和改进
优化器 / 执行器
- 添加规划器对基数减少函数的支持
- estimate_num_groups 当前假设(在其标题注释中的第 2 项中)任何属性上的函数都不会有意义地减少从该属性生成的基数(组数),即 num_groups(a) ~= num_groups(f(a))。但是,对于截断函数,例如 int4mod、date_trunc 或 date_bin,此假设是错误的,会导致计划显着高估组数。
哈希
后台写入器
资源的并发使用
- 对数据执行异步 I/O 以加快随机预读
- 异步 I/O 允许将多个 I/O 请求发送到磁盘,结果异步返回。上面的补丁在 8.4 之后就已经应用了,但仍然需要弄清楚如何有效地处理普通的索引扫描。
TOAST
监控
其他性能
- 考虑减少更新元组提示位导致的 I/O
- 提示位和写入 I/O
- Re: [HACKERS] 提示位和写入 I/O
- http://archives.postgresql.org/pgsql-hackers/2010-10/msg00695.php
- http://archives.postgresql.org/pgsql-hackers/2010-11/msg00792.php
- http://archives.postgresql.org/pgsql-hackers/2011-01/msg01063.php
- http://archives.postgresql.org/pgsql-hackers/2011-03/msg01408.php
- http://archives.postgresql.org/pgsql-hackers/2011-03/msg01453.php
其他杂项
源代码
- 考虑使NAMEDATALEN更可配置
- 有人要求将128设置为默认值,但也有人担心存储和内存使用量以及性能。因此,可能更倾向于重新设计以使存储可变长度。
- 从 32 更改为 64 时的讨论:[4] [5] [6] [7]
- 重新审视 NAMEDATALEN
- NAMEDATALEN 增加是由于非拉丁语系(包含有关可变长度存储的想法)
Windows
线协议变更 / v4 协议
- 使用压缩
- 指定和实现线协议压缩。如果使用 SSL 透明压缩,希望避免在 SSL 仅配置为压缩时进行密钥协商和加密的开销。请注意,TLS 1.3 中正在删除压缩,因此我们确实需要自己做。