PostgreSQL 无法更改外键引用的聚集列的数据类型
最近在邮件列表中看到一个关于聚集列的数据类型修改导致的异常问题 BUG #17409。本文简要记录一下分析过程以及解决方案。目前该问题已经被修复,在 14.1 和 14.2 版本中应该可以重现。
commit 641f3dffcdf1c7378cfb94c98b6642793181d6db
Author: Tom Lane <tgl@sss.pgh.pa.us>
Date: Fri Mar 11 13:47:26 2022 -0500
Restore the previous semantics of get_constraint_index().
Commit 8b069ef5d changed this function to look at pg_constraint.conindid
rather than searching pg_depend. That was a good performance improvement,
but it failed to preserve the exact semantics. The old code would only
return an index that was "owned by" (internally dependent on) the
specified constraint, whereas the new code will also return indexes that
are just referenced by foreign key constraints. This confuses ALTER
TABLE, which was implicitly expecting the previous semantics, into
failing with errors like
ERROR: relation 146621 has multiple clustered indexes
or
ERROR: "pk_attbl" is not an index for table "atref"
We can fix this without reverting the performance improvement by adding
a contype check in get_constraint_index(). Another way could be to
make ALTER TABLE check it, but I'm worried that extension code could
also have subtle dependencies on the old semantics.
Tom Lane and Japin Li, per bug #17409 from Holly Roberts.
Back-patch to v14 where the error crept in.
Discussion: https://postgr.es/m/17409-52871dda8b5741cb@postgresql.org
PostgreSQL buffer usage 溢出
今天灿灿(微信公众号:PostgreSQL 学徒)发来一个问题,说是日志中 buffer usage
出现了负数,如下所示。
申威平台 float 到 short 类型转换的编译器优化问题
最近在做申威平台的兼容时发现一个关于编译器优化的 BUG。第一次遇到编译器优化的问题,因此在这里对其进行简要的记录。
PostgreSQL 自定义参数的标识符问题
PostgreSQL 提供了自定义参数的功能,您可以使用 SET
或 set_config()
函数来定义参数,本文介绍一下在 PG14(14.1 和 14.2)中引入的关于自定义参数标识符的的问题 BUG #17415。
Git bisect 二分查找实践
最近在分析 bug 的时候接触到了 git bisect
这个命令,虽然之前也知道这个命令,但是由于平时用的不多所以没有深入的研究,对它的使用方法也不是很熟悉。其实这个命令使用起来还是非常简单的,本文结合实际情况简要介绍一下 git bisect
的使用方法。
PostgreSQL 视图替换时更新输出列的 collation 问题
最近在邮件列表中发现 CREATE OR REPLACE VIEW
存在一个 bug,无法更新输出列的 collation。如下所示:
1 | postgres=# CREATE TABLE tbl (info text); |
可以看到在 Collation
列中没有发生改变,而且也没任何提示,只是默默的丢弃了 COLLATE "en_US.utf8"
,但是在视图的定义中又更新了 Collation
,这多少让人有点疑惑。
OpenSSH 私钥转 RSA 私钥
今天遇到关于私钥格式的问题,需要通过远程连接访问远端的服务器,该服务器是客户给的,然后通过 ssh 的方式访问,然而客户给的私钥是如下形式的:
1 | -----BEGIN OPENSSH PRIVATE KEY----- |
通过 ssh 连接时报无效的格式,Load key "~/.ssh/openssh_id_rsa": invalid format
。本文简要记录一下解决方法。
PostgreSQL 索引扫描排序运算符
最近看到一个问题,说是在 ExecIndexBuildScanKeys()
函数中的 isorderby
参数在有 ORDER BY
字句时,IndexScan
中的 indexorderby
也为空。例如下面两个查询:
1 | SELECT col FROM table_name ORDER BY index_key op const LIMIT 5; |
这两个查询在执行 ExecIndexBuildScanKeys()
时 IndexScan
结构中的 indexorderby
均为空。然而,IndexScan->indexorderby
的注释为 list of index ORDER BY exprs
,即 ORDER BY
语句后面的索引表达式,第一个 SQL 语句明显有 ORDER BY
字句,那么为什么此时的 indexorderby
为空呢?