Postgres 升级问题

我正在帮助一个拒绝升级到 PG13 并导致 SSL 证书过期的人。

由于 https://meta.discourse.org/t/apt-get-update-fails-inside-container-yarn-repo-not-signed/253133/5,这可能会变得更加困难,但我修改了 pg12 和 pg13 模板,它们应该可以工作,但我无法完成升级,也无法使用 pg12 模板进行重建。

以下是我尝试升级时发生的情况:

                                     
正在修复现有目录 /var/lib/postgresql/12/main 的权限 ... 确定          
正在创建子目录 ... 确定
正在选择动态共享内存实现 ... posix
正在选择默认 max_connections ... 100                                                                                                              
正在选择默认 shared_buffers ... 128MB
正在选择默认 time zone ... Etc/UTC                              
正在创建配置文件 ... 确定
正在运行引导脚本 ... 确定
正在执行引导后初始化 ... 确定
正在将数据同步到磁盘 ... 确定
                                     
成功。您现在可以使用以下命令启动数据库服务器:
                                                                                                                                                       
    pg_ctlcluster 12 main start                                                                                                                        
                                                                           
update-alternatives: 警告:由于链接组 postmaster.1.g 损坏,正在强制重新安装 /usr/share/postgresql/13/man/man1/postmaster.1.gz                                                                                                                                            
invoke-rc.d: 无法确定当前运行级别
invoke-rc.d: policy-rc.d 禁止执行 start。             
正在处理 postgresql-common (246.pgdg110+1) 的触发器 ...
正在从已安装的 myspell/hunspell 包构建 PostgreSQL 字典...
正在删除过时的字典文件:                                                                                                                    
正在停止 PostgreSQL 12 数据库服务器:main。                                                                                                          
正在停止 PostgreSQL 13 数据库服务器:main。                                                                                                          
正在执行一致性检查               -----------------------------                                                                                                                          
正在检查集群版本                                   确定                                                                                         
正在检查数据库用户是否为安装用户                  确定                                                                                         
正在检查数据库连接设置                       确定                                                                                         
正在检查预备事务                                   确定                                                                                         
正在检查用户表中的系统定义复合类型  确定                                                                                         
正在检查用户表中的 reg* 数据类型                 确定                                                                                         
正在检查 contrib/isn 是否存在 bigint 传递不匹配       确定                                                                                         
正在创建全局对象转储                             确定                                                                                         
正在创建数据库模式转储                                                                                                                     
  discourse                                                                                                                                            
                                                                                                                                                       
*失败*                                                                                                                                              
                                                                                                                                                       
有关失败的可能原因,请参阅“pg_upgrade_dump_16566.log”的最后几行。
失败,正在退出
-------------------------------------------------------------------------------------
POSTGRES 升级失败
                                                                                                                                                       
请访问 https://meta.discourse.org/t/postgresql-13-update/172563 获取支持。
                                                                                                                                                       
在此期间,您可以运行 ./launcher start app 来重启您的应用程序。

尝试在不升级的情况下进行重建时,在迁移数据库时会出现类似以下内容:

PG::InsufficientPrivilege: 错误:创建扩展“unaccent”的权限被拒绝                                                                    

我认为我必须恢复到干净的安装和最新的备份,这已经是几天前的了。

您不能将以下内容添加到 hooks 中来创建 unaccent 扩展(如果它不存在)吗?

after_postgres:
    - exec: su postgres -c 'psql discourse -c "create extension if not exists unaccent;"'
3 个赞

听起来不错!我早上会去看看。谢谢

1 个赞

看起来搞定了!我不得不将其添加到 pg12 和 postgres。

嗯,它足以让它在 PG12 下再次运行,但我从未成功升级到 PG13。我做了一个备份,将 postgres 文件移到一个备份目录,重建,然后恢复了备份。

1 个赞

此主题在上次回复后 30 天自动关闭。不再允许回复。