8.3 版本变更记录

来自 PostgreSQL wiki
跳转到导航跳转到搜索

CVS 提交的完整文本

2007-09-26 18:36 tgl 备份和恢复方面的轻微改进

- 创建一个独立的 archive_mode GUC,archive_command 依赖于它

- recovery.conf 中的 %r 选项将最后一个重启点发送到恢复命令

- pg_standby 中使用 %r,更新了 README

- pg_standby 中其他代码的轻微清理

- 关于热备的文档现在提到了 pg_standby 和 %r

- log_restartpoints 恢复选项在每个重启点发出 LOG 消息

- 恢复结束时现在会显示最后一个事务结束时间,如 Warren Little 所要求;在每个重启点也会显示

- 如果需要,重启归档器以在关闭时带走 WAL 文件

Simon Riggs

2007-09-26 14:51 tgl 创建一个函数变量 "join_search_hook",允许插件覆盖规划程序的连接搜索顺序部分;这专门用于简化开发用于替换 GEQO 规划的插件。补丁由 Julius Stroffek 提供,我进行了编辑。我将 make_one_rel_by_joins 重命名为 standard_join_search,将 make_rels_by_joins 重命名为 join_search_one_level,以更好地反映它们在这个方案中的位置。

2007-09-26 06:57 meskes 应用了 ITAGAKI Takahiro <[email protected]> 提供的补丁,使 prepare 线程安全。

2007-09-25 21:10 tgl 在整数日期时间情况下,date2timestamp 和 date2timestamptz 需要检查溢出,因为 date 类型的合法范围实际上比 timestamp 的范围更广。问题由 Neil Conway 发现。

2007-09-25 20:32 tgl 根据 Chris Marcellino 的建议,在 Darwin >= 6.0(即 OS X 10.2 及更高版本)上使用 SYSV 信号量而不是 POSIX 信号量。这样可以避免消耗 O(N^2) 个文件描述符来支持 N 个后端。测试表明,对于小型安装来说,这差不多是平局,但大型安装可能会出现问题。

2007-09-25 18:21 tgl 更改 NUMERIC 数据类型的磁盘表示形式,以便 sign_dscale 字出现在 weight 之前,而不是之后。这将允许未来对表示形式进行二进制兼容的扩展,以支持紧凑格式,如 2007/06/18 左右在 pgsql-hackers 上讨论的那样。现在进行此更改的原因是,我们已经基本上破坏了从 8.2 到 8.3 进行简单就地升级的任何可能性,但从 8.3 到 8.4(或何时我们最终压缩 NUMERIC)可能可以保持数据兼容性。

2007-09-25 16:03 tgl 实时后台写入策略。此代码避免重新扫描不可能需要清理的缓冲区,并根据最近分配请求的移动平均值和可重用缓冲区的密度估计应尝试清理多少个缓冲区。该补丁还向 pg_stat_bgwriter 添加了几个额外的列,以帮助衡量 bgwriter 的有效性。

Greg Smith,在自身工作以及其他几位人士(尤其是 ITAGAKI Takahiro 的一个非常旧的补丁)的创意基础上进行构建。

2007-09-23 23:12 tgl 根据最近的各种讨论,简化并重命名一些 GUC 变量

* stats_start_collector 不再存在;我们始终启动收集器进程,除非由于设置统计 UDP 套接字的问题而无法启动。

* stats_reset_on_server_start 不再存在;考虑到 pg_stat_reset() 的可用性,它似乎毫无用处。

* stats_block_level 和 stats_row_level 合并到一个名为 "track_counts" 的单个变量中,该变量控制发送到收集器进程的所有报告。

* stats_command_string 重命名为 track_activities。

* log_autovacuum 重命名为 log_autovacuum_min_duration,以更好地反映其含义。

log_autovacuum 的更改不是兼容性问题,因为它在 8.3 之前并不存在。其他更改需要在发行说明中记录。

2007-09-23 21:29 adunstan 删除 "convert 'blah' using conversion_name" 功能,因为如果它生成文本,那就是编码漏洞,如果不是,它与规范不兼容,无论规范意味着什么(我们对此也不确定)。

2007-09-23 19:39 tgl 在 pg_dump 的代码中将线性搜索替换为二进制搜索,以根据 OID 查找对象。根据 nikitathespider 的抱怨。

2007-09-23 17:52 adunstan 为 build.bat 和 vcregress.bat 添加 Perl 替换。在适当的时候,.bat 文件将被修改为成为这些脚本的微型包装器,另外一个或两个 .bat 文件将消失。

2007-09-23 16:07 tgl 使 autovacuum 在 pg_stat_activity 中报告其当前活动的开始时间。根据 Jim Nasby 的抱怨。

2007-09-22 17:36 tgl backend/optimizer/plan/subselect.c,include/optimizer/cost.h:修复作为 initPlan 评估的 EXISTS 子查询的成本估计(因为它们与直接父查询无关)。我们原本将全部运行成本计入父节点,而忽略了实际上只需要为 EXISTS 获取一行这一事实。虽然这在大多数情况下只是个美观问题,但如果父查询本身是某个上层查询的子查询,则可能会影响规划结果。根据最近与 Steve Crawford 的讨论。

2007-09-21 14:24 tgl 将 tqual.c 测试更改为使用 !TransactionIdIsCurrentTransactionId,而不是 TransactionIdDidAbort,来处理 xmin 是当前事务的 XID 之一且元组已被删除的情况。xmax 也必须是当前事务的 XID 之一,因为其他人还看不到它,而且查看本地状态比查看共享状态来确定 xmax 是否已中止更便宜。根据 Heikki 的想法。

2007-09-21 13:36 tgl 在 TransactionIdIsInProgress() 中进行一些简单的性能改进。对于我们自己的事务和子事务的 XID,询问 TransactionIdIsCurrentTransactionId() 比查看共享内存更便宜。此外,xids[] 工作数组在任何给定进程中始终是相同的大小,因此只分配一次,而不是在每次调用时都进行 palloc/pfree;除了速度更快之外,这还让我们摆脱了一些 goto 语句,因为我们不再需要执行任何函数结束时的 pfree。这两个想法都是 Heikki 提出的。

2007-09-20 20:30 tgl 在 pl/tcl 中插入一个 hack 来禁用 Tcl 内置的 Notifier 子系统,该子系统有一个不好的习惯,会在后端启动多个线程,从而导致各种混乱。幸运的是,我们不需要它,而且最近的 Tcl 版本提供了一种简单的方法来禁用它。诊断和修复由 WSI 公司的 Steve Marshall、Paul Bayer 和 Doug Knight 提供。

2007-09-20 13:56 tgl HOT 更新。当我们更新元组而不更改其任何索引列,并且新版本可以存储在同一个堆页面上时,我们不再为新版本生成额外的索引条目。相反,索引搜索会沿着 HOT 链链接进行,以确保它们找到正确的元组版本。

此外,此补丁引入了能够以每页为基础“修剪”死元组的能力,而不必进行完整的 VACUUM 扫描以回收空间。但是,仍然需要 VACUUM 来清理死索引条目。

Pavan Deolasee,在其他一些人的帮助下。

2007-09-18 13:41 adunstan 关闭以前打开的漏洞,以防止无效编码的数据通过内置函数进入数据库,如最近在 -hackers 上讨论的那样。

chr() 现在返回数据库编码中的字符。对于 UTF8 编码的数据库,参数被视为 Unicode 代码点。对于其他多字节编码,参数必须指定严格的 ASCII 字符,否则会引发错误,如果参数为 0 也会引发错误。

调整 ascii() 使其仍然是 chr() 的反函数。

convert() 的双参数形式已不存在,三参数形式现在首先采用 bytea 作为参数并返回 bytea。为了弥补这种损失,引入了三个新函数: . convert_from(bytea, name) 返回 text - 将第一个参数从指定的编码转换为数据库编码 . convert_to(text, name) 返回 bytea - 将第一个参数从数据库编码转换为指定的编码 . length(bytea, name) 返回 int - 以指定的编码给出第一个参数的字符长度

2007-09-12 18:10 tgl 将项目指针的 lp_flags 字段重新定义为具有四种状态,而不是两个独立的位(其中一个位在堆页面中从未使用过,或者至少在很长一段时间内没有使用过)。这使我们能够灵活地添加 HOT 概念中的重定向项目指针和死项目指针,而不必使用 lp_off 和 lp_len 的魔术值之类的笨拙方法。状态值的选择是为了确保对于当前使用的状态(HOT 之前的状态),物理表示形式没有变化。

2007-09-12 16:49 adunstan 对 SQL 字面量和 COPY 输入执行转义后的编码有效性检查,以确保无效编码的数据无法通过这些方式进入数据库。

2007-09-10 20:06 tgl 安排 SET LOCAL 的效果持续到当前顶级事务结束,除非回滚或被附加到周围函数调用的相同变量的 SET 子句覆盖。经过讨论,这些似乎是最佳语义。请注意,这是一个不兼容的更改:在 8.0 到 8.2 中,SET LOCAL 的效果在子事务提交时消失(导致在 SQL 级别上毫无意义的行为)。

我利用这次机会稍微重写并简化了 GUC 变量的保存/恢复逻辑。旧的“暂定”值概念已经消失;它是我们还没有堆栈之前的遗留产物。此外,我们不再需要为每个嵌套级别创建堆栈条目,而只需要为变量值实际更改的那些级别创建条目。

2007-09-09 16:40 adunstan 为 pg_regress 的临时安装提供一个文件,用于指定非标准配置选项,通过 --temp-config 选项。通过 TEMP_CONFIG 设置在 make 文件中获取它。

2007-09-08 16:31 tgl 将以前确定快照 xmax 的方法(即,从 GetSnapshotData 调用 ReadNewTransactionId)替换为在事务提交或中止期间更新的 "latestCompletedXid" 变量。由于 latestCompletedXid 仅在必须独占锁定 ProcArrayLock 的地方写入,并且仅在必须共享锁定 ProcArrayLock 的地方读取,因此它没有向系统添加新的锁定要求,尽管它是集群范围的。此外,从快照获取中移除 ReadNewTransactionId 消除了同时获取 XidGenLock 和 ProcArrayLock 的需要。由于 XidGenLock 有时跨 I/O 保持,因此这可能是一个显著的优势。一些初步的基准测试表明,此补丁对平均吞吐量没有影响,但可以显著改善在 pgbench 中看到的最坏情况事务时间。概念由 Florian Pflug 提供,实现由 Tom Lane 提供。

2007-09-07 16:59 tgl 在退出没有 XID 的事务时,不要获取 ProcArrayLock;没有必要针对快照拍摄进行序列化,因为事务不会影响其他人的快照。根据讨论。此外,将关于事务和快照互锁的各种信息从代码注释中移出,并放入 access/transam/README 中,希望更连贯地讨论。

此外,还删除了一些现在已过时的注释,这些注释是关于必须强制写入一些 WAL 以说服 RecordTransactionCommit 执行其操作。

2007-09-06 20:58 tgl 允许 CREATE INDEX CONCURRENTLY 忽略其他数据库中的事务,根据 hubert depesz lubaczewski 的抱怨。补丁由 Simon Riggs 提供。

2007-09-06 13:31 tgl 使 eval_const_expressions() 在将类似于 null::char(3) 的内容简化为一个简单的 Const 节点时,保留 typmod。(对于非空值它已经可以工作,但当我们跳过严格强制函数的评估时则不行。)这可以防止在 bug #3598 中表现出的情况下丢失 typmod 知识。不幸的是,似乎没有好的方法在 8.1 和 8.2 中修复该错误,因为它们只是没有为简单的 Const 节点携带 typmod。

顺便说一下,我让 makeNullConst 的所有其他调用者也提供“真实”的 typmod 值,尽管我认为这在其他地方可能无关紧要。

2007-09-05 14:10 tgl 实现延迟 XID 分配:不修改任何数据库行的交易通常根本不会获取 XID。我们已经对子交易以这种方式做了,但此补丁将此概念扩展到顶级交易。在有大量短时只读交易的应用程序中,这应该会显着提高性能;不是从实际删除 XID 分配,而是从降低由 XID 消费率驱动的开销。我们添加了一个“虚拟事务 ID”的概念,以便即使没有常规 XID,也能唯一标识活动事务。这是一个轻量级的概念: VXID 的唯一性只在短期内得到保证,并且不会在磁盘上创建关于它们的记录。

Florian Pflug,Tom 进行了部分编辑。

2007-09-03 14:46 tgl 支持在 CREATE/ALTER FUNCTION、ALTER DATABASE、ALTER ROLE 中使用 SET FROM CURRENT。(实际上,它也可以作为普通语句使用,但我没有记录它,因为它似乎有点没用。)将 VariableResetStmt 与 VariableSetStmt 统一起来,并清理表示它们的一些旧代码。

2007-09-02 20:39 tgl 实现了函数局部 GUC 参数设置,如最近的讨论中所述。还有一些松散的结尾:我还没有处理 SET FROM CURRENT 的想法,并且还不确定我们是否对 SET LOCAL 与函数局部设置的交互感到满意。文档也比较简陋。

2007-08-29 13:24 tgl 根据讨论,放松了对 dbsize 函数的权限检查。回滚了对单个表大小函数的所有检查,因为数据库中的任何人都可以从 pg_class.relpages 获取近似值。允许具有目标数据库 CONNECT 权限的用户访问数据库大小(注意,默认情况下授予此权限)。如果用户对表空间具有 CREATE 权限(默认情况下*不*授予),或者如果表空间是当前数据库的默认表空间,则允许表空间大小(因为我们将此视为隐式允许使用表空间)。

2007-08-28 18:59 tgl 根据讨论,将使用 pgrowlocks() 所需的权限检查降低为对目标表具有 SELECT 权限。

2007-08-26 23:36 tgl 修复了几个错误行为,这些错误行为源于默认创建命名空间不一定在搜索路径中排在第一位(前面可能存在隐式模式)。例如

test=# set search_path TO s1;

test=# create view pg_timezone_names as select * from pg_timezone_names(); ERROR: "pg_timezone_names" 已经是视图

test=# create table pg_class (f1 int primary key); ERROR: 权限被拒绝: "pg_class" 是一个系统目录

你可能会期望这些命令在 s1 中创建请求的对象,因为以 pg_ 开头的名称不再被认为是保留的。发生的事情是,我们创建了请求的基本表,然后执行了其他命令(这里,CREATE RULE 或 CREATE INDEX),并且该代码传递了与原始命令相同的 RangeVar。由于该 RangeVar 的 schemaname = NULL,因此辅助命令认为它们应该进行路径搜索,这意味着它们会找到隐式位于 s1 前面的系统目录。

这非常接近于安全漏洞:如果辅助命令未应用权限检查,那么非特权用户就可以对系统目录进行模式修改。但据我所知,没有代码路径会发生没有检查的情况。这使得它只是一种奇怪的极端情况下的错误,对于那些想要将他们的表命名为与系统目录相同名称的人来说。

自 8.2 以来,相关代码已经发生了很大变化,这意味着此补丁在后分支中无法按原样工作。由于这是一个没有人从现场报告的极端情况,所以我不会费心尝试向后移植。

2007-08-26 21:39 tgl 删除了 'not in' 运算符 (!!=) 。这是从伯克利时代遗留下来的东西,自从我们有了 IN (SELECT ...) 功能后就过时了。它可以说是一个安全漏洞,因为它对它搜索的表没有应用任何权限检查,并且从未在任何地方记录过,所以删除它似乎比修复它更合适。

2007-08-26 21:24 tgl 要求对表具有 SELECT 权限才能执行 dblink_get_pkey()。当系统目录可供所有人读取时,这并不令人兴奋,但有些人试图锁定它们,并且不喜欢这种旁路……

2007-08-26 21:19 tgl 将 pg_relation_size 限制为关系所有者,将 pg_database_size 限制为数据库所有者,将 pg_tablespace_size 限制为超级用户。也许我们可以将第一个情况弱化,只要求 SELECT 权限,但这不适用于其他情况,因此使用所有权作为共同概念。

2007-08-26 20:57 tgl 使 currtid() 函数要求对目标表具有 SELECT 权限。虽然不清楚 TID 链接信息对恶意用户有什么大用处,但这些函数不坚持读取权限却令人意外。

2007-08-26 20:13 tgl 将 pgrowlocks 函数限制为超级用户。(这可能太严格了,但完全没有权限检查肯定是不好的。)清理了一些已弃用 API 的使用。

2007-08-26 19:59 tgl 将 pgstattuple 函数限制为超级用户。(这可能太严格了,但完全没有权限检查肯定是不好的。)清理了一些已弃用 API 的使用。

2007-08-26 17:44 tgl 使 ARRAY(SELECT ...) 当子选择返回零行时返回一个空数组,而不是 NULL。根据 Jens Schicke 的投诉。由于这更像是定义更改而不是错误,因此没有向后移植。

2007-08-20 21:12 tgl contrib/tsearch2 现在由于与核心添加的冲突而无法通过其回归测试。目前,我已将其从 contrib/Makefile 中排除。我们应该考虑将其转变为一个向后兼容的包。

2007-08-20 21:11 tgl Tsearch2 功能迁移到核心。这项工作的大部分由 Oleg Bartunov 和 Teodor Sigaev 完成,但我做了很多编辑工作,所以任何出现的问题可能都是我的错。

目前还没有文档,但让我们发布补丁,以便我们可以进行一些移植性测试。

2007-08-20 04:53 petere 添加配置选项 --with-system-tzdata 以使用操作系统时区数据库。

2007-08-18 21:41 adunstan 提供可读机器的 CSV 格式的日志文件。因此,将 redirect_stderr 重命名为 logging_collector。原始补丁来自 Arul Shaji,随后由 Greg Smith 修改,然后由我进行了大量修改。

2007-08-14 06:01 meskes 完成了使用新协议版本的主要重写 - 真正准备语句 - 添加了更多回归测试 - 添加了自动准备模式 - 使用 '$n' 作为位置变量,'?' 仍然可以通过 ecpg 选项使用 - 清理了一些源代码

2007-08-12 16:39 tgl 删除了我在 2001 年安装的“优化”,以使 repalloc() 在可行的情况下尝试就地扩大内存块。事实证明,这对于涉及 palloc/repalloc/pfree 重复循环的场景来说根本不好用:最终释放的块会进入下一个初始 palloc 请求的错误释放列表,因此我们无限地消耗内存。虽然可以防御这种情况,但优化仍然可以应用的案例数量显著减少,并且调整 StringInfo 缓冲区的初始大小使它几乎消失。似乎最好直接删除额外的复杂性。根据最近的讨论和测试。

2007-08-12 16:18 tgl 将 StringInfo 缓冲区的初始大小增加到 1024 字节(从 256 字节开始);同样将扫描程序的文字缓冲区的初始大小增加到 1024 字节(从 128 字节开始)。对回归测试的检测表明,这节省了大量的 repalloc() 流量 - 在一组测试中发生的调用次数从大约 6900 次减少到大约 3900 次。旧的大小是在 90 年代末选择的,当时的目标是比今天更小的机器。

2007-08-08 21:18 tgl 修改了 postmaster 启动/关闭逻辑,以消除持续的新的连接请求可能会阻止 postmaster 完成关闭或崩溃重启的问题。这是通过标记“死胡同”子进程来完成的,也就是说,我们知道它们只是为了告诉客户端它无法连接而启动的。这些进程被单独管理,因此不会让我们混淆,认为我们无法推进关闭或重启序列的下一个阶段,直到最后一步,我们必须等待它们耗尽,这样我们才能删除 shmem 段。根据 Keaton Adams 报告的错误行为的讨论。

由于此代码已经很怪异了,而且我第一次尝试修复问题使它变得完全无法理解,所以我借此机会用状态机风格对其进行了重写。这消除了一些重复的代码部分,并希望使一切都更清晰一些。

2007-08-07 02:25 neilc 调整了 MemoryContextStats() 的输出,以便子内存上下文的统计信息缩进两个空格,位于其父上下文的右侧。这应该使从 MemoryContextStats() 的输出中推断出内存上下文层次结构变得更容易。

2007-08-03 21:26 tgl 切换到使用 src/timezone 函数来格式化 postmaster 日志中显示的时间戳。这避免了与 Windows 特定的本地化时区名称相关的编码错误,并且通常似乎是一个好主意,可以防止其他潜在的平台相关问题。为了保留所有后端将在同一时区记录的现有行为,创建了一个新的 GUC 变量 log_timezone,它只能在系统范围内更改,并将与日志相关的计算引用到该区域,而不是 TimeZone 变量。

这修复了 Hiroshi Saito 报告的,xlog.c 启动时打印的时间戳可能在 Windows 上被错误地本地化的问题。但是,我们仍然需要为后分支中的该问题提供一个更简单的补丁。

2007-08-02 19:39 adunstan 将 session_start 移出 MyProcPort 结构,并将其设为一个名为 MyStartTime 的全局变量,以便我们可以为 CSVlogs 的所有进程创建 cookie。它在设置 MyProcPid 的任何地方都被设置。借此机会删除了对 log_line_prefix 中的 %s 和 %c 转义的 session 限制。

2007-08-01 18:45 tgl 支持可选的异步提交模式,在这种模式下,我们不会在报告事务已提交之前刷新 WAL。数据一致性仍然得到保证(与设置 fsync = off 不同),但崩溃可能会丢失最后几个事务的影响。补丁来自 Simon,Tom 进行了部分编辑。

2007-07-26 11:15 tgl 删除了 FileUnlink(),它没有被任何地方使用,并且与最近的补丁在删除时记录临时文件大小的交互不好。由于它未使用,因此似乎不值得修复。顺便说一下,使一些 elog 消息符合消息样式指南。

2007-07-25 18:16 tgl 安排将属于临时表的 TOAST 表放到名为 pg_toast_temp_nnn 的特殊模式中,与用于临时表本身的 pg_temp_nnn 模式并排。这允许 relcache 等低级代码识别这些表确实是临时的,这使得各种优化成为可能,例如不 WAL 记录更改以及使用本地缓冲区而不是共享缓冲区来访问。除了显而易见的性能优势外,这还提供了解决 bug #3483 的方法,在该错误中,其他后端意外地持有了对临时表的打开文件引用。该方案保留了 TOAST 表不在任何通常在搜索路径中的模式中的属性,因此它们不会与用户表名称冲突。

由于系统视图定义的变化,initdb 被强制执行。

2007-07-25 08:22 mha 将 DLLIMPORT 宏重命名为 PGDLLIMPORT,以避免与定义了 DLLIMPORT 的第三方包含文件(如 tcl)冲突。

2007-07-25 00:19 neilc 为 PL/PgSQL 实现了 RETURN QUERY。这为希望返回查询结果的 PL/PgSQL 返回集函数提供了一些方便的语法糖;它也应该比重复的 RETURN NEXT 语句更有效。基于 Pavel Stehule 早期的补丁。

2007-07-24 00:54 tgl 创建一个新的专用 Postgres 进程,“wal writer”,专门用于在适当的间隔写入和 fsync WAL。目前它只是尝试从后端卸载这项工作,但很快它将负责保证异步提交的事务被刷新到磁盘之前最大延迟。

这是 Simon Riggs 的异步提交补丁的一部分,它被单独提交到 CVS,因为后台 WAL writer 似乎是一个独立于异步提交功能的好主意。我将 walwriter.c 基于 bgwriter.c,因为它似乎是一种更合适的方式来处理信号;而 postmaster.c 中的启动/关闭逻辑更像是 autovac,因为我们希望 walwriter 在我们开始关闭检查点之前退出。

2007-07-23 21:53 alvherre 设置一个默认的 autovacuum vacuum_cost_delay 值为 20 毫秒,以避免过度的 I/O 利用率,根据讨论。

在进行此操作时,将 autovacuum vacuum 和分析阈值降低到 50 个元组。它比我最初提出的略高(即更保守),但比旧值更适合小表。

2007-07-23 13:52 mha 在 fe-auth.c 中使用 PQExpBuffer 来显示错误消息。顺带一提,将传入 PGconn 和其部分内容的函数更改为只传入 PGconn。

2007-07-23 06:16 mha Windows 上的 SSPI 身份验证。在对 Unix 服务器执行 Kerberos 时,GSSAPI 兼容客户端,以及使用 SSPI“协商”方法(Kerberos 或 NTLM)的特定于 Windows 的服务器端身份验证。

2007-07-17 23:13 momjian 正确调整 age() 秒以匹配较大单位的符号。来自 Tom 的补丁。

2007-07-17 01:02 neilc 实现 CREATE TABLE LIKE ... INCLUDING INDEXES。来自 NikhilS 的补丁,部分基于 Trevor Hardcastle 之前的补丁,并由我自己审查。

2007-07-16 13:01 tgl 允许 plpgsql 函数参数名称使用函数名称限定。使用此补丁,用户始终可以根据需要限定 plpgsql 变量名称以避免歧义。虽然这方面还有很多工作要做,但这种简单的更改消除了与 Oracle 的一个不必要的兼容性问题。根据讨论。

2007-07-15 18:18 tgl 由于 plpgsql 的扫描器使用 %option case-insensitive,因此 flex 的结果在理论上可能会因编译时区域设置而异。因此,强制它看到 LC_CTYPE=C 以确保一致的构建结果。(在实践中,这可能没有任何区别,因为我们对“标识符”的规范肯定包括任何可能的字母大小写对的两个端点。但这应该消除某些构建场成员报告的关于不明确字符类的警告。)

2007-07-14 22:15 tgl 拒绝 plpgsql 整数 FOR 循环中为零或负的 BY 步长,并在循环值在到达结束值的过程中溢出 int32 时表现正常。当省略 BY 时,避免无用的“SELECT 1”计算。避免从原始编码中遗留下来的 Datum 和 int4 之间的某些类型转换。

2007-07-12 17:13 tgl 我们的一些特定于端口的 dynloader 实现小心地将 pg_dlsym() 定义为返回 PGFunction 指针,而不仅仅是任何指向函数的指针。但很多都没有。通过在没有类型转换的两个调用站点插入显式类型转换,抑制未小心平台上的编译器警告。根据 Stefan 的建议。

2007-07-12 10:43 mha 启用 GSSAPI 使用 MSVC 构建。当启用 Kerberos 时,始终构建 GSSAPI,因为唯一支持的 Kerberos 库总是包含它。

2007-07-12 10:36 mha 支持 GSSAPI 构建,其中头文件为 而不是 ,例如 OpenBSD(可能是所有 Heimdal)。Stefan Kaltenbrunner

2007-07-10 09:14 mha 添加对 GSSAPI 身份验证的支持。

文档仍在编写中,将在稍后提交。

Henry B. Hotz 和 Magnus Hagander

2007-07-09 20:21 tgl 调整 processSQLNamePattern(),以便模式中的 $ 始终被字面匹配,无论是否被引用。由于我们允许 $ 作为标识符中的字符,因此这种行为很有用,而之前将 $ 视为正则表达式结束锚点的行为几乎没有用,因为模式本身就是自动锚定的。这会影响 psql 的 \d 命令的参数以及 pg_dump 的 -n 和 -t 开关。根据讨论。

2007-07-08 21:15 tgl 修复单用户模式,以便在等待输入时识别和处理中断(尤其是 SIGTERM 和 SIGQUIT),而不是仅在键入内容后处理。还在单用户模式下使 SIGQUIT 执行与 SIGTERM 相同的操作,即进行正常关闭并退出。由于从键盘触发 SIGQUIT 相对容易,人们可能会尝试使用它而不是 control-D,我们希望这会导致有序关闭。根据 Leon Mergen 的报告和随后的讨论。

2007-07-08 15:07 tgl 通过使用 PQconnectionUsedPassword() 而不是依赖于无密码错误消息的具体文本,来消除客户端代码对该文本的依赖。总有一天我们也许能够将该错误消息本地化,但在这种编码技术消失之前是无法做到的。

2007-07-08 13:12 joe 将非超级用户限制为使用密码认证的连接,以防止可能的权限提升。提供具有旧行为的新 SECURITY DEFINER 函数,但最初从 public 中撤销对这些函数的所有权限。根据列表讨论和 Tom Lane 提出的设计。另一种方法将用于分支,单独提交。

2007-07-08 13:11 joe 安排将身份验证请求类型保存在 PGconn 中。为 libpq 连接状态函数发明了一个新函数 PQconnectionUsedPassword(),如果服务器在身份验证期间要求密码,则返回 true,否则返回 false。这可能对客户端有用,但对帮助堵塞 dblink 中的权限提升路径立即有用。根据列表讨论和 Tom Lane 提出的设计。

2007-07-06 16:17 wieck 将新的 \usleep 命令更改为 \sleep,并带有一个可选的时间单位参数以指定 us、ms 或 s。根据 Peter E 的建议。

Jan

2007-07-06 09:36 wieck 添加了一个新的脚本元命令

\usleep [毫秒|:变量]

它可以在 -f 脚本中使用,以在其他命令之间插入思考时间。

Jan

2007-07-02 21:30 neilc 添加 ALTER VIEW ... RENAME TO,以及 ALTER SEQUENCE 的 RENAME TO 子句。之前可以使用 ALTER TABLE 重命名序列和视图,但这对于用户来说是重复的混淆来源。更新文档和 psql 选项卡补全。来自 David Fetter 的补丁;我自己进行了一些细微的修复。

2007-07-01 14:30 tgl 将 autovac 启动器中的最大睡眠间隔缩短为 1 秒,以便即使在 SA_RESTART 信号从头开始重新启动睡眠的机器上,它也能对 SIGQUIT 做出合理的快速响应。(整个区域都需要重新考虑,但目前使其像其他进程一样工作。)还有一些边际的样式清理。

2007-07-01 14:28 tgl 将 autovac 启动器更像是一个常规的后端,因为我们在告诉 bgwriter 启动关闭检查点之前等待它死亡。由于它与共享内存相连,这似乎比让它异步退出更谨慎。解决了昨天我对 CVS HEAD 中重复关闭检查点的抱怨。

2007-06-30 15:12 tgl 改进检查点的日志记录。来自 Greg Smith 的补丁,由 Heikki 修改,我做了一些细微的修改。

2007-06-29 13:07 alvherre 安排 autovacuum 工作程序中的 SIGINT 取消当前表并继续执行计划。将 SIGINT 的当前使用更改为终止工作程序为 SIGTERM,这保留了终止进程的旧行为。

来自 ITAGAKI Takahiro 的补丁,我做了一些编辑。

2007-06-28 02:40 neilc 将函数的易变性添加到 psql 的 \df+ 命令的输出中。相应地更新 psql 参考页面。

2007-06-27 20:02 tgl 实现“分布式”检查点,其中检查点 I/O 分散在相当长的一段时间内,而不是以突发方式输出。这仅适用于 bgwriter 执行的后台检查点;其他情况,例如关闭检查点,仍然以全速执行。

删除 bgwriter 中的“所有缓冲区”扫描以及相关的统计基础设施,因为当检查点本身被正确地节流时,这似乎不再很有用。

来自 Itagaki Takahiro 的原始补丁,由 Heikki Linnakangas 重写,我做了一些细微的 API 编辑。

2007-06-26 18:05 tgl 修复 PGXS 约定,以便可以针对 pg_config 程序未出现在 PATH 中的首位的 Postgres 安装构建扩展。根据 Eddie Stanley 的抱怨以及随后与 Fabien Coelho 等人的讨论。

2007-06-23 18:12 tgl 将实用程序命令的解析分析与 parser/analyze.c 分开(现在仅处理可优化语句),并将该代码放到一个新的文件 parser/parse_utilcmd.c 中。这有助于澄清和执行设计规则,即实用程序语句不应该在常规解析分析阶段处理;所有对其含义的解释都应该在将它们传递给 ProcessUtility 执行之后进行。(我们需要这样做,因为我们不会为计划缓存中的实用程序语句保留任何锁,也没有办法检测到它已过期。)

我们还可以简化 parse_analyze() 及其相关例程的 API,因为它们现在将始终返回一个 Query 结构。

顺便说一下,修复了关于尝试向现有临时表添加序列列的错误 #3403(这主要是 Heikki 的工作,但我们需要所有这些重构才能使其安全)。

2007-06-21 14:14 tgl 提供一个 HINT,当 GUC 变量似乎包含错误的单位规范时,列出允许的单位名称,根据讨论。顺便说一下,修复了代码以避免在转换单位时发生不必要的整数溢出,并在发生溢出时检测溢出。

2007-06-18 17:40 tgl 安排 quote_identifier() 和 pg_dump 不要引用根据语法未保留的关键字。未保留词列表已经变得很广泛,因此不必要的引用正变得有点令人讨厌。为此,将关键字类别知识添加到 keywords.c 的表中。(总有一天,我们也许能够从一个通用来源生成 keywords.c 的表和 gram.y 中的关键字列表。)目前,对 WITH 的状态撒谎,以便它仍然被引用——这是因为人们期望 WITH 在 SQL 递归查询补丁完成时成为保留词。

我没有强制使用 initdb,因为这不会影响磁盘上的任何内容;但请注意,一些回归测试已更改预期输出。

2007-06-15 16:56 tgl 调整每个数据类型 typmodin 函数的 API,以便它们传递一个字符串数组而不是一个整数数组,并允许在 typmods 中使用任何简单常量或标识符;例如 create table foo (f1 widget(42,'23skidoo',point)); 当然,typmodin 函数仍然需要将此信息打包到一个非负的 int32 中以进行存储,但这仍然是灵活性方面的一个有用的改进,尤其是考虑到如果你愿意将信息保存在一个辅助表中,你可以做几乎任何事情。由于我们还没有发布提供用户定义的 typmods 的版本,因此我们可以进行此更改。根据讨论。

2007-06-12 07:07 mha 通过将标准回归驱动程序拆分为两个部分并重复使用其中的一半,用 C 重写 ECPG 回归测试驱动程序。需要在没有 MSVC 构建的 shell 的情况下运行 ECPG 测试。

修复 MSVC 构建的 ECPG 线程测试(包括输出文件)。

Joachim Wieland 和 Magnus Hagander

2007-06-11 18:22 tgl 改进 UPDATE/DELETE WHERE CURRENT OF,以便它们可以从 plpgsql 中使用 plpgsql 定义的游标。其背后的机制是,主 SQL 引擎现在将接受“WHERE CURRENT OF $n”,其中 $n 是一个 refcursor 参数。不确定我们是否应该记录这一事实,或者将其视为实现细节。根据与 Pavel Stehule 的讨论。

2007-06-10 21:16 tgl 支持 UPDATE/DELETE WHERE CURRENT OF cursor_name,根据 SQL 标准。

在此过程中,允许在非 WITH-HOLD 游标中使用 FOR UPDATE;可能曾经有理由不允许这样做,但现在看来可以正常工作,如果你想通过游标选择一行然后以并发安全的方式更新它,这实际上是必需的。

原始补丁由 Arul Shaji 提供,由 Tom Lane 大量编辑。

2007-06-08 14:23 tgl 组织大型顺序扫描相互同步,以便当多个后端同时扫描同一关系时,每个页面(理想情况下)只读取一次。

Jeff Davis,Heikki 和 Tom 审查。

2007-06-07 17:45 tgl 重新定义 IsTransactionState(),使其仅在 TRANS_INPROGRESS 状态下返回 true,这是唯一安全启动数据库查询的状态。事实证明,除了两个调用者以外,所有调用者都认为这就是它的含义;而另外两个调用者则将其用作“GetTopTransactionId() 将返回非零 XID 吗?”的代理?由于它实际上是对此不可靠的指南,因此让这两个调用者始终调用 GetTopTransactionId(),然后在得到零结果的情况下进行处理。

2007-06-07 14:53 alvherre 避免在 pgstats 中丢失共享表的跟踪数据。Michael Fuhr 报告,Tom Lane 经过我的一个更混乱的建议后提供的补丁。

2007-06-06 19:00 tgl 修复文本连接,使其接受以前 Postgres 版本接受的所有合理情况。这处理了之前降级隐式转换为文本的补丁所留下的松散部分。为了避免破坏数组连接的理想行为,引入了一种新的多态伪类型“anynonarray”——添加的连接运算符实际上是 text || anynonarray 和 anynonarray || text。

2007-06-05 17:31 tgl 将隐式转换为文本降级为仅赋值,除了来自其他字符串类别类型的转换之外;这消除了解析器以前在没有直接适用运算符的情况下可以做出的许多令人惊讶的解释。

创建一种通用机制,通过调用数据类型的 I/O 函数,支持对*所有*数据类型进行从标准字符串类型(text、varchar、bpchar)的转换。这些新的转换在转换为字符串的方向上是仅赋值的,而在另一个方向上是仅显式的,因此不应产生任何意外行为。删除由此过时的若干特定于数据类型的转换函数。

“通用机制”是一种新的表达式节点类型 CoerceViaIO,它实际上可以将*任何*两个数据类型转换为彼此,如果它们的外部文本表示形式兼容。这比立即功能所需的功能更通用,但在将来可能在 plpgsql 或其他地方有用。

此提交不处理将连接运算符 || 应用于非文本类型时将失败的问题,通常会由于将运算符错误地解释为数组连接而导致奇怪的错误消息。由于它通常(并非总是)在之前工作,因此我们应该让它成功,或者至少给出更友好的错误消息;但细节仍在讨论中。

Peter Eisentraut 和 Tom Lane

2007-06-04 06:02 petere 从实用程序中删除不必要的响应消息。

(可能需要在发行说明中说明,以免用户感到困惑。)

--quiet 选项现在已过时,在 createdb、createuser、dropdb、dropuser 中不起作用;保留用于兼容性,但在 8.4 中标记为将被删除。

对所有数据库执行操作时的进度消息现在输出到 stdout 而不是 stderr,因为它们实际上不是错误。

reindexdb 引用页中的排序选项按字母顺序排列,与其他程序的页面一样。

2007-06-03 13:05 tgl 创建 GUC 参数 temp_tablespaces,允许选择用于存储临时表和临时文件的表空间。这是一个列表,允许将负载分散到多个表空间(每次创建临时对象时都会随机选择一个列表元素)。临时文件不再存储在每个数据库的 pgsql_tmp/ 目录中,而是存储在每个表空间的目录中。

Jaime Casanova 和 Albert Cervera,Bernd Helmle 和 Tom Lane 审查。

2007-06-01 22:03 adunstan 提高 LIKE/ILIKE 代码的效率,特别是对于多字节字符集,尤其是 UTF8。删除对 bytea 处理和单字节字符集 ILIKE 的不必要的特殊情况。a ILIKE b 现在在所有情况下都作为 lower(a) LIKE lower(b) 处理。代码现在更加简单。所有比较现在都按字节进行,并且文本和模式也在安全的情况下按字节进行前进——本质上是在没有匹配通配符的情况下。

2007-06-01 19:40 neilc 允许布尔类型输入中的前导和尾随空格。此外,添加布尔值和文本/varchar 之间的显式转换。这两个更改都是为了符合 SQL:2003。

更新回归测试,增加 catversion。

2007-06-01 15:38 tgl 使 CREATE/DROP/RENAME DATABASE 等待一小段时间,以查看其他后端是否会在由于冲突的 DB 使用而失败之前退出。根据讨论,这似乎是一个好主意,可以帮助掩盖后端退出需要非零时间的事实。删除 contrib 和 PL 回归测试序列中几个由此过时的休眠。

2007-06-01 11:33 tgl 修复了几个哈希函数,这些函数使用了廉价的快捷方式,而不是提供一个良好随机化的哈希值。在观察到多批次哈希连接的性能在哈希值的较高位不随机的情况下会严重下降后,我对此有了认识,正如对小整数值的哈希所做的那样。现在,哈希函数应该使用 hash_any 或一些可比较的方法来确保其输出的所有位都大约同样随机,这是预期和记录的。

initdb 强制执行,因为此更改使现有哈希索引失效。出于同样的原因,此更改不可向后移植;哈希连接性能问题将在后端分支中获得一个权宜之计的修复。

2007-05-31 12:57 tgl 更改 build_index_pathkeys(),使其构建的用于表示索引键列的表达式始终具有索引关联运算符所期望的类型,即,我们在处理二进制兼容索引操作类时添加 RelabelType 节点。这是为了使 varchar 索引能够与新的 EquivalenceClass 机制良好配合,就像 Josh Berkus 最近抱怨 CVS HEAD 无法将 varchar 索引列与查询中的常量限制匹配一样。

看起来这种更改将允许删除计划程序在匹配表达式与其他表达式时传统上执行的大量丑陋的临时 RelabelType 删除,但我将在其他时间处理这个问题。

2007-05-31 10:03 teodor 在所有涉及真空的地方用 ReadBufferWithStrategy 替换 ReadBuffer,为 VACUUM 实现用于 GIN 和 GIST 的有限大小的“环形”缓冲区。

2007-05-31 03:36 petere 将一些低级启动消息降级为 DEBUG1。

2007-05-30 16:11 tgl 使大型顺序扫描和 VACUUM 在有限大小的“环形”缓冲区中工作,而不是占用整个共享缓冲区区域。除了避免缓存污染之外,这还修复了 VACUUM 以前倾向于为其修改的每个页面导致 WAL 刷新的问题,因为我们将其修改为仅使用一个缓冲区。这些刷新现在将仅在每个环形满时发生一次。确切的环形大小以及 seqscan 切换到环形使用模式的阈值仍在讨论中;但基础设施似乎已经完成。基础设施的关键部分是一个新的可选 BufferAccessStrategy 对象,可以传递给 ReadBuffer 操作;这取代了以前的 StrategyHintVacuum API。

此补丁还稍微更改了缓冲区使用计数方法:我们现在在第一次固定缓冲区时推进 usage_count,而不是在最后取消固定时推进。为了保留缓冲区寿命在释放时开始减少的行为,时钟扫描代码被修改为不减少固定缓冲区的 usage_count。

此提交未完成的工作:教 GiST 和 GIN 索引使用 vacuum BufferAccessStrategy 来执行真空驱动的获取。

原始补丁由 Simon 提供,由 Heikki 重做,然后由 Tom 再次重做。

2007-05-30 14:10 momjian 更新 /contrib OS/X 启动文件,并将其移至单独的 OS/X 目录。

Mark Cotner 和 David Fetter

2007-05-27 01:37 tgl pgstat 的 on-proc-exit 钩子必须在后端中的最后一个事务提交或中止后执行;重新排列 InitPostgres 处理以使其如此。由新添加的 Asserts 和 ECPG 回归测试揭示(嗯,我想知道为什么核心回归测试没有发现它?)。这可能是缺少统计更新的另一个原因……

2007-05-26 23:50 tgl 修复 pgstats 对活动和死元组的计数,以识别已提交和中止的事务具有不同的影响;也教会它不要假设已准备好的事务总是会提交。

在此过程中,通过将计数直接绑定到关系来简化 pgstats API;我没有发现将统计指针放在 HeapScanDesc 和 IndexScanDesc 结构中的任何可取的社会价值。并修复了几个角落情况,在这些情况下,由于关系的 pgstat_info 指针尚未设置,因此可能错过计数。

2007-05-25 13:54 tgl 创建钩子,让可加载的插件监控(甚至替换)计划程序,或者为假设情况创建计划;特别是,调查使用假设索引生成的计划。这是 Gurjeet Singh 为其索引顾问项目提出的钩子的重写版本。在这个公式中,索引顾问可以完全是一个可加载的模块,而不是要求一个重要的部分在核心后端中,并且可以为假设索引生成计划,而无需创建和回滚系统目录条目。

提交的索引顾问补丁与这些钩子不兼容,但由于其他 8.2 到 8.3 计划程序更改,它仍然需要大量工作。有了核心后端中的这些钩子,顾问的开发可以作为 pgfoundry 项目进行。

2007-05-24 07:13 petere 添加关于计划在 8.4 中删除的弃用通知,并建议尝试使用核心中的较新 XML 内容。

(这可能也应该在发行说明中提及。)

2007-05-21 13:57 tgl 教会 tuplestore.c 在调用者使用标记/恢复但不使用重绕或反向扫描功能时丢弃“标记”点之前的數據。如果内部子节点是预期溢出到磁盘的排序,则在合并连接与其内部子节点之间插入一个物化计划节点。物化保护排序免于执行标记/恢复,从而允许它按需执行最终的合并传递;而物化本身通常很便宜,因为它只有在具有相同键值的元组数量超过 work_mem 时才会溢出到磁盘。

Greg Stark,Tom Lane 有一些评论。

2007-05-20 17:08 tgl 为了支持归档 WAL 数据的外部压缩,向 WAL 记录添加了一个标志位,用于显示是否可以安全地删除完整页面图像(即,在线备份在创建 WAL 条目时是否正在进行)。还为 XLOG_NOOP 记录类型做好了准备,该类型可用于在解压缩数据以进行恢复时填充额外的空间。

这是 Koichi Suzuki 的“完整页面写入”补丁中必须进入核心数据库的部分。该工作的其余部分是两个外部压缩和解压缩程序,目前将作为独立的项目在 pgfoundry 上进行开发。根据讨论。

此外,调整对 BTREE_SPLIT 记录的处理,以确保可以压缩它们(之前的编码导致了重要信息的省略)。其他常用的记录类型似乎已经可以了,除了可能存在 GIN 和 GIST WAL 记录,我对它们不太了解,无法发表意见。

2007-05-18 19:19 alvherre 让 CLUSTER 提前表的 relfrozenxid。新的冻结点是在最近提交中引入的 FreezeXid,因此这种方法不会有任何数据丢失。

这样做会导致 ALTER TABLE(更确切地说,会导致完整表重写的形式)也受到影响。在这种情况下,冻结点是 RecentXmin,因为在重写之后,所有元组都将使用重写事务的 Xid 重新标记。

TOAST 表也会自动修复,因为它们在各自的代码路径中已经以这种方式处理。

有了这个补丁,不再需要为了 Xid 循环目的而 VACUUM 表,这些表已经通过 TRUNCATE 或 CLUSTER 清理过了。

2007-05-17 15:11 momjian 添加数据库页面检查 /contrib 模块。

Simon 和 Heikki

2007-05-17 11:28 alvherre 将 CLUSTER 中的元组冻结点移到更早的过去,以避免在不太旧的元组中丢失有用的 Xid 信息。这使得 CLUSTER 在元组冻结行为方面与 VACUUM 行为一致(尽管 CLUSTER 还没有提前表的 relfrozenxid)。

顺便说一下,将 rewriteheap.c 中的实际冻结操作移到更合适的位置,并对其进行彻底的文档说明。这个补丁的这一部分来自 Tom Lane。

2007-05-16 13:28 alvherre 让 TRUNCATE 将受影响表的 relfrozenxid 提前到 RecentXmin,以避免以后为了 Xid 循环目的而进行不必要的 VACUUM。我们可以这样做,因为已知表将为空,因此上面没有 Xid。

根据讨论。

2007-05-16 12:36 alvherre 让 rewriteheap 代码冻结旧的元组。这是安全的,因为它只应用于比最近的 Xmin 更旧的活动元组,而不应用于可能作为更新链一部分的元组。它们仍然保留其原始标记。

此补丁使 CLUSTER 可以提前 relfrozenxid,从而避免为了 Xid 循环目的而需要 vacuum 表。这将在单独的补丁中进行修复。

补丁来自 Heikki Linnakangas。

2007-05-14 16:24 tgl 删除 TOAST 表的 pg_shdepend 条目;这是不必要的,因为通过父表对所有者存在间接依赖。我们已经在以这种方式处理索引,但不知何故没有处理 toast 表。节省了一些目录空间,并减少了 checkSharedDependencies 报告的冗长性。

2007-05-14 12:50 alvherre 当删除共享对象时,将所有依赖对象报告给服务器日志,并且只将当前数据库中对象的截断日志报告给客户端。此外,而不是报告用户可能拥有对象的数据库中的对象计数,而只是报告适合预定义行计数的对象。

这是为了避免当用户拥有太多对象时淹没客户端,这可能会导致问题。

根据 Ed L. 于 4 月 4 日的报告和随后的讨论。

2007-05-11 20:54 tgl 修复了以下问题:创建名为 _foo 的用户定义类型,然后创建名为 foo 的用户定义类型,这将起作用,但其他顺序将不起作用。如果用户指定的类型或表名与现有的自动生成的数组名称冲突,只需通过在前面添加更多下划线来重命名数组类型以使其脱离困境。这不会创建任何向后兼容性问题,因为在此情况下发生的冲突将在之前的版本中直接失败。

另外,修复了复合类型数组补丁中的疏漏:ALTER TABLE RENAME 重命名了表的行类型,但没有重命名其数组类型。

2007-05-11 13:57 tgl 支持复合类型的数组,包括常规表和视图的行类型(但不包括系统目录,也不包括序列或 toast 表)。摆脱了类型数组类型完全名为“_type”的硬编码约定,而是使用新列 pg_type.typarray 来提供链接。(它仍然会被命名为“_type”,尽管除了像最大长度类型名称这样的奇特角落情况外。)

在此过程中,使对类型的所有者和模式依赖关系的跟踪更加统一:用户直接创建的类型具有这些依赖关系,而表行类型或自动生成的数组类型不具有这些依赖关系,而是依赖其父对象。

David Fetter、Andrew Dunstan、Tom Lane

2007-05-08 14:56 neilc 为“numeric”添加哈希函数。将 numeric 的相等运算符标记为“oprcanhash”,并进行相应的系统目录更新。因此,哈希索引、哈希聚合和哈希连接现在可以与 numeric 类型一起使用。将 catversion 提高。

这样做唯一棘手的一点是编写正确的哈希函数:两个 Numeric 可能根据它们的相等运算符是相等的,但具有不同的内存中位模式。为了解决这个问题,哈希函数不考虑 Numeric 的“scale”或“sign”,并显式地跳过 Numeric 的数字缓冲区中的任何前导或尾随零(当前实现应该抑制任何这样的零,但依赖于此似乎不明智)。有关更多详细信息,请参见 pgsql-patches 上的讨论。

2007-05-04 17:29 tgl 在 EXPLAIN ANALYZE 输出中为 Sort 节点添加了一行,显示实际的排序策略和使用的空间量。应广大人民群众的要求。

2007-05-04 11:20 tgl Renesas M32R 处理器的 tas() 支持。Kazuhiro Inaoka

2007-05-03 22:01 tgl 在错误处理方面进行了一些修复:为 gcc 将 pg_re_throw() 标记为 noreturn,而对于其他编译器,插入一个虚拟 exit() 调用,以便它们理解 PG_RE_THROW() 不会返回。根据最近的 buildfarm 证据,在 ExceptionalCondition 中插入 fflush(stderr),表明这在某些平台上可能不会自动发生。同时,将 ExceptionalCondition 的声明设为 const。

2007-05-03 21:13 tgl 教 tuplesort.c 关于“top N”排序,其中只需要返回前 N 个元组。我们维护当前最佳 N 个元组的堆,并在扫描输入时将新的元组筛选到堆中。对于 M 个输入元组,这意味着只有大约 M*log(N) 次比较,而不是 M*log(M),更不用说当 N 很小时使用更少的 workspace 了——避免当 M 很大时溢出到磁盘实际上是其最吸引人的地方。补丁包括规划器和执行器支持,用于在 ORDER BY ... LIMIT 查询中调用此功能。Greg Stark,由我进行了些许编辑。

2007-05-03 12:45 tgl 微调哈希索引 AM,以便在获取它打算立即归零的页面时使用新的 ReadOrZeroBuffer bufmgr API。只是为了表明该函数除了 WAL 恢复之外还有其他用途 :-)。在此过程中,将 _hash_checkpage 和 _hash_pageinit 调用折叠到 _hash_getbuf 及其朋友中,而不是期望调用者单独执行此操作。

2007-05-02 19:18 tgl 在 WAL 恢复期间,当读取打算从 WAL 数据完全覆盖的页面时,不要费心物理读取它;只需让 bufmgr.c 返回一个已归零的缓冲区即可。这显着加快了恢复速度,并且还避免了当要覆盖的页面在磁盘上具有损坏的页面头时发生不必要的错误。这取代了以前完成后者的 kluge,它假装 zero_damaged_pages 在 WAL 恢复期间始终处于 ON 状态;当 kluge 被放入时这是可以的,但是当还原使用 full_page_writes 关闭的 WAL 日志时是不安全的。

Heikki Linnakangas

2007-05-02 17:08 tgl 修复了一些问题,以便当 CREATE INDEX CONCURRENTLY 在其处理的最后阶段将 pg_index.indisvalid 设置为 true 时,更新将通过针对索引的共享缓存失效消息进行广播;如果没有此操作,已经拥有索引的 relcache 条目的现有后端可能永远不会看到它变为有效。此外,同时强制对索引的父表的 relcache 失效,以便重新规划该表的任何缓存计划;这确保了如果合适,将使用新有效的索引。除了使 C.I.C. 行为更合理之外,这是 HOT 补丁的某些方面的必要基础设施。Pavan Deolasee,以及我的一些其他东西。

2007-05-02 11:32 tgl 修复了 PG_RE_THROW 处理中的疏漏:完全有可能没有地方可以抛出错误。如果是这样,我们应该将错误视为 FATAL,就像我们在 PG_TRY 块之外抛出它一样。

虽然这显然是错误的 *潜在* 来源,但目前尚不清楚它是否是错误的 *实际* 来源;目前可能没有在没有外部 longjmp 捕获器的情况下可以访问的 PG_TRY 块。因此,目前我将保持谨慎,不会对此进行回溯。更改会破坏 PG_RE_THROW 的用户 ABI,因此可能会为可加载模块创建兼容性问题,因此我们不应将其放入已发布的分支中,除非有证据表明它是必需的。

2007-04-30 17:01 tgl 将事务提交/中止 xlog 记录中记录的时间戳从 time_t 更改为 TimestampTz 表示形式。这提供了 gettimeofday() 的完整分辨率时间戳,这在尝试执行时间点恢复时可能会有用——以前无法使用亚秒分辨率指定停止点。但这主要是为了在提交期间摆脱 TimestampTz 到 time_t 的转换开销。根据我几天前提出的建议。

2007-04-29 23:23 tgl 在后端尝试向统计收集器发送消息的频率上实现速率限制逻辑。这避免了为自动 vacuum 启用 stats_row_level 会对短读取事务造成很大开销的问题,正如 Arjen van der Meijden 所指出的那样。我们可以通过 piggybacking 在对 WAL 日志记录 xact 提交或中止的操作中进行的 gettimeofday 调用来避免额外的 gettimeofday 调用(尽管这无助于只读事务,因为它们不会 WAL 日志记录任何内容)。

在我关于此的建议中,我注意到我们可以更改提交/中止的 WAL 日志条目,以记录完整 TimestampTz 精度,而不是像目前这样只记录 time_t。此补丁中没有执行此操作,但将在单独的提交中进行。

2007-04-28 21:21 neilc 支持 PL/PgSQL 中的 MOVE。Magnus 的初始补丁,Pavel Stehule 的一些改进,以及 Neil Conway 的审查。

2007-04-28 19:54 neilc 为 PL/PgSQL 的 FETCH 语句添加了对 IN 作为 FROM 的替代方案的支持,以保持与后端的 FETCH 命令的一致性。Pavel Stehule 的补丁,Neil Conway 的审查。

2007-04-26 12:13 neilc 重命名了新添加的用于丢弃会话状态的命令。RESET SESSION、RESET PLANS 和 RESET TEMP 现在分别为 DISCARD ALL、DISCARD PLANS 和 DISCARD TEMP。这是为了避免与现有的 RESET 变体混淆:DISCARD 命令实际上与 RESET 不相似。Marko Kreen 的补丁,进行了一些小的编辑。

2007-04-21 17:01 tgl 对规划大部分被约束排除的大型继承树进行了一些进一步的性能调整:更早地执行 CE 测试以节省一些 adjust_appendrel_attrs() 工作,并安排使用数组索引而不是 rt_fetch() 来在规划器的主体中获取 RTE。后者是我一直想做的事情,但看到 list_nth_cell() 占运行时间的 35% 引起了人们的注意。

2007-04-21 16:02 petere 当从配置文件中删除配置参数时,使配置参数回退到其默认值。

Joachim Wieland

2007-04-21 13:26 petere Contrib 模块 uuid-ossp,用于使用 OSSP UUID 库生成 UUID 值。新的配置选项 --with-ossp-uuid 用于激活。

2007-04-20 15:40 momjian 添加脚本 major_release_split 以简化创建多个版本的发布说明。

2007-04-18 12:44 alvherre 启用可配置的自动清理操作日志。初始补丁来自 Simon Riggs,我添加了额外的代码和文档。经过讨论。

2007-04-16 14:29 alvherre 为自动清理添加多工作器功能。这允许多个工作器进程同时运行。此外,自动清理进程现在不计入 max_connections 限制;它们与普通进程分开计算,并受新 GUC 变量 autovacuum_max_workers 限制。

启动程序现在具有智能功能,可以在每个数据库上每隔 autovacuum_naptime 秒启动工作器,只受可用工作器插槽数量的限制。

此外,全局工作器 I/O 利用率受真空成本延迟功能限制。工作器是“平衡的”,以确保总 I/O 消耗不超过既定的限制。此补丁的这一部分由 ITAGAKI Takahiro 贡献。

根据讨论。

2007-04-16 13:21 tgl 在 plpgsql 中支持可滚动游标(即 FETCH 中的“direction”子句)。Pavel Stehule,由 Tom 进行了少量重构。

2007-04-15 21:14 tgl 在 SPI 中公开更多与游标相关的功能:特别是允许访问计划程序的与游标相关的规划选项,并提供新的 FETCH/MOVE 例程,允许访问这些命令的全部功能。对 planner()、pg_plan_query() 和 pg_plan_queries() API 的少量重构,使其方便地将规划选项从 SPI 传递下去。

这是 Pavel Stehule 在 plpgsql 中为可滚动游标支持提供的补丁的核心代码部分;我将分别审查和应用 plpgsql 更改。

2007-04-15 08:48 adunstan 添加 --with-libxslt 配置选项

2007-04-15 06:56 ishii 根据 pgsql-hackers 中关于“所有编码的服务器端支持”的讨论(大约在 2007/3/26),使 JOHAB 客户端仅编码。需要 initdb。

2007-04-13 16:40 mha 允许 psql 中的 \timing 在 Windows 上具有比 ~15ms 更好的分辨率。

ITAGAKI Takahiro

2007-04-13 14:50 adunstan 如果使用 --with-libxml 配置,则启用构建 contrib/xml2。如果由于缺少 libxslt 而导致问题,我将不得不恢复它,但让我们看看它是否会破坏构建农场。

如果缺少 libxslt,则可以使用以下解决方法:. 不要使用 libxml 配置,或者 . 不要从 contrib Makefile 构建 contrib 模块(而使用单个模块 Makefile),或者 . 更改 xml2 Makefile

2007-04-12 02:53 neilc RESET SESSION,以及相关的 DDL 新命令。来自 Marko Kreen 的补丁,由 Neil Conway 审查。此补丁添加了以下 DDL 命令变体:RESET SESSION、RESET TEMP、RESET PLANS、CLOSE ALL 和 DEALLOCATE ALL。RESET SESSION 旨在供连接池软件等使用,以将客户端会话重置为接近其初始状态。

请注意,虽然大多数这些命令变体可以在事务块内执行(但不是事务感知的!),但 RESET SESSION 不行。虽然这并不一致,但目的是为了捕捉程序员的错误:在打开的事务块中使用 RESET SESSION 可能并非有意。

2007-04-09 18:03 tgl 对索引特殊空间定义进行细微调整,以便可以通过检查索引页面上的特殊空间可靠地区分各种索引类型。根据我之前的提议,以及认识到 btree 的真空周期 ID 无需遍历所有可能的 16 位值。限制其范围几乎没有成本,并且消除了冲突的可能性。给自己备忘录:假设补丁最终被接受,请记住让位图索引与该方案配合使用。

2007-04-09 14:21 mha 添加取消处理程序,以便可以通过 Ctrl-C 取消 clusterdb、reindexdb 和 vacuumdb。ITAGAKI Takahiro,我进行了少量修复。

2007-04-07 21:26 tgl 使 CLUSTER MVCC 安全。Heikki Linnakangas

2007-04-07 21:15 ishii 向 pgbench 添加 -F 选项,以设置出纳员、账户和分支机构的填充因子。补丁由 Pavan Deolasee 贡献。以及由 Tatsuo Ishii 进行的日语文档修改。

2007-04-07 20:26 momjian 支持语法“CLUSTER table USING index”,这更合乎逻辑。

Holger Schurig

2007-04-07 12:09 momjian 将使用次数统计添加到 contrib/pgbuffercache 中可用的信息中。

Greg Smith

2007-04-06 18:33 tgl 使“col IS NULL”子句成为可索引的条件。

Teodor Sigaev,Tom Lane 提供了一些指导。

2007-04-06 05:16 ishii 增强 pgbench -l 选项以添加时间戳。补丁由 Greg Smith 贡献。以及由 Tasuo Ishii 进行的日语文档更新。

> 此补丁更改了 pgbench 输出其延迟日志文件的方式,以便> 每个事务都获得时间戳,并记录执行了哪种事务类型。这是一个简单的单行更改,它只是转储了一些已经存在于该代码区域中的一些额外> 信息。我还对 pgbench 中一些更> 令人困惑的功能进行了一些文档更正和说明。>> 很容易解析此格式的日志文件,以分析在> 比原始格式更高级别的测试期间发生了什么。您可以在> http://www.westnet.com/~gsmith/content/postgresql/pgbench.htm 中找到一些将此> 延迟格式转换为 CVS 文件然后转换为图形的粗略示例代码,我> 将在所有小补丁都提交到这里后对其进行扩展。

2007-04-06 04:49 ishii 各种 pgbench 增强功能。补丁由 ITAGAKI Takahiro 贡献。

还调整了 README.pgbench/README.pgbench_jis:在 pgbench 被添加到 PostgreSQL contrib 模块后删除历史记录。这些信息不仅是多余的,因为它已经存在于 CVS 日志中,而且也不完整。------------------------------------------------------------------- ------- 附件是使用新的 8.3 功能优化 contrib/pgbench 的补丁。

- 使用 DROP IF EXISTS 来抑制初始加载的错误。- 使用 TRUNCATE 和 COPY 的组合来减少创建 accounts 表时的 WAL。

此外,还有一些美观的更改。

- 将 -v 选项的输出从“开始完全 vacuum...”更改为“开始 vacuum accounts...”以反映事实。- 将重复的错误检查塑造成 executeStatement()。

在“无 WAL 的 COPY”功能中,性能有了很大提升。感谢您的努力!------------------------------------------------------------------- -------

2007-04-06 00:21 tgl 支持具有单字节标头和未对齐存储的 varlena 字段。

此提交会破坏任何假设仅仅形成元组(不写入磁盘)不会“toasting”任何字段的代码。虽然所有可用的回归测试都通过了,但我不能完全确定我们已经修复了每个角落和缝隙,尤其是在 contrib 中。

Greg Stark 在 Tom Lane 的帮助下

2007-04-03 12:34 tgl 删除 CheckpointStartLock,转而让后端通过 ProcArray 中的标志显示它们是否处于提交关键部分。Checkpoint 可以观察 ProcArray 以确定何时可以安全地继续。这是对 checkpoint 和事务提交之间竞争条件的原始问题的更好解决方案:它加快了提交速度,因为少了要处理的锁,并且它防止了当存在持续的提交流时,checkpoint 被无限期延迟的问题。Heikki,Tom 提供了一些指导。

2007-04-03 11:50 momjian 允许 pl/pythonu >= 版本 2.3 返回布尔值,而不是 1/0。

Marko Kreen

2007-04-03 09:37 momjian 允许 PL/PythonU 在 Python 2.5 上编译。由于 Python 中的 API 更改,需要更改。

Marko Kreen

2007-04-03 00:14 tgl 将 TOAST_TUPLE_THRESHOLD 和 TOAST_MAX_CHUNK_SIZE 的值解耦。将后者添加到 pg_control 中检查的值中,因为它不能在不使 toast 表内容失效的情况下更改。此提交本身不应该改变任何行为,但它为使用这些 toast 控制数字进行实验奠定了一些必要的基石。

注意:虽然 TOAST_TUPLE_THRESHOLD 现在可以在没有 initdb 的情况下更改,但在释放随机更改之前,仍然需要考虑 toasting.c 中的 needs_toast_table()。

2007-04-02 18:20 momjian 允许 NOTIFY/LISTEN/UNLISTEN 只接受关系名,而不是 schema.relation,因为 notify 代码只处理关系名。schema.relation 现在会生成语法错误。

2007-04-01 23:49 tgl 支持枚举数据类型。在此过程中,尽可能使用宏来表示 pg_type.typtype 的值。Tom Dunstan,Tom Lane 提供了一些指导。

2007-03-30 14:34 mha 通过统计收集器,在 bgwriter 中添加了一些工具。新的视图 pg_stat_bgwriter,以及构建它所需的函数。

2007-03-29 11:30 mha 使 ECPG 回归测试使用本机线程而不是 pthreads,因为 ecpglib 现在支持它。更改 configure(来自 Bruce 的补丁)和 msvc 构建系统,不再在 win32 上要求 pthreads,因为 PostgreSQL 的所有部分都可以使用本机平台函数来实现线程安全。

2007-03-29 08:02 meskes 添加了 Magnus Hagander <[email protected]> 的补丁以使用本机 win32 线程。- 修复了回归测试以运行线程测试。

2007-03-28 20:15 tgl 教授 CLUSTER 如果不需要(即不使用存档)跳过写入 WAL --- Simon。此外,对之前的 COPY-no-WAL 补丁进行代码审查和清理 --- Tom。

2007-03-28 18:48 neilc 将 pgcrypto 4 条款许可的 blf.[ch] 替换为 PuTTY 中的 blowfish 实现,该实现是根据最小的 BSD/MIT 许可进行的。Marko Kreen。

2007-03-28 18:17 alvherre 将“recheck”逻辑添加到自动清理工作器代码中。工作器首先构建其表列表,然后在 vacuuming 每个表之前重新检查 pgstat,以验证在此期间是否没有人 vacuuming 该表。

在当前的自动清理世界中,这仅仅意味着工作器不会 vacuuming 用户在工作器启动后手动 vacuuming 的表。当引入对多个自动清理工作器的支持时,这将降低在同一数据库上同时运行的工作器执行冗余工作的可能性。

2007-03-27 19:21 tgl 修复数组强制转换表达式,以确保代码检查表达式时能看到正确的易变性。这似乎最好的方法是放弃作为函数调用的原始表示形式,而是创建一个特殊的表达式节点类型,它表示将元素类型强制转换函数应用于每个数组元素。这样,元素函数就会被公开,并将被检查其易变性。根据 Guillaume Smet 的报告。

2007-03-26 17:44 momjian 从 Berkeley BSD 许可的文件中删除广告条款,根据 Berkeley 的指示。

2007-03-26 12:58 tgl 允许非超级用户数据库所有者创建过程语言。如果 DBA 在 pg_pltemplate 中被标记为“tmpldbacreate”,则他被允许在他的数据库中创建语言。工厂默认设置是为所有标准可信语言设置此选项,但当然超级用户可以调整设置。为了实现这一点,将预期的 owner 列添加到 pg_language 中;PL 的所有者重命名、删除和更改现在遵循正常的拥有者规则,而不是仅限超级用户。Jeremy Drake,Tom Lane 进行了一些编辑。

2007-03-25 19:27 tgl 删除了通过 SPI_execute 执行游标命令的禁止。Vadim 在 SPI 代码的原始设计中包含了此限制,但我不知道有什么理由这样做。

我保留了 SPI_ERROR_CURSOR 的宏定义,以免不必要地破坏任何检查它的 SPI 调用者,但该代码永远不会再被实际返回了。

2007-03-25 15:45 tgl 清理特殊快照的表示形式,方法是在每个 Snapshot 结构中包含一个“方法指针”。这允许删除 HeapTupleSatisfiesVisibility 中的逐案测试,这应该会使其更快一点(尽管我没有进行任何性能测试)。更重要的是,我们不再违反可移植 C 规范,假定小整数与所有指针值不同,并且 HeapTupleSatisfiesDirty 不再具有涉及对全局变量进行副作用的不可重入 API。

有几个地方直接调用 HeapTupleSatisfiesXXX 例程,而不是通过 HeapTupleSatisfiesVisibility 宏。由于这些地方必须更改,因此我选择让它们通过宏来保持一致性。

在开发过程中,我将 HeapTupleSatisfiesSnapshot 重命名为 HeapTupleSatisfiesMVCC,以强调它仅用于 MVCC 类型的快照。我非常想将 HeapTupleSatisfiesVisibility 重命名为 HeapTupleSatisfiesSnapshot,但目前还是忍住了,以免造成混淆,并降低此补丁破坏某些待处理补丁的可能性。以后可能需要重新考虑这样做。

2007-03-25 07:56 ishii 添加了新的编码 EUC_JIS_2004 和 SHIFT_JIS_2004,以及 EUC_JIS_2004、SHIFT_JIS_2004 和 UTF-8 之间的新的转换。目录版本已升级。

2007-03-23 09:51 ishii 允许 4 字节 UTF-8(UCS-4 范围 00010000-001FFFFF)。这对于支持 JIS X 0213 <--> UTF-8 转换是必要的。

2007-03-22 16:14 momjian 添加了 xmlpath() 用于评估 XPath 表达式,并支持命名空间。

Nikolay Samokhvalov

2007-03-22 15:55 tgl 安排 PreventTransactionChain 拒绝作为多语句简单查询消息的一部分提交的命令。这个 bug 一直存在,但不幸的是,在现有版本中几乎不可能修复;只有最近的 ProcessUtility API 更改才使其能够在 HEAD 中修复。根据 William Garrison 的报告。

2007-03-22 15:53 momjian

允许 pgstat 进程在接收到 SIGQUIT 信号后立即重新启动,而不是等待 PGSTAT_RESTART_INTERVAL。

2007-03-22 15:51 tgl 允许 DROP TABLESPACE 成功(并发出警告),即使 pg_tblspc 符号链接不存在。这允许在先前 DROP 尝试在提交之前失败但已删除目录和符号链接的情况下,使用 DROP 来清理 pg_tablespace 目录项。

根据 William Garrison 的报告。即使他的测试用例依赖于 PreventTransactionChain 中的另一个无关 bug,这种情况下也可能由于其他问题而出现,例如在正确的时间发生系统崩溃。

2007-03-22 15:42 momjian 正确执行 pg_dump -F 格式化选项;仅支持单个字母或完整单词,根据 Mark Stosberg 的报告。

2007-03-22 14:57 alvherre 删除 dllist.c 中当前未使用的 FRONTEND case。这允许使用 palloc 而不是 malloc,这意味着可以通过简单地删除包含它的内存上下文来释放列表。

2007-03-21 18:18 tgl 修复了部分索引选择性估计的一些问题。

首先,genericcostestimate() 在其选择性估计中过于宽松地包含了部分索引条件,导致对诸如使用 x 上的索引的 indexqual “x = 42” 之类的场景的严重低估,“WHERE x >= 40 AND x < 50”。虽然代码有意设置为在可用时优先选择部分索引,但这有点过分了...

其次,choose_bitmap_and() 也容易被此类情况迷惑,因为它同样认为部分索引的选择性独立于 indexqual。

通过使用 predicate_implied_by() 而不是简单的相等性检查来确定冗余来解决。这贵很多,但我没看到其他选择。至少额外成本仅在实际考虑部分索引时才支付。

根据 Jeff Davis 的报告。我不会冒险回溯修补这个,虽然。

2007-03-21 10:39 mha win32 的本地共享内存实现。使用与以前相同的底层技术,但不是 sysv 模拟层。

2007-03-20 01:44 neilc 添加了三个新的正则表达式函数:regexp_matches、regexp_split_to_array 和 regexp_split_to_table。这些函数提供了对 POSIX 正则表达式匹配产生的捕获组的访问权限,并分别提供了按 POSIX 正则表达式拆分字符串的能力。来自 Jeremy Drake 的补丁;代码审查由 Neil Conway 完成,来自 Tom 和 Peter E. 的补充评论和建议。

此补丁升级了 catversion,添加了一些回归测试,并更新了文档。

2007-03-19 19:38 wieck 更改了 pg_trigger 并扩展了 pg_rewrite,以便允许触发器和规则以不同的、每个会话可控的行为定义,用于复制目的。

这将允许像 Slony-I 这样的复制系统,以及正如 pgsql-hackers 上所说,其他产品来控制触发器和重写规则的触发机制,而无需直接修改系统目录。

触发机制由一个新的超级用户专用 GUC 变量 session_replication_role 控制,以及对 pg_trigger.tgenabled 的更改和一个新的列 pg_rewrite.ev_enabled。这两列现在都是单个字符数据类型(tgenabled 以前是 bool)。这些属性中的可能值是

'O' - 当 session_replication_role 为“origin”(默认值)或“local”时,触发器/规则触发。这是默认行为。

'D' - 触发器/规则被禁用,永远不会触发

'A' - 触发器/规则始终触发,无论 session_replication_role 的设置如何

'R' - 当 session_replication_role 为“replica”时,触发器/规则触发

只有在系统没有缓存任何查询计划时,才能更改 GUC 变量。这将防止更改会话角色并意外执行存储过程或函数,这些过程或函数具有缓存的计划,这些计划扩展到由于规则触发语义的差异而导致错误的查询集。

更改触发器/规则触发语义的 SQL 语法是

ALTER TABLE <tabname> <when> TRIGGER|RULE <name>;

<when> ::= ENABLE | ENABLE ALWAYS | ENABLE REPLICA | DISABLE

psql 的 \d 命令以及 pg_dump 都以向后兼容的方式进行了扩展。

Jan

2007-03-17 15:25 meskes 更改了连接语句中的一些空格。- 根据 Stefan Huehner <[email protected]> 的建议,使一些字符成为 const。- 同步解析器和关键字列表。- 从后端解析器复制了两个令牌解析到 ecpg 解析器中。- 还添加了一个测试用例。

2007-03-16 20:11 tgl 修复了表达式节点结构会丢失关于表达式 typmod 的可用信息的剩余位置;即 Const、ArrayRef、ArrayExpr 以及 EXPR 和 ARRAY 子链接。在 ArrayExpr 和 SubLink 情况下,这并不是数据结构的错误,而是 exprTypmod() 太懒了。鉴于 Teodor 的工作预计会增加 typmod 的使用,以允许用户定义类型具有 typmod,这似乎是个好主意。特别是,这响应了我们对消除 exprTypmod() 用于 BPCHAR Consts 的特殊用途 hack 的担忧。我们现在可以判断这样的 Const 是否已被转换为特定长度,并在必要时正确报告或显示。

由于存储规则的更改,initdb 强制执行。

2007-03-16 13:57 mha 为 pg_stat_database 添加了新的列,用于数据库级别的元组统计信息。

2007-03-16 09:41 adunstan 删除了对 7.3 之前版本中复制语法的未记录支持。更新注释以反映实际支持的语法,例如通过包含 CSV 参数。

2007-03-16 04:28 mha 在 psql \da 输出中显示聚合返回类型。

Greg Sabino Mullane

2007-03-15 19:12 tgl 为 SPI 计划使用计划缓存模块。特别是,由于 plpgsql 使用 SPI 计划,这最终修复了古老的难题,即你不能删除并重新创建 plpgsql 函数使用的临时表。

在此过程中,通过将 SPI 计划指针声明为“SPIPlanPtr”而不是“void *”,稍微清理了 SPI 的 API。这只是美观上的,但有助于防止简单的编程错误。(我已经更改了一些,但不是所有调用者以匹配;在 contrib 和 PL 中仍然有一些“void *”。这是故意的,这样我们就可以看看是否有人抱怨。)

2007-03-14 10:21 teodor 为 pg_trgm 添加 GIN 支持。来自 Guillaume Smet <[email protected]>,经我略作编辑。

Hstore 改进 * 添加操作 hstore ? text - excat 等效于 exist() * 删除包含操作对 NULL 值的未记录行为 * 现在 'key'::text=>NULL 返回 '"key"=>NULL' 而不是 NULL * 为 contains 和 exist 操作添加 GIN 支持 * 为 exist 操作添加 GiST 支持 * 改进了回归测试

2007-03-14 10:15 teodor 为 pg_trgm 添加 GIN 支持。来自 Guillaume Smet <[email protected]>,经我略作编辑。

2007-03-13 12:03 mha 重写 win32 安装文档(它不再只是客户端,现在已经完整了)。更新为 MSVC6/Borland 支持现在仅限于 libpq。将有关完整 MSVC 构建的大部分信息从 README 文件移到文档中。

2007-03-12 20:33 tgl 计划失效项目的第一阶段:创建一个计划缓存管理模块,并教 PREPARE 和协议级准备好的语句使用它。为了实现这一点,重新安排实用程序语句处理,以便解析分析不假设表架构在实用程序语句执行之前不会改变(这是必要的,因为我们不会尝试在重新使用存储的计划时重新获取实用程序语句的锁)。这需要对 ProcessUtility API 进行一些重构,但最终还是更简洁,例如我们可以摆脱 QueryContext 全局变量。

仍需完成:修复 SPI 和相关代码以使用计划缓存;我很想尝试让 SQL 函数也使用它。此外,我们希望确保系统状态的至少某些方面在重新计划期间与原始处理期间保持一致;例如 search_path 当然应该以这种方式运行,也许还有其他方面。

2007-03-11 00:22 alvherre 修复了一个会导致 pg_database_size() 和 pg_tablespace_size() 在调用 ReadDir() 和 stat() 之间删除对象时失败的竞争条件。根据 pgsql-hackers 的讨论。

http://archives.postgresql.org/pgsql-hackers/2007-03/msg00671.php

由 Michael Fuhr 报告错误并提供补丁。

2007-03-05 09:18 mha 除 libpq 外,删除了旧式 win32 仅限客户端的 Visual C++ 构建基础设施。我们需要保留 libpq 来构建静态库,以及使用 PQtrace 与使用旧版本 MSVC 的客户端一起使用。

2007-03-03 14:52 momjian 为大型对象截断添加了 lo_truncate() 到后端和 libpq。

Kris Jurka

2007-03-03 14:32 neilc 添加了 resetStringInfo(),它清除 StringInfo 的内容,并修复了树中手动清除 StringInfo 的各个位置。使此函数成为 API 的一部分稍微简化了客户端代码,并避免了不必要地窥视 StringInfo 接口内部。

2007-03-03 13:46 momjian 添加了 GUC log_lock_waits 用于记录长时间等待时间。

Simon Riggs

2007-03-03 12:19 momjian 允许 \pset 和 \x、\t 使用布尔常量 on/off,而不仅仅是切换。

Chad Wagner

2007-03-02 18:37 tgl 使 log_min_error_statement 将 LOG 级别与 log_min_messages 相同;并安排抑制从 log_statement 和 log_duration 消息产生的重复输出。Bruce Momjian 和 Tom Lane。

2007-03-01 19:48 tgl 抑制 PageAddItem 中对未使用的行指针进行的无用搜索。为此,通过从 pd_tli 中窃取一些位,在页面标题中添加一个 16 位“flags”字段。我们使用一个标志位作为提示,表明是否存在任何未使用的行指针;剩下的 15 位可供将来使用。

这是 Hiroki Kataoka 在 2005 年 7 月提出的想法的简化形式。当时它被拒绝了,因为最初的补丁增加了页面标题的大小,而且不清楚好处是否超过了分布式成本。标志位方法在不增加页面标题大小的情况下获得了大部分好处。

Heikki Linnakangas 和 Tom Lane

2007-02-27 18:48 tgl 将对 VARATT_SIZEP(x) 的直接赋值替换为 SET_VARSIZE(x, len)。摆脱了 VARATT_SIZE 和 VARATT_DATA,它们只是 VARSIZE 和 VARDATA 的冗余,因此几乎没有代码使用较长的名称。将 struct varlena 和各种派生结构的长度字段重命名为捕获任何直接访问它们的代码;并清理了被捕获的各个位置。就其本身而言,此补丁根本没有改变任何行为,但如果我们希望对 varlena 标题的表示进行任何操作,它就是必要的基础设施。Greg Stark 和 Tom Lane

2007-02-27 13:49 petere 允许信息模式定义在不需要对文本的隐式转换的情况下工作。

2007-02-23 16:59 tgl 现在计划具有扁平的 rangetable 列表,因此 EXPLAIN 可以更容易地深入到子计划目标列表中,以打印上层计划节点中 OUTER 或 INNER var 的引用表达式。因此,让它始终这样做,并消除在事情变得过于复杂时显示“?columnN?”的旧 hack。

在此过程中,修复了通过从执行时 rangetable 中抑制子查询而引入的 EXPLAIN bug:get_name_for_var_field() 假设它可以查看 rte->subquery 来找出 RECORD var 的真实类型。这不再起作用,但我们可以查看 SubqueryScan 计划节点的输入计划。

2007-02-23 13:20 momjian 添加了 psql \prompt 功能。

Chad Wagner

2007-02-22 17:00 tgl 将执行器使用的范围表转换为扁平列表,避免为其 RangeTblEntry 节点存储无用的子结构。(我选择继续使用相同的结构节点类型,并将链接字段归零以表示不需要的信息,而不是创建一个单独的 ExecRangeTblEntry 类型——拥有两种不同的范围表表示方式似乎太脆弱了。)

在此过程中,将子计划放入顶级 PlannedStmt 节点中的列表中,并让 SubPlan 节点通过列表索引而不是直接指针引用它们。Vadim 多年前就想这样做,但我一直不明白他到底在说什么,直到现在我才明白。这使得事情变得 *非常* 稳健,因为我们不再需要担心在表达式树遍历期间对子计划进行重复处理。这一直是错误的根源,现在终于消失了。

还有一些后续的简化工作有待进行,比如不再为执行器中的子计划使用单独的 EState,但我将在稍后解决这个问题。

2007-02-21 10:12 momjian 添加 configure --enable-profiling 以启用 GCC 分析。来自 Korry Douglas 和 Nikhil S 的补丁

2007-02-20 22:27 adunstan 允许 pltcl 参数传递给 spi_prepare 和 plpython 参数传递给 plpy.prepare,这些参数可以是标准类型别名,也可以是 pg_type 中已知的类型。类似于最近在 plperl 中的更改。

2007-02-20 18:49 momjian 防止 BLCKSZ < 1024,并让 initdb 测试共享缓冲区的大小基于 BLCKSZ 值。

2007-02-20 12:32 tgl 从执行器的 API 中删除 Query 结构。这使得我们可以停止在准备好的语句、门户等中存储大多冗余的 Query 树。为了替换 Query,规划器在已完成的计划树的顶部插入了一种名为 PlannedStmt 的新节点类型;它只包含在运行时仍然需要的 Query 字段。门户等中保留的语句列表现在由混合的 PlannedStmt 和裸实用程序语句节点组成——没有 Query。这顺便说来允许我们从 Query 和 Plan 节点中删除一些本不应该存在的字段。

待办事项:简化运行时范围表;目前传递给执行器的范围表仍然包含子查询的 Query 树。

initdb 由于存储规则的更改而强制执行。

2007-02-20 05:23 petere 在 psql \d 中识别继承表的模式,如果需要。

作者:Bernd Helmle

2007-02-19 12:41 momjian 在 EXTRACT() 和 date_part() 中添加 "isodow" 选项,其中星期日 = 7。

2007-02-16 22:11 momjian 删除用于 to_char MS 和 US 输出的 rint()。我们不能使用 rint(),因为我们不能溢出到下一个更高的单位,而且我们可能会为 MS 打印较低的单位。

2007-02-16 19:55 momjian 为 int8 和 NUMERIC 创建 AVG() 聚合函数,它们不计算 X^2,作为性能增强。

作者:Mark Kirkwood

2007-02-16 18:32 tgl 教会 find_nonnullable_rels 处理 OR 情况:如果 OR 的每个分支都强制某个关系不可为空,那么我们可以说 OR 也强制该关系不可为空。这值得付出一些额外的努力,因为它可能允许将外部连接简化为普通连接。

2007-02-16 02:46 petere 用于将表数据和表模式映射到 XML 的函数(也称为 XML 导出)。

2007-02-15 22:39 momjian 添加了两个新的格式字段,用于与 to_char()、to_date() 和 to_timestamp() 一起使用:- ID 用于星期几 - IDDD 用于一年中的第几天

这使得可以将 ISO 周日期转换为以周表示的文本形式,或从以周表示的文本形式转换为 ISO 周日期('IYYY-IW-ID'),也可以将 ISO 周日期转换为以一年中的第几天表示的文本形式,或从以一年中的第几天表示的文本形式转换为 ISO 周日期('IYYY-IDDD')。

我还为 extract / date_part 添加了 'isoyear' 字段。

作者:Brendan Jurd

2007-02-15 21:59 momjian SSL 改进

o 读取全局 SSL 配置文件 o 添加 GUC "ssl_ciphers" 以控制允许的密码 o 添加 libpq 环境变量 PGSSLKEY 以控制 SSL 硬件密钥

作者:Victor B. Wagner

2007-02-15 18:23 alvherre 将自动 vacuum 重构为两个进程:一个虚拟进程,它会持续运行,并向 postmaster 请求 "自动 vacuum 工作进程" 的 vacuum 运行。工作进程进行实际的 vacuum 工作。这允许未来的改进,例如允许多个自动 vacuum 任务并行运行。

目前,代码保持了以前的行为,即在任何时候都只有一个自动 vacuum 进程,方法是休眠,直到前一个工作进程完成。

2007-02-14 00:10 momjian 针对 to_date()/to_timestamp() 的 'D' 字段(星期几)的修正,该字段偏离了一位。当然,使用 'D' 从字符转换为日期没有太多意义。

来自 Brendan Jurd 的报告。

2007-02-13 20:58 tgl 完善外键机制,使其对应用的相等性检查有一个合理的语义基础,而不是随机依赖于可能被命名为 "=" 的运算符。相等性运算符现在将从 FK 约束依赖的唯一索引的 opfamily 中选择,以强制执行引用列的唯一性;因此,它们一定与该索引的相等性概念一致。除其他事项外,这应该修复一段时间以前注意到的问题,即 pg_dump 在用户定义类型上的外键约束失败时,可能会失败,因为必需的运算符不在搜索路径中。这也意味着以前关于 "外键约束将需要代价高昂的顺序扫描" 的警告条件已经消失:如果比较条件不可索引,那么我们将完全拒绝该约束。所有这些都符合过去的讨论。

在此过程中,让 RI 触发器查看 pg_constraint 以获取其信息,而不是使用 pg_trigger.tgargs;并消除 ri_triggers.c 中始终容易出错的固定大小字符串缓冲区,转而使用 StringInfo 缓冲区来构建 RI 查询。

initdb 由于 pg_constraint 和 pg_trigger 中添加了列而强制执行。

2007-02-13 14:18 tgl 改进 postmaster 在 accept() 调用失败时的行为。由于服务器套接字仍然处于读就绪状态,因此代码是一个紧密的循环,浪费了大量的 CPU。除了等待之外,我们无法做任何事情来清除故障,但我们应该给其他进程更多机会来完成并释放 FD;因此插入一个短暂的休眠。此外,避免在这种情况下出现虚假的 "close(-1)"。根据 Jim Nasby 的报告。

2007-02-10 09:58 petere StrNCpy -> strlcpy(未完成)

2007-02-09 11:12 tgl 在 DROP DATABASE 期间调用 pgstat_drop_database,以便任何受害者数据库的统计文件条目尽快消失。我们已经在每个关系级别做了类似的事情,不知道为什么对整个数据库没有做。有了这个更改,pgstat_vacuum_tabstat 通常不会找到任何需要做的事情;尽管我们仍然需要它作为后备,以防在负载下 DROPDB 或 TABPURGE 消息丢失。

2007-02-08 22:35 tgl 将 HeapTupleHeaders 的 cmin 和 cmax 字段合并为一个字段,方法是在每个后端中保留私有状态,这些后端在当前顶级事务中插入和删除了相同的元组。这已经足够了,因为不需要能够从任何其他事务中确定 cmin/cmax。这使我们恢复到 23 字节的标头,消除了 8.0 中为了支持子事务而付出的代价。补丁来自 Heikki Linnakangas,由我进行了一些小的修改,遵循一段时间以前在 pghackers 列表中讨论的设计。

2007-02-08 10:28 momjian Win32 回归测试修复

对于一般的 win32,这使得能够以管理员身份运行回归测试,方法是使用与 pg_ctl 和 initdb 使用相同的受限令牌方法。

对于 vc++,它添加了 pg_regress.exe 的构建,添加了一个 resultmap,并修复了它如何运行安装。

作者:Magnus Hagander

2007-02-08 10:16 momjian 添加 /contrib/pg_standby

pg_standby 是一个可用于创建暖备服务器的生产就绪程序。还需要其他配置,所有这些配置都将在主服务器手册中描述。

Simon Riggs

2007-02-08 00:05 momjian

* src/: backend/access/nbtree/nbtinsert.c, backend/access/nbtree/nbtxlog.c, include/access/nbtree.h: 减少页面拆分的 WAL 活动

> 目前,索引拆分会将拆分页面上的所有数据写入 > WAL。这会产生大量的 WAL 流量。需要将复制到右侧页面的元组记录到 WAL 中,但不需要将保留在原始页面上的元组记录到 WAL 中。

Heikki Linnakangas

2007-02-07 22:22 momjian 修复了在使用 to_timestamp() 或 to_date() 时,代码在没有 "TM" 时的 bug。

如果输入字段是可变长度的,例如月份或日名称,则假设为 "TM"。这与 Oracle 的行为一致。

2007-02-07 18:11 tgl 添加了一个函数 pg_stat_clear_snapshot(),它会丢弃当前事务中已经收集的任何统计快照;这允许 plpgsql 函数监视统计更新,即使它们被限制在一个事务中。使用它来代替以前涉及 pg_stat_file() 的 kludge,在统计回归测试中等待统计收集器更新。在内部,将统计快照的存储与事务边界分离;它们将一直存在,直到有人调用 pg_stat_clear_snapshot——xact.c 在事务结束时仍然这样做,以保持以前的行为。这使得逻辑更加清晰,代价是在每次事务退出时多执行几十个周期。

2007-02-07 13:34 tgl 修改统计回归测试,使其延迟,直到统计文件实际发生变化(上限为 30 秒),并将延迟时间记录在 postmaster 日志中。这应该让我们了解 buildfarm 中间歇性统计失败时发生的事情。根据 Andrew Dunstan 的想法。

2007-02-07 11:44 tgl 删除以 xlog 为中心的 "数据库系统已准备就绪" 消息,并用 "数据库系统已准备就绪,可以接受连接" 消息代替,该消息由 postmaster 在它真正准备就绪可以接受连接时发出。根据 Markus Schiltknecht 的提议以及随后的讨论。

2007-02-06 19:52 petere 将一些 strncpy() 替换为 strlcpy()。

2007-02-06 19:28 petere 添加来自 OpenBSD 的 strlcat(),用于替换 strncat 和其他奇怪的编码实践。

2007-02-06 04:16 petere 将 NAMEDATALEN 定义从 postgres_ext.h 移动到 pg_config_manual.h。它曾经是 libpq 导出接口的一部分,但在许多版本之前,现在不再需要使其对客户端可访问。

2007-02-05 21:59 tgl 添加对散列子计划中跨类型散列的支持(散列 IN/NOT IN 情况,这些情况不会转换为真正的连接)。由于这是最后缺少的基础设施,所以继续为散列整数运算符族和浮点数运算符族添加跨类型运算符。运算符族项目现在已完成... 呃,除了文档...

2007-02-04 23:22 tgl 将 MaxTupleSize 重命名为 MaxHeapTupleSize,以明确它不是用来描述索引元组的最大大小的(这通常是 AM 相关的);因此,删除了内置于其中的关于 "特殊空间" 的错误推断。

调整 TOAST_TUPLE_THRESHOLD 和 TOAST_MAX_CHUNK_SIZE,以避免浪费每 toast 块两个字节,并确保计算正确地跟踪页面标头大小的任何未来变化。计算以前是不准确的,不会造成任何危害,除了浪费空间,但未来的更改可能会更严重地破坏它。

修复 BTMaxItemSize 的计算,它以前计算为可以安全的值加上 1 字节。这在实践中不会造成任何危害,因为它只与 maxalign'd 长度进行比较,但页面标头大小或 btree 特殊空间的未来更改可能会暴露问题。

initdb 由于 TOAST_MAX_CHUNK_SIZE 的更改而强制执行,该更改会更改 toast 表的存储。

2007-02-03 09:06 petere 真正地实现 XMLSERIALIZE。类似地,使 xml 到文本的强制转换观察 xmloption。

重新组织解析树和 API 中 XML 选项的表示,使其更容易管理和理解。

添加解析 XML 表达式的回归测试。

2007-01-31 10:09 teodor 允许 GIN 的 extractQuery 方法发出信号表明没有内容能够满足查询。在这种情况下,extractQuery 应该返回 -1 作为 nentries。这将 extractQuery 方法的原型更改为使用 int32* 而不是 uint32* 作为 nentries 参数。基于此,gincostestimate 可能看到两种特殊情况:找不到任何内容,或者应该使用 seqscan。

根据 http://archives.postgresql.org/pgsql-hackers/2007-01/msg01581.php 上的提案

PS tsearch_core 修补程序应该略微修改以支持更改,但我正在等待关于 tsearch_core 修补程序审查的决定。

2007-01-29 20:33 tgl 添加对哈希索引搜索和哈希连接中跨类型哈希的支持。用于聚合目的的哈希仍然需要工作,所以现在还不到将任何跨类型运算符标记为可哈希以供一般使用的时间,但如果运算符在系统目录中以手工方式标记,则这些情况有效。

2007-01-29 15:17 momjian 更新进程终止消息以显示来自 exec.c 和 postmaster.c 的信号编号和名称。

2007-01-28 18:21 tgl 改善哈希连接以立即丢弃输入元组,如果它们不能匹配,因为它们包含一个空连接键(并且连接运算符已知是严格的)。当内部关系包含大量空值时,会显着提高性能,如错误 #2930 所述。

2007-01-28 12:58 tgl 对 plpgsql 的错误位置报告的准确性进行了一些小的改进;受到 Stefan Kaltenbrunner 最近的错误报告中显示的误导性 CONTEXT 行的启发。此外,允许这些消息中显示的语句类型名称被翻译。

2007-01-28 11:16 neilc 添加一个新的内置类型,“uuid”。这实现了 UUID 类型,类似于 RFC 4122 中定义的类型。此补丁包含基本实现,以及回归测试。文档和一些额外的功能将在以后发布。Catversion 已提升。

来自 Gevik Babakhani 的补丁;Peter、Tom 和我审查。

2007-01-27 17:44 momjian 修改 SGML makefile 以允许“gmake draft”构建草案 html(“draft”现在是一个目标,不再是修饰符)。

2007-01-26 20:55 adunstan 允许 spi_prepare 的参数为标准类型别名,以及 pg_type 中已知的类型。修复了错误 #2917。为这些情况添加了一些回归测试。

2007-01-24 22:30 momjian 为 pg_dumpall 添加“输出文件”选项,这在 Win32 中特别有用,因为子进程(pg_dump)的输出重定向不起作用。

Dave Page

2007-01-24 21:46 momjian 允许 pg_dumpall 指定数据库名称而不是默认的“template1”。

Dave Page

2007-01-24 21:30 momjian 为 pg_dumpall 添加 --tablespaces-only 和 --roles-only 选项。

Dave Page

2007-01-24 21:17 momjian 在与创建 COPY 相同的事务中执行 COPY 时,防止 WAL 日志记录。

Simon Riggs

2007-01-23 00:07 tgl 添加 CREATE/ALTER/DROP OPERATOR FAMILY 命令,以及 COMMENT ON OPERATOR FAMILY;并为 CREATE OPERATOR CLASS 添加 FAMILY 选项以允许将类添加到预先存在的族。根据之前的讨论。天哪,这是一大堆乏味的剪切和粘贴操作……

2007-01-21 20:35 tgl 为 CREATE/ALTER FUNCTION 添加 COST 和 ROWS 选项,以及底层的 pg_proc 列 procost 和 prorows,以允许简单地用户调整函数调用的估计成本,以及控制由返回集合的函数返回的估计行数。我们最终可能希望将其扩展以允许函数特定的估计例程,但似乎有共识,我们应该首先尝试简单的常数估计。特别是,这提供了一种相对简单的方法来控制在计划节点中应用不同 WHERE 子句的顺序,这在最近的 EquivalenceClass 计划程序重写使该顺序比以前不可预测得多的情况下是一件好事。

2007-01-20 18:13 tgl 简化 pg_am 中排序能力访问方法的表示:仅提供一个布尔值“amcanorder”,而不是指定排序运算符策略编号的字段。我们已经决定要求排序能力 AM 使用与 btree 兼容的策略编号,因此旧字段是过度的(实际上误导了允许的内容)。

2007-01-20 16:47 neilc 使 setseed() 返回 void,而不是返回没有使用的 int4。根据 2006 年 9 月 20 日的 pgsql-patches 讨论。提升 catversion。

2007-01-20 16:17 neilc 在 psql 显示表输出中分别列出禁用的触发器。以前,禁用的触发器与启用的触发器的显示方式没有区别,这非常误导。来自 Brendan Jurd 的补丁。

2007-01-20 15:45 tgl 重构计划程序的 pathkeys 数据结构,以创建变量等价类的单独且显式表示。这是一个广泛的重写,但它带来了一些好处:* 计划程序不再在存在“不完整”的运算符族的情况下失败,这些运算符族不提供对所有可能的 datatype 组合的运算符。* 避免生成然后丢弃冗余的相等子句。* 删除关于派生等式始终使用名为“=”的运算符的错误假设。* mergejoins 现在可以处理各种排序顺序(例如,降序),而不是将每个可合并的运算符绑定到一个确切的排序顺序。* 更好地识别冗余排序列。* 可以利用出现在外部连接下的等式。

2007-01-20 13:43 neilc 稍微重构索引 AM API:将 currentItemData 和 currentMarkData 从 IndexScanDesc 移动到需要此信息的 AM 的不透明结构中(目前是 gist 和 hash)。

来自 Heikki Linnakangas 的补丁,由 Neil Conway 修复。

2007-01-19 11:58 petere 添加对将二进制值(即 bytea)转换为 xml 值的支持,并使用新的 GUC 参数“xmlbinary”来控制输出编码,如 SQL/XML 标准所述。

2007-01-16 16:41 neilc 为 float8 数据类型实现 width_bucket()。

实现从逻辑上来说有点丑陋,但我看不到让它更简洁的简单方法。

在编写此代码时,我注意到我之前对 width_bucket() 的实现没有正确处理 NaN

postgres=# select width_bucket('NaN', 1, 5, 5); width_bucket -------------- 6 (1 行)

AFAICS SQL:2003 没有定义 NaN 值,因此它没有解决 width_bucket() 在这里应该如何表现。该补丁更改了 width_bucket(),以便如果为操作数或 width_bucket() 的上下限指定了 NaN,则会引发 ereport(ERROR)。对于 float8,任何浮点输入都不允许使用 NaN,并且+/- 无限度不允许作为直方图界限(但允许作为操作数)。

更新文档和回归测试,提升 catversion。

2007-01-16 13:26 alvherre 根据讨论,在默认配置中启用 autovacuum。

2007-01-16 08:28 alvherre 安排当另一个操作想要单独访问它(如 DROP DATABASE)时,杀死 autovacuum。这允许回归测试在启用 autovacuum 的情况下通过,这为最终默认启用 autovacuum 开启了大门。

2007-01-12 05:00 meskes 简化回归处理 添加 Joachim 的补丁以解决 OpenBSD 回归套件中的错误。

2007-01-11 10:47 meskes 应用 Joachim 的 --regression 选项补丁。此选项使 .c 文件标记,因此不再需要环境变量。使用特殊错误消息创建了一个特殊的 MinGW 文件。在运行回归测试时,不要将端口打印到日志文件。

2007-01-10 13:06 tgl 更改计划程序到执行程序的 API,以便计划程序告诉执行程序对涉及元组比较的计划节点(Agg、Group、Unique、SetOp)使用哪些比较运算符。以前,执行程序查找 datatype 的默认相等运算符,这真的很不稳定,因为数据被馈送到节点的方式可能根据某种非默认运算符类进行排序,该运算符类可能对相等有不同的概念。计划程序知道它按什么排序,因此可以提供要使用的正确相等运算符。此外,此更改将几个目录查找从执行程序移到计划程序,这应该在某种程度上帮助预先计划的查询的启动时间。修改计划程序以删除对始终能够使用默认运算符的一些其他漫不经心的假设。还将“空值优先/最后”信息添加到用于合并连接的 Plan 节点中——执行程序和计划程序都不能应对,但至少 API 已经到位了。

2007-01-09 17:00 momjian 通过使用 nattr 字段的高位启用另外五个元组状态位,并重命名该字段。

Heikki Linnakangas

2007-01-09 16:31 momjian 添加 GUC log_temp_files 以记录使用临时文件。

Bill Moran

2007-01-08 21:14 tgl 支持 ORDER BY ... NULLS FIRST/LAST,并为 btree 索引添加 ASC/DESC/NULLS FIRST/NULLS LAST 每列选项。计划程序对它的支持还很初级;它还不知道如何计划使用非默认排序选项的合并连接。文档也很初级。我将努力在以后改进这些内容。

注意与以前行为不兼容的更改:如果运算符不是某个 btree opclass 的小于或大于成员,则 ORDER BY ... USING 现在将被拒绝。这可以防止如果选择了实际上没有定义正确排序顺序的运算符,则出现不合理的行为。

2007-01-06 14:40 momjian 允许 initdb 指定 pg_xlog 目录。

Euler Taveira de Oliveira

2007-01-05 11:17 adunstan 如果可能,在 pg_regress 中调用 setrlimit 以允许生成核心文件,并在 pg_ctl 中提供类似行为的开关。

2007-01-03 13:11 tgl 根据几个月前的讨论,清理 smgr.c/md.c API。而不是让 md.c 返回一个成功/失败布尔值到 smgr.c,而 smgr.c 只是去 elog,让 md.c 自己发出 elog 消息。这允许更好的错误报告,特别是在 Peter 抱怨的“短读”或“短写”等情况下。此外,删除允许 mdread() 从读到文件末尾返回零的 kludge:这现在是一个错误条件,除非 InRecovery 或 zero_damaged_pages = true。(哈希索引过去需要这种行为,但现在不需要了。)此外,强制使用 mdwrite() 来重写现有块,而使用 mdextend() 来扩展关系 EOF。此限制使我们能够摆脱对通过偶然引用错误块号创建巨型文件的旧临时防御:我们只会在 mdextend() 中创建新段,而不是 mdwrite() 或 mdread()。(同样,当 InRecovery 时,我们仍然允许这样做,因为我们需要允许更新后来被截断的块。)此外,清理了针对错误 #2737 的原始临时补丁:将对关系段进行填充以达到完整长度的责任移到 md.c 中。

2007-01-03 09:35 momjian 尝试为仅返回 Nan 并为 pow/exp 溢出/下溢设置 errno 的平台返回正确的溢出/下溢消息。

2007-01-02 20:19 darcy 将货币类型扩展到 64 位。

2007-01-02 16:25 momjian finite() 不再使用;删除特定于平台的 finite() 基础设施。

2007-01-02 15:59 momjian 将 n_live_tuples 和 n_dead_tuples 添加到 pg_stat_all_tables。

目的是允许使用类似于 autovacuum 的条件真空和聚类,使用 SQL 来发现所需的统计信息。

不需要文档更新。目录版本已更新。

Glen Parker

2007-01-02 15:00 momjian 修复 float4/8 以一致地处理 Infinity 和 Nan,例如,如果输入值之一为无穷大,则 Infinity 是计算的有效结果。以前的代码假设返回无穷大的操作是溢出。

一致地处理下溢/溢出,并添加对聚合溢出的检查。

一致地防止 Inf/Nan 被强制转换为整数 datatype。

修复 INT_MIN % -1 以防止溢出。

更新新错误文本的回归结果。

根据 Roman Kononov 的报告。

2006-12-30 16:21 tgl 支持用户定义类型的类型修饰符,并将大多数关于标准类型 typmod 表示的知识提取到特定于类型的 typmod I/O 函数中。Teodor Sigaev,由 Tom Lane 进行了编辑。

2006-12-27 19:29 tgl 在每个反斜杠命令后刷新 \o 文件(如果有)。我们已经对普通 SQL 命令执行了此操作,因此对反斜杠命令执行此操作似乎是一致的。根据 Rajesh Kumar Mallah 的抱怨。

2006-12-27 17:30 tgl 改进内存管理代码,避免在上下文具有较小 maxBlockSize 时出现低效行为:我们需要将我们视为“块”的 最大请求大小限制为适合 maxBlockSize。否则,我们将把请求大小向上舍入到下一个 2 的幂,浪费空间,如果我们不打算将块的大小足够大以适合其他东西,那么这样做就没有意义。激励此行为的示例是本地缓冲区管理,它在 TopMemoryContext 中对 8K(一个 BLCKSZ 缓冲区)进行重复分配,该上下文具有 maxBlockSize = 8K,因为在大多数情况下,那里的分配很小。这会导致每个本地缓冲区实际上占用 16K 的空间,当有数千个本地缓冲区时,这些空间会累加起来。我打算更改 localbuf.c 以聚合其请求,这将防止这种特定错误行为,但似乎类似的场景可能会出现在其他地方,因此修复核心问题似乎也是明智的。

2006-12-22 19:52 momjian 对于 GUC 值,检查 'on' 和 'off' 的部分字符串匹配,但要求至少有两个字符才能保持唯一性。这现在与我们支持的其他布尔字符串的行为相匹配,这是 Gurjeet Singh 报告的问题。

2006-12-22 19:43 tgl 重构运算符类以允许改进跨数据类型情况的处理。运算符类现在存在于“运算符族”中。虽然大多数族都等效于单个类,但相关类可以分组到一个族中以表示它们在语义上是兼容的。跨类型运算符现在自然地成为一个族的辅助部分,而不必像我们最初那样将它们塞入特定的运算符类中。

此提交重构了目录并清理了足够多的后果,以确保所有内容至少能像以前一样正常工作,但实际上改进规划器行为所需的大部分工作将在以后进行。此外,目前还没有 CREATE/DROP/ALTER OPERATOR FAMILY 命令;现在创建新族的唯一方法是允许 CREATE OPERATOR CLASS 默认情况下创建一个。我还欠一些文档工作。但这可以在这个基础设施到位后以更小的部分完成。

2006-12-21 11:05 petere 初始 SQL/XML 支持:xml 数据类型和初始函数集。

2006-12-18 20:53 adunstan

* doc/src/sgml/libpq.sgml, doc/src/sgml/ref/psql-ref.sgml, src/interfaces/libpq/fe-connect.c:如果 dbName 参数包含等号,则将其解释为 PQsetdbLogin 的 conninfo 字符串。Tom Lane 和 Andrew Dunstan。

2006-12-18 13:56 tgl 将 pg_am.amstrategies 设置为零,用于没有固定运算符策略编号的索引 AM,即 GiST 和 GIN。这几乎是美观到不需要 catversion 提升,但由于 opr_sanity 回归测试必须与目录条目同步更改,所以我认为最好执行一次提升。

2006-12-15 19:38 adunstan 为 \copy 命令启用 \timing 输出

2006-12-12 14:43 petere 允许从配置命令行增加 CPPFLAGS。这通常有效,但一些平台模板在未询问的情况下覆盖了它。

2006-12-10 17:13 tgl 向 Param 节点添加一个 paramtypmod 字段。对于表示外部提供值的 Params 来说,这是多余的,因为承载这些值的 API 只指定类型而不指定 typmod。但是,对于 PARAM_SUBLINK Params 来说,携带子链接输出列的 typmod 很方便。对于最近报告的“找不到用于排序的 pathkey 项目”和“子计划 tlist 中找不到唯一表达式”错误来说,这是一个比我最初的 8.2 兼容补丁更简洁的解决方案。此外,总有一天我们可能希望支持外部参数的 typmod...

2006-12-08 14:50 tgl 从 pg_control 中删除 logId/logSeg 字段,因为它们在正常操作中不需要,并且如果我们不坚持这些值有效,我们可以避免在每次日志段切换时重写 pg_control。减少 pg_control 更新次数对于性能和可靠性来说都是一个好主意。它确实让 pg_resetxlog 的工作稍微困难一些,但这似乎是一个不错的权衡;无论如何,对 pg_resetxlog 的更改相当于自动化人们以前需要手动完成的事情,即查看现有的 pg_xlog 文件以确保新的 WAL 起始点位于这些文件之后。

顺便说一下,更改 xlog.c 中的“数据库系统被中断”消息的措辞:将 pg_control 时间戳描述为“最后已知处于运行状态”而不是暗示它是服务中断的确切时间。有了这个更改,时间戳通常是最后一次检查点的时间,这可能是在故障发生之前的几分钟内;我们已经看到了一些迹象表明人们倾向于误解旧的措辞。

由于 pg_control 布局发生更改,因此 initdb 强制执行。Simon Riggs 和 Tom Lane

2006-12-06 13:06 neilc 向 pg_stat_activity 添加一个 txn_start 列。这使得识别长期运行的事务变得更加容易。由于我们已经需要记录事务开始时间(例如 now()),因此我们不需要任何额外的系统调用来报告此信息。

Catversion 提升,需要 initdb。