待辦事項

來自 PostgreSQL wiki
(從 XML Todo 重定向)
跳轉到導航跳轉到搜索

此列表包含一些已知的 PostgreSQL 错误、一些功能请求,以及一些我们甚至不确定是否想要的东西。其中许多项目很困难,有些可能是不可能的。如果你想参与一个项目,请先阅读 开发者常见问题解答。还有一個 開發信息頁面

  • Incomplete item  - 标记不完整項目
  • [D] Completed item - 標記已完成的更改,將在 PostgreSQL 17 版本中出現。

随着时间的推移,可能會清楚地發現,待办事项已经过时,或者由于其他原因而被判定為太具争议性或不值得投入开发工作。这些项目应该被放到 不值得做 页面中。

有关编辑此列表的帮助,请参阅 Talk:Todo请勿在未在 邮件列表 上进行讨论的情况下添加或删除此处項目。

開發流程

开发人员警告:不幸的是,此列表不包含开始编码某个功能所需的所有信息。其中一些项目自添加以来可能已变得不必要——另一些可能需要,但实现可能不明确。在选择下面列出的项目时,请做好首先讨论功能价值的准备。不要假设你可以选择一个项目,编码它,然后期望它被提交。在开始编码之前,始终在 Hackers 列表中讨论设计。流程应该是

    Desirability -> Design -> Implement -> Test -> Review -> Commit

管理

Incomplete item 检查服务器突然终止时正在进行的事務创建的未引用表文件
Incomplete item 允许在每个模块基础上指定 log_min_messages
这将允许管理员查看来自后端特定部分的更详细的信息,例如检查点、自动真空等。另一个想法是为每个模块允许单独的配置文件,或允许将任意 SET 命令传递给它们。另见 日志记录头脑风暴
Incomplete item 防止查询取消数据包被攻击者重播,尤其是在使用 SSL 时
Incomplete item 维护一个近似的 xid->"分配时间"映射。这将允许控制 hot_standby_feedback 对主服务器的最大影响,并且对于其他功能将很有用。

表空间

Incomplete item 允许 WAL 重播 CREATE TABLESPACE 在恢复计算机上的目录结构与原始目录结构不同时工作
Incomplete item 允许在基于 RAM 的分区上为未记录的表使用表空间
Incomplete item 允许将 toast 表移动到不同的表空间

统计收集器

Incomplete item 通过 pg_regress 测试 pgstat 很棘手且效率低下。考虑制作一个专门的 pgstat 测试套件。
Incomplete item 教统计收集器区分内部和叶子索引页

SSL

Incomplete item 允许从证书存储中自动选择 SSL 客户端证书

备用服务器模式

Incomplete item 防止从服务器环境继承的变量被用于建立流式复制连接

数据类型

Incomplete item 添加对公共 SYNONYMs 的支持
Incomplete item 考虑为正则表达式使用特殊数据类型
Incomplete item 允许从现有枚举数据类型中删除枚举值
Incomplete item 添加忽略点重叠的重叠几何运算符

數組

Incomplete item 允许为数组元素使用单字节头存储

文本搜索

Incomplete item 考虑将大于 1 兆字节的字符串的错误更改为警告
Incomplete item 改进默认解析器,以更容易地添加新令牌
Incomplete item 添加其他支持函数

XML

Incomplete item 添加 XML Schema 验证和 xmlvalidate 函数 (SQL:2008)
Incomplete item 添加 xmlvalidatedtd 变体以支持针对 DTD 进行验证?
Incomplete item Relax-NG 验证;libxml2 已经支持了。
Incomplete item 添加来自 SQL:2006 的函数:XMLDOCUMENT、XMLCAST、XMLTEXT
Incomplete item 在 XMLELEMENT 等地方添加 XMLNAMESPACES 支持
Incomplete item 报告 XSLT 库返回的错误
Incomplete item XML Canonical:将 XML 文档转换为规范形式以进行比较。libxml2 支持此功能。
Incomplete item 添加格式化的 XML 输出选项
解析文档并以缩进形式重新序列化它。libxml2 可能支持此功能。
Incomplete item 添加 XMLQUERY(来自 SQL/XML 标准)
Incomplete item 允许 XML 分割
在某些情况下,分割可能是更好的选择(如果不需要完全保留 XML 文档,例如,如果我们已经开发了只理解关系数据的工具。这将是一个单独的模块,它实现带注释的模式分解技术,类似于 DB2 和 SQL Server 的功能。)
Incomplete item XPath:在根目录添加 <x> 会导致问题 [1] [2] [3]
Incomplete item 验证 Xpath 转义行为

函数

Incomplete item 在 LIKE 查询中实现 Boyer-Moore 搜索
Incomplete item 防止恶意函数以不知情的用户的权限执行
索引函数是安全的,因此 VACUUM 和 ANALYZE 也是安全的。触发器、CHECK 和 DEFAULT 表达式以及规则仍然容易受到攻击。
Incomplete item 修复 /contrib/btree_gist 对 inet 索引的实现

多语言支持

Incomplete item 添加 NCHAR(与普通 varchar 区分)
Incomplete item 将排序规则与文本搜索配置集成
Incomplete item 将排序规则与 to_char() 和相关函数集成
Incomplete item 支持排序规则敏感的相等和哈希函数
Incomplete item 支持多个同时字符集,根据 SQL:2008
Incomplete item 修复 contrib/fuzzystrmatch 以支持多字节编码
Incomplete item 更改多字节函数的内存分配,以便在转换函数内分配内存
目前我们根据最坏情况使用量预先分配内存。
Incomplete item 添加对在多字节字符上使用不区分大小写的正则表达式的能力
目前它适用于 UTF-8,但不适用于其他多字节编码
Incomplete item 改进发送到客户端的连接启动消息的编码
目前,一些身份验证错误消息以服务器编码发送
Incomplete item Windows:缓存 MessageEncoding 转换以供事务外使用

视图和规则

Incomplete item 提高通过 ALTER TABLE 修改视图的能力

SQL 命令

Incomplete item 将 CORRESPONDING BY 添加到 UNION/INTERSECT/EXCEPT
Incomplete item 改进对 UNION/INTERSECT/EXCEPT 的未知(NULL 或带引号的文字)结果列的类型确定
Incomplete item 允许在同一事务中创建和删除临时表,以及访问 ON COMMIT DELETE ROWS 临时表时,准备事务
Incomplete item 允许在涉及条件语句的规则中使用 NOTIFY
Incomplete item 允许 NOTIFY 处理事务环绕
Incomplete item 允许在模式上进行 LISTEN
Incomplete item 简化删除在多个数据库中具有对象的 роли
Incomplete item 添加对 WITH RECURSIVE ... CYCLE 的支持
Incomplete item 添加 DEFAULT .. AS OWNER 以便以表所有者的身份执行权限检查
这对 SERIAL nextval() 调用和 CHECK 约束很有用。
Incomplete item 使用 catalogs.sgml 中的信息在系统表/列上添加注释
理想情况下,这些信息将自动从 SGML 文件中提取。
Incomplete item 防止指定冲突的事务读/写选项
Incomplete item 允许 PREPARE 游标
Incomplete item 让 DISCARD PLANS 丢弃由函数缓存的计划
DISCARD ALL 应该做同样的事情。
Incomplete item 避免对包含易变表达式的 BETWEEN 和 IN 参数进行多次计算

CREATE

Incomplete item 允许 CREATE TABLE AS 为 SELECT col1 等复杂表达式确定列长度
Incomplete item 让 WITH CONSTRAINTS 也创建约束索引
未完成的项目 将 NOT NULL 约束信息移动到 pg_constraint
当前 NOT NULL 约束存储在 pg_attribute 中,没有指定其来源,例如主键。一个明显的问题是,删除 PRIMARY KEY 约束不会删除 NOT NULL 约束的指定。另一个问题是,我们应该强制 NOT NULL 从父表传播到子表,就像 CHECK 约束一样。(但是,删除 PRIMARY KEY 会影响子表吗?)
未完成的项目 防止并发 CREATE TABLE 有时返回一个神秘的错误消息
未完成的项目 添加 CREATE SCHEMA ... LIKE 用于复制架构
未完成的项目 修复 CREATE OR REPLACE FUNCTION,使其不会将依赖于该函数的对象置于不一致状态
未完成的项目 允许临时表默认情况下在所有会话中以空的形式存在
未完成的项目 允许创建“distinct”类型
未完成的项目 考虑在首次在查询中使用临时表时分析它们
Autovacuum 无法分析或清理临时表。

更新

未完成的项目 研究在读提交模式下看到不一致的行版本的自引用 UPDATE
未完成的项目 提高重新检查已更新行的 EvalPlanQual 机制的性能
这与前面的项目有关,该项目质疑它是否具有正确的语义
未完成的项目 添加一个系统,当表前面有大量空闲空间时,禁用 HOT 和块本地更新,并自动更新表尾部的元组。
这将元组更多地移动到表的前面,增加了后续 VACUUM 操作可以截断表部分的机会。

更改

未完成的项目 让 ALTER TABLE RENAME 序列重命名 SERIAL 列
未完成的项目 添加 ALTER DOMAIN 用于修改底层数据类型
未完成的项目 允许 ALTER TABLESPACE 将表空间移动到不同的目录
未完成的项目 允许将系统表移动到其他表空间,在可能的情况下
当前,非全局系统表必须位于默认数据库表空间中。全局系统表永远不能移动。
未完成的项目 让 ALTER INDEX 更新使用该索引的约束的名称
未完成的项目 通过为每列记录显示 ID、存储 ID 和永久 ID 来允许列显示重新排序?
未完成的项目 允许通过 ALTER TABLE 禁用(并重新启用)索引
未完成的项目 添加 ALTER OPERATOR ... RENAME
需要考虑更改运算符优先级的影响

聚类

未完成的项目 自动维护表的聚类
这可能需要一些后台守护进程在低使用率期间维护聚类。它可能还需要表只部分填充,以便更容易地重新组织。另一个想法是创建一个合并的堆/索引数据文件,这样索引查找会自动访问堆数据。第三个想法是将堆行存储在散列组中,可能使用用户提供的散列函数。
未完成的项目 允许对部分索引使用 CLUSTER

复制

未完成的项目 允许 COPY 尽早报告错误
未完成的项目 允许 COPY FROM 批量创建索引条目
未完成的项目 允许阻塞的 COPY 在后端终止时退出

GRANT/REVOKE

未完成的项目 允许删除具有连接权限的角色

声明游标

未完成的项目 防止 DROP TABLE 删除其自身打开游标引用的表?
未完成的项目 提供有关调用易失性函数的游标行为的一些保证

SHOW/SET

未完成的项目 理清使用字节中的值和返回对象计数的 SHOW 之间的差异

分析

未完成的项目 改进 ANALYZE 计算存疑元组的方式
未完成的项目 通过使 catcache 和 syscache 可刷新或有界,减少在单个命令中分析许多表时的内存使用。

解释

未完成的项目 当估计的行数与实际的行数相差指定的百分比时,让 EXPLAIN ANALYZE 发出 NOTICE 消息
未完成的项目 让 EXPLAIN ANALYZE 将行报告为浮点数
未完成的项目 让 EXPLAIN ANALYZE 报告 HashAggregate 的桶和内存使用情况


窗口函数

参见 窗口函数的待办事项

未完成的项目 支持创建用户定义的窗口函数
我们有能力创建用 C 编写的新的窗口函数。值得花精力创建允许它们用 PL/pgsql 等编写的 API 吗?
未完成的项目 调查 tuplestore 性能问题
tuplestore_in_memory() 只是一个权宜之计,我们应该尝试正确解决它。tuplestore_advance 似乎也是一个薄弱环节。
未完成的项目 Agg 和 WindowAgg 之间真的需要这么多重复代码吗?
未完成的项目 教导规划器以最佳顺序评估多个窗口
目前,窗口总是按照查询指定的顺序进行评估。
Incomplete item 在窗口聚合中实现 DISTINCT 子句
一些专有的 RDBMS 已经实现了它,因此它有助于从这些数据库中移植。

完整性约束

Incomplete item 改进可延迟唯一约束,以应对冲突较多的情况
当前实现为每个潜在的冲突行触发一个触发器。对于一次更改多个键值的更新,这可能无法很好地扩展。

参照完整性

Incomplete item 添加 MATCH PARTIAL 参照完整性
Incomplete item 更改数组到元素的外部键约束,使其表示数组中的元素?
Incomplete item 修复级联参照触发器对级联表进行更改时,看到表处于中间状态的问题
Incomplete item RI 强制触发器中的 ri_KeysEqual 检查是否仍然必要?

检查约束

Incomplete item 仅在受影响的列更改时运行检查约束
Incomplete item 在添加列的同一命令中添加检查约束时,不要扫描表

服务器端语言

Incomplete item 为除 PL/PgSQL 之外的语言添加对多态参数和返回值类型的支持
Incomplete item 为除 PL/PgSQL 之外的语言添加对 OUT 和 INOUT 参数的支持
Incomplete item 添加更细粒度的函数规范,这些函数接受任意数据类型
Incomplete item 允许 SPI 中使用可保持游标
Incomplete item 重新思考查询计划缓存和 SQL 语言函数中解析分析的时序
它们应该像 plpgsql 函数一样工作...
Incomplete item 允许 PL/Perl 中使用正则表达式操作,在非 UTF8 编码的数据库中使用 UTF8 字符

PL/pgSQL

Incomplete item 允许列出记录列名,并通过变量访问记录列,例如 columns := r.(*), tval2 := r.(colname)
Incomplete item 允许将行和记录变量设置为 NULL 常量,并允许对这些变量进行 NULL 测试
因为行不是标量,所以不允许从 NULL 值标量赋值。
Incomplete item 考虑在 search_path 更改时保留单独的缓存副本
Incomplete item 改进对 NULL 行值和 NULL 行的处理
Incomplete item 改进 PERFORM 对 WITH 查询的处理或记录限制

PL/Python

Incomplete item 创建一个新的受限执行类,它将允许将函数参数作为局部变量传递。将它们作为全局变量传递意味着函数不能递归调用。
Incomplete item 在 SPI 接口之上添加一个符合 DB-API 的接口
Incomplete item 对于返回 setof record 且具有复合类型的函数,缓存复合类型的 I/O 函数

客户端

Incomplete item 将 pg_resetxlog 输出拆分为前一部分和后一部分
Incomplete item 改进 pg_rewind

psql

Incomplete item 将 psql 反斜杠数据库信息移到后端,使用助记符命令?
这将允许非 psql 客户端从数据库中提取与 psql 相同的信息。
Incomplete item 在 psql 中为所有对象一致地显示权限信息
Incomplete item 添加一个 \set 变量来控制 \s 是否显示行号
另一个选项是添加 \#,它列出行号,并允许命令执行。
Incomplete item 在详细的错误报告中包含符号 SQLSTATE 名称
Incomplete item 添加一个选项,在空格边界处换行列值,而不是在固定宽度处截断它们。
目前,“wrapped”格式将值截断为固定宽度。也许换行符可以使用 W3C 规范中记录的相同算法。
Incomplete item 修复 FETCH_COUNT 以处理 SELECT ... INTO 和 WITH 查询
Incomplete item 防止 psql 在重新连接后发送剩余的单行多语句查询
Incomplete item 使用 LIKE 改进选项卡补全的速度
Incomplete item 添加对 Unicode 图形簇的处理

pg_dump / pg_restore

Incomplete item 以允许将转储加载到不同名称的数据库中的方式转储数据库上的安全标签和注释
Incomplete item 将完整对象名称添加到标签字段中。例如,对于运算符,我们需要 '=(integer, integer)',而不是仅仅是 '='。
Incomplete item 避免在 pg_dumpall 输出中使用依赖于平台的区域设置名称
使用本机区域设置名称会阻碍将转储移植到其他平台。一种可能的解决方案是让 CREATE DATABASE 接受一组商定的区域设置名称,并将其修复为符合平台的要求。
Incomplete item 在选择性转储中,允许转储对象及其所有依赖项
Incomplete item 在干净模式下停止在 DROP TYPE 命令中转储 CASCADE
Incomplete item 允许 pg_restore 同时加载单个表的 COPY 数据的不同部分
Incomplete item 在转储/恢复期间保留大型对象的稀疏存储
Incomplete item 防止 PL/pgSQL 注释在非超级用户恢复中引发错误
Incomplete item 延迟 REFRESH MATERIALIZED VIEW,直到创建依赖索引
Incomplete item 删除或记录 --data-only 的行为

pg_upgrade

Incomplete item 处理大型对象注释
这很难做到,因为大型对象在加载 --schema-only 时不存在。
Incomplete item 考虑使用 pg_depend 在 version.c 中检查对象使用情况
Incomplete item 通过将 pg_statistic 作为平面文件转储来迁移它,这样就不需要分析
Incomplete item 找到更简洁的方法来启动/停止用于升级的专用服务器
Incomplete item 想要更改的内容,可以防止使用 pg_upgrade 进行升级

ecpg

Incomplete item 文档
记录 ecpg 和 SQL 标准之间的差异以及有关 Informix 兼容性模块的信息。
Incomplete item 解决输入描述符/变量的基数 > 1 吗?
Incomplete item 添加语义检查级别,例如检查表是否存在
Incomplete item 修复对作为数组的 DB 属性的处理
Incomplete item 如果指定了 PRECISION 或 SCALE 值,则 sqlwarn[6] 应为 'W'
Incomplete item 使 SET CONNECTION 线程感知,非标准?
Incomplete item 允许多维数组
Incomplete item 实现 COPY FROM STDIN
Incomplete item 提供一种方法来指定 bytea 参数的大小
Incomplete item 允许重复使用游标名称变量

libpq

Incomplete item 添加 PQexecf(),它允许复杂的参数替换
Incomplete item 将 SQLSTATE 和严重性添加到 libpq 本身生成的错误中
Incomplete item 添加对 libpq 的接口/ipaddress 绑定的支持
Incomplete item 在收到 FATAL 错误时记住它,这样它就不会对会话关闭的原因表示无知
Incomplete item libpq 异步 API 的管道支持以及使用它的数组值 PQexecPrepared

触发器

Incomplete item 改进延迟触发器队列的存储
现在所有延迟触发器信息都存储在后端内存中。这可能会耗尽非常大的触发器队列的内存。此项涉及将大型队列转储到文件,或执行某种类型的连接以处理所有触发器,某些批量操作或位图。
Incomplete item 在禁用触发器的情况下,允许 pg_dump 使用 ALTER TABLE ADD FOREIGN KEY
如果已知转储有效,则允许添加外键,而无需重新验证数据。
Incomplete item 当在父表上定义语句级触发器时,让它们仅在父表上触发,并且仅在适当的情况下触发子表触发器
Incomplete item 加强触发器权限检查
Incomplete item 允许在视图上创建 BEFORE INSERT 触发器
Incomplete item 添加数据库和事务级触发器
Incomplete item 避免 AFTER 触发器函数需要返回值
Incomplete item 允许创建内联触发器

继承

Incomplete item 允许跨继承表的唯一索引(需要多表索引)
  • Postgres 11 允许跨分区创建唯一索引,前提是分区键是索引的一部分。
Incomplete item 研究 ALTER TABLE / SET SCHEMA 是否应该在继承层次结构上工作(因此支持 ONLY)
Incomplete item ALTER TABLE 变体有时支持递归,有时不支持,但这记录得很差或没有记录,然后 ONLY 标记将被静默忽略。澄清文档,并在不支持的情况下拒绝 ONLY。

索引

Incomplete item 当 UPDATE 未修改列时,防止索引唯一性检查
即使列未被 UPDATE 修改,也会在更新列时执行唯一性(索引)检查。但是,HOT 已经在常见情况下对此进行了短路,因此更多工作可能没有帮助。
Incomplete item 考虑对索引列和表达式索引使用更大的统计目标。
Incomplete item 允许同时创建多个索引,理想情况下通过单个堆扫描
pg_restore 允许并行索引构建,但它是通过子进程完成的,并且没有 SQL 接口。集群绝对可以从中受益。
Incomplete item 考虑在插入 B 树索引之前对条目进行排序
Incomplete item 考虑将“effective_io_concurrency”用于索引扫描
当前仅位图扫描使用此功能,这可能很好,因为大多数多行索引扫描使用位图扫描。
Incomplete item 允许 GIN 索引用于排除约束
Incomplete item 允许在第一列基数较低的 B 树索引上进行“松散”扫描
Incomplete item 允许对多列 B 树索引进行“跳过”扫描。这意味着应用类似于 多维访问方法 (MDAM) 论文中详述的技术
未完成项目  使计划器的“特殊索引操作符”机制可扩展
未完成项目  允许针对不支持索引仅扫描的索引使用索引仅 COUNT(*)
未完成项目  提高 GIN 性能
未完成项目  教 GIN 成本估算关于“快速扫描”的信息
未完成项目  允许使用非日志索引

GIST

未完成项目  为几何数据类型添加更多 GIST 索引支持
未完成项目  允许 GIST 索引创建更复杂的索引类型,例如数字树(参见 Aoki)
未完成项目  解决 contrib/seg 和 contrib/cube GiST 支持中的性能问题
未完成项目 GiST 索引对数组的支持

哈希

未完成项目  为哈希索引添加 UNIQUE 功能
未完成项目  允许使用多列哈希索引

排序

未完成项目  考虑在排序之前取消对键进行压缩
未完成项目  允许对细长元组进行排序以使用更多可用内存。
现在不再受 MaxAllocSize 的限制,也不再受 INT_MAX 的限制。

缓存使用

未完成项目  考虑在不同级别自动缓存语句
未完成项目  考虑允许更高优先级的查询使引用的共享缓冲区页面在内存中停留更长时间
未完成项目  解决由负 catcache 条目引起的内存泄漏

真空

未完成项目  允许 VACUUM FULL 和 CLUSTER 更新可见性映射
未完成项目  现在真空并不总是扫描整个堆,因此改进对总关系元组计数的跟踪
未完成项目  使 FSM 倾向于返回堆文件开头的空闲空间,希望 VACUUM 可以截断末尾的空页
未完成项目  添加一种无需独占锁定即可压缩表的方法,类似于 9.0 之前的 VACUUM FULL
未完成项目  提供更多信息以改进用户端对关系中死空间膨胀的估计
未完成项目  减少真空执行的表扫描次数
未完成项目  按物理顺序而不是逻辑顺序真空 Gin 索引
未完成项目  避免为小型表创建空闲空间映射

自动真空

未完成项目  如果表几乎为空,则发出日志消息建议使用 VACUUM FULL?
未完成项目  防止长期存在的临时表导致冻结 xid 提升饥饿
问题在于,自动真空无法真空它们以设置冻结 xid;只有创建它们的会话才能。
未完成项目  防止自动真空在上次真空运行期间旧事务仍在运行时运行
未完成项目  在修改子表时执行父表的自动分析
未完成项目  即使在运行自动分析时,也允许设置可见性映射全可见位
未完成项目  改进小型表的自动分析阈值
未完成项目  使自动真空调度更智能

锁定

未完成项目  解决当同一外部事务的多个子事务持有不同类型的锁,并且其中一个子事务中止时出现的问题
未完成项目  当页面清理锁与已固定的共享缓冲区发生冲突时,改进死锁检测
未完成项目  检测涉及 LockBufferForCleanup() 的死锁
未完成项目  允许更精细地控制在死锁中谁被取消

启动时间改进

未完成项目  允许后端在不重启的情况下更改其数据库
这使得服务器启动速度更快。

预写日志

未完成项目  消除在修改页面之前将完整页面写入 WAL 的需要
当前,为了防止部分磁盘页面写入,我们在修改页面之前将完整页面映像写入 WAL,以便在恢复期间纠正任何部分页面写入。这些页面也可以从时间点存档文件中删除。
未完成项目  当关闭完整页面写入时,将 CRC 写入 WAL 并在恢复时检查文件系统块
如果 CRC 检查在恢复期间失败,请记住该页面,以防该页面的后续 CRC 正确匹配。困难在于提示位没有记录在 WAL 中,这意味着有效页面可能与之前的 CRC 不匹配。
未完成项目  在文件系统写入期间写入完整页面,而不是在缓冲区缓存中修改页面时写入
这使得大多数完整页面写入可以在后台写入器中进行。它可能会导致在恢复期间将 WAL 应用到部分写入的页面时出现问题,但随后将从 WAL 替换完整页面。
未完成项目 允许 WAL 信息恢复损坏的 pg_controldata
未完成项目 通过允许预取多个页面来加速 WAL 恢复
这应该使用与预取通用基础设施相同的基础设施来完成,以避免在 WAL 重放中引入复杂的易出错代码。
未完成项目 通过增加锁粒度来提高 WAL 并发性
未完成项目 让资源管理器报告其状态变化的持续时间
未完成项目 关闭由长期运行的只读后端在 *nix 中持有的已删除 WAL 文件
未完成项目 使用更少的字节来存储 WAL 记录的信息。
WAL 记录格式非常冗长,通常包含比重做和解码所需的字节数更多的字节。通过更新 WAL 格式,我们可以将例如 pgbench 的平均 WAL 记录大小减少几个百分点。

优化器 / 执行器

未完成项目 改进几何运算符的选择性函数
未完成项目 考虑添加一种有用且便捷的方式来查看规划器拒绝的路径。OPTIMIZER_DEBUG 在某种程度上做到了这一点,但它似乎使用很少,并且必须在编译期间启用。
未完成项目 记录优化器行估计与实际找到的行数大不相同的地方的语句?
未完成项目 考虑使用压缩退火来搜索查询计划
这可能会取代 GEQO。
未完成项目 添加规划器对基数减少函数的支持
estimate_num_groups 当前假设(在其标题注释中的第 2 项中)任何属性上的函数都不会有意义地减少从该属性生成的基数(组数),即 num_groups(a) ~= num_groups(f(a))。但是,对于截断函数,例如 int4mod、date_trunc 或 date_bin,此假设是错误的,会导致计划显着高估组数。

哈希

未完成项目 允许单批哈希连接保留外部路径键
未完成项目 避免在同一个查询期间多次构建相同的哈希表
未完成项目 避免对 distinct 进行哈希,然后对哈希连接重新哈希

后台写入器

未完成项目 考虑让后台写入器在写入页面之前更新事务状态提示位
实现这一点需要后台写入器能够访问系统目录和事务状态日志。
未完成项目 考虑将后台写入器发现可重复使用的缓冲区添加到空闲列表
未完成项目 根据活动自动调整 bgwriter_delay,而不是使用固定间隔
未完成项目 考虑是否增加 BM_MAX_USAGE_COUNT 会提高性能
未完成项目 测试从后台写入器调用 PreallocXlogFiles() 是否有助于解决 WAL 段创建延迟

资源的并发使用

未完成项目 对数据执行异步 I/O 以加快随机预读
异步 I/O 允许将多个 I/O 请求发送到磁盘,结果异步返回。上面的补丁在 8.4 之后就已经应用了,但仍然需要弄清楚如何有效地处理普通的索引扫描。

TOAST

未完成项目 允许用户配置 TOAST 阈值
未完成项目 减少不必要的 deTOASTing 案例
未完成项目 减少重复 de-TOASTing 值的成本

监控

未完成项目 让 pg_stat_activity 以正确的客户端编码显示查询字符串
未完成项目 允许报告由于 wal_buffer 循环导致的停顿
未完成项目 重构 pg_stat_database 列 tup_returned 和 tup_fetched 以返回有意义的值
未完成项目 改进 pg_stat_statements 对绑定“IN”变量的处理

其他性能

未完成项目 允许通过操作系统配置后端优先级
尽管后端优先级可能在锁定等待期间造成优先级反转,但研究表明,这不是一个大问题。
未完成项目 考虑 CommandCounterIncrement() 是否可以避免其 AcceptInvalidationMessages() 调用
未完成项目 考虑当两个关系都需要形成对第三个关系的索引扫描限定条件时进行笛卡尔连接
未完成项目 考虑如果所有 NULL 都在后面,则不在磁盘上存储 NULL 位图
未完成项目 对大型 UPDATE / DELETE 进行排序,以便按照堆顺序完成
未完成项目 添加 work_mem 的自动调整
未完成项目 考虑减少更新元组提示位导致的 I/O
Incomplete item 在热备模式下回放vacuum记录时,避免读取B树页
Incomplete item 重构截断逻辑,使其更能抵御故障
这还包括不为截断或删除的关系写入脏缓冲区
Incomplete item 增强外键数据包装器,并行处理,分区,并可能添加全局快照/事务管理器以允许创建概念验证内置分片解决方案
理想情况下,这些增强功能和新功能也将可用于外部分片解决方案。
Incomplete item 考虑内置连接池

其他杂项

Incomplete item 处理服务器文件系统中文件名编码问题
Incomplete item 处理localeconv()输出中的编码问题
Incomplete item 在错误报告中提供模式名称和其他可从SQL GET DIAGNOSTICS获取的字段
Incomplete item 使用sa_mask来消除信号处理程序之间的竞争条件
Incomplete item 允许pg_export_snapshot()在热备服务器上运行
这将允许在这些服务器上进行并行 pg_dump。
Incomplete item 提供一种枚举和注销后台工作程序的方法
现在唯一注销 bgworker 的方法是从工作程序内部使用proc_exit(0)或使用BGW_NEVER_RESTART

源代码

Incomplete item 理顺initdb和bootstrap之间的职责划分
Incomplete item 通过在目标系统上生成zic数据库来允许交叉编译
Incomplete item 改进链接到应用程序的libpgport消息的NLS维护
Incomplete item 使用UTF8编码NLS消息,以便所有服务器编码都可以正确读取它们
Incomplete item 考虑使NAMEDATALEN更可配置
有人要求将128设置为默认值,但也有人担心存储和内存使用量以及性能。因此,可能更倾向于重新设计以使存储可变长度。
Incomplete item 研究信号和休眠唤醒的使用
Incomplete item 考虑简化内存上下文重置处理子上下文的方式
Incomplete item 实现非线程化的 Avahi 服务发现协议
Incomplete item 减少某些 64 位系统上的数据行对齐要求
Incomplete item 重构 TOAST 内部存储格式以提高灵活性
Incomplete item 考虑删除属性选项缓存
Incomplete item 重构 /contrib 部分

Windows

Incomplete item 允许psql在非美国代码页能够与反斜杠一起使用后使用readline
Incomplete item 改进信号处理
Incomplete item 在使用 MSVC 时支持 PGXS
Incomplete item 修复 MSVC NLS 支持,例如 to_char()
Incomplete item 在使用多个终端服务器会话时修复全局命名空间问题
Incomplete item 提高路径分隔符使用的一致性
Incomplete item 修复 Windows 上的交叉编译
Incomplete item 减少目录读取时的文件统计开销
Incomplete item 修复使用长文件路径时的挂起

线协议变更 / v4 协议


Incomplete item 允许动态字符集处理
Incomplete item 确保客户端能够在握手过程中确定发送的早期消息的编码
Incomplete item 让客户端指示数据库名称、用户名、密码以及服务器返回的预身份验证错误消息的字符编码
Incomplete item 在固定标头中将数字版本发送到客户端
Incomplete item 添加解码后的类型长度/精度(即 typmod 信息)
Incomplete item 在可能的情况下将结果列标记为已知非空
Incomplete item 使用压缩
指定和实现线协议压缩。如果使用 SSL 透明压缩,希望避免在 SSL 仅配置为压缩时进行密钥协商和加密的开销。请注意,TLS 1.3 中正在删除压缩,因此我们确实需要自己做。
Incomplete item 更新客户端以使用新语句协议中的结果集数据类型、typmod、模式。表。列名称
Incomplete item 设置线格式协商协议
Incomplete item 确保升级到 4.1 协议版本能够顺利工作
Incomplete item 允许多状态身份验证(例如,尝试客户端对等,回退到 md5)
Incomplete item 允许重新验证
允许客户端在会话中间请求以不同用户重新验证,用于通过握手传递的连接池。
Incomplete item 在 CommandComplete 消息中标识受影响的对象?
Incomplete item 允许协商加密,STARTTLS样式,而不是强制客户端在连接之前决定使用 SSL 或!SSL
Incomplete item 允许延迟获取大型值,至少是行外 TOASTED 值
Incomplete item 添加针对二进制模式传输的类型会话级白名单
Incomplete item 向客户端发送分配给它的 xid
允许客户端在由于崩溃或连接丢失导致结果中断后,稍后询问服务器“此事务是否已提交?”
Incomplete item 在提交消息中报告 xlog 位置
通过提供客户端可以用来查看提交是否已复制到副本的令牌,帮助实现客户端侧故障转移
Incomplete item 对取消进行更改,使其更可靠,更安全
Incomplete item 阐明扩展查询协议中 statement_timeout 的语义
批处理和流水线查询在 statement_timeout 上具有意外的行为。客户端需要能够使用协议消息指定语句边界。
Incomplete item 创建一种更有效的方式来处理行外参数
Incomplete item 将事务划分与协议错误恢复分开(在 v3 中,两者都通过相同的 Sync 消息管理)

文档

Incomplete item 为 postgresql.conf 提供手册页
Incomplete item 如果它符合 SQL 标准,则记录对 N' ' 国家字符字符串文字的支持

奇特功能

Incomplete item 添加预解析阶段,将非 ISO 语法转换为支持的语法
这将允许为其他数据库编写的 SQL 在不修改的情况下运行。
Incomplete item 添加 Oracle 风格包的功能
包将是一个具有会话局部变量、公有/私有函数和初始化函数的模式。也可以在任何模式中实现这些功能,而根本不使用单独的“包”语法。
Incomplete item 添加自治事务
Incomplete item 提供查询进度指示