postgresql - 在云 sql (GCP) 上维护后 pg_repack 版本不匹配
问题描述
我在 GCP 上有一个 cloud-sql postgres11 实例,并使用 pg_repack cron 来清理我的数据库。我注意到自上次维护(3 月 21 日 7 日)以来,我无法重新打包。当尝试手动运行重新打包时,我遇到了以下错误消息:
错误:pg_repack 失败并出现错误:程序 'pg_repack 1.4.4' 与数据库库 'pg_repack 1.4.6' 不匹配
做了以下检查:
- 加载的 pg_repack 版本是什么:
List of installed extensions
Name | Version | Schema | Description
--------------------+---------+------------+--------------------------------------------------------------
pg_repack | 1.4.4 | public | Reorganize tables in PostgreSQL databases with minimal locks
pg_stat_statements | 1.6 | public | track execution statistics of all SQL statements executed
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(3 rows)
- pg_repack 的可用版本是什么:
name | version | installed | superuser | relocatable | schema | requires | comment
-----------+---------+-----------+-----------+-------------+--------+----------+--------------------------------------------------------------
pg_repack | 1.4.4 | t | t | f | | | Reorganize tables in PostgreSQL databases with minimal locks
(1 row)
我将 pg_repack 升级到 1.4.6 版本并没有帮助,我还尝试删除并创建扩展,或者重新启动 sql-instance 没有运气。:-(
我想知道是否有人已经解决了这个问题。如果是这样,有什么解决办法吗?
解决方案
我在 Debian 10 上使用了一个非常卡的解决方法。基本上,我构建了一个 1.4.6 的副本,其中版本检查被注释掉,并使用-k
标志成功运行它:
sudo apt install build-essential postgresql-server-dev-13 libssl-dev zlib1g-dev libreadline-dev
git clone https://github.com/yunyu/pg_repack.git # My fork with the version checks commented out
cd pg_repack
make && sudo make install
./bin/pg_repack <flags>
它似乎有效,我没有遇到任何问题。显然,在可以访问 Postgres 实例的 VM 上运行它,因为您甚至需要 shell 访问权限才能执行 pg_repack。
推荐阅读
- sonarqube - 未针对构建中的所有作业分析 Azure Devops 中 PR 的 Sonarcloud 质量策略
- php - 从表单 html 接收到的 PHP 传递变量到两个 php 文件
- doctrine-orm - Doctrine ManyToOne 关系:如何在不触及相关实体的情况下保存实体?
- amazon-cognito - Cypress 与 amazon cognito 的集成测试
- eclipse - Eclipse 插件的记录器
- docker - 在 Makefile 中运行的 Docker 上找不到文件
- machine-learning - 在图像修复项目中使用 input_hole 和 mask 进行卷积的好处
- laravel - 如何在 Laravel 中使用相关表构建 Eloquent Query?
- java - 在java中并按此顺序查找给定集合的所有子集
- angular - 适用于 Android 的 Angular 9 推送通知