重建时,Discourse 会移除 PostgreSQL 10 并重新安装 9.5 版本

当我尝试使用 ./launcher rebuild app 命令时,脚本似乎会卸载已安装的 PostgreSQL v10,并尝试重新安装 v9.5,导致脚本在执行查询时卡住。

./launcher rebuild app
确保启动器为最新版本
获取 origin
启动器已是最新版本
停止旧容器
+ /usr/bin/docker stop -t 10 app
app
cd /pups && git pull && /pups/bin/pups --stdin
已是最新版本。
I, [2020-05-08T10:12:43.767891 #1]  INFO -- : 正在加载 --stdin
I, [2020-05-08T10:12:43.782184 #1]  INFO -- : > apt-get remove -y postgresql-10 postgresql-client-10 postgresql-contrib-10
I, [2020-05-08T10:12:46.569346 #1]  INFO -- : 正在读取软件包列表...
正在构建依赖关系树...
正在读取状态信息...
以下软件包将被移除:
  postgresql-10 postgresql-client-10
未升级,未新安装,将移除 2 个软件包,未升级 0 个。
执行此操作后,将释放 30.6 MB 的磁盘空间。
(正在读取数据库 ... 当前已安装 42938 个文件和目录。)
正在移除 postgresql-10 (10.12-2.pgdg100+1) ...
invoke-rc.d: 无法确定当前运行级别
invoke-rc.d: policy-rc.d 拒绝执行停止操作。
正在移除 postgresql-client-10 (10.12-2.pgdg100+1) ...
正在处理 postgresql-common (213.pgdg100+1) 的触发器 ...
从已安装的 myspell/hunspell 软件包构建 PostgreSQL 词典...
正在移除过时的词典文件:

I, [2020-05-08T10:12:46.570949 #1]  INFO -- : > apt-get update && apt-get install -y postgresql-9.5 postgresql-client-9.5 postgresql-contrib-9.5
debconf: 由于未安装 apt-utils,延迟软件包配置
I, [2020-05-08T10:12:57.347153 #1]  INFO -- : 获取:1 http://security.debian.org/debian-security buster/updates InRelease [65.4 kB]
命中:2 http://deb.debian.org/debian buster InRelease
获取:3 http://deb.debian.org/debian buster-updates InRelease [49.3 kB]
获取:4 http://apt.postgresql.org/pub/repos/apt buster-pgdg InRelease [84.4 kB]
命中:5 https://deb.nodesource.com/node_10.x buster InRelease
获取:6 http://security.debian.org/debian-security buster/updates/main amd64 Packages [197 kB]
获取:7 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 Packages [168 kB]
已下载 564 kB,耗时 1 秒 (543 kB/s)
正在读取软件包列表...
正在读取软件包列表...
正在构建依赖关系树...
正在读取状态信息...
建议的软件包:
  postgresql-doc-9.5 libdbd-pg-perl
将安装以下新软件包:
  postgresql-9.5 postgresql-client-9.5 postgresql-contrib-9.5
未升级,新安装 3 个软件包,未移除 0 个,未升级 0 个。
需要下载 5,700 kB 的归档文件。
执行此操作后,将额外占用 27.2 MB 的磁盘空间。
获取:1 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 postgresql-client-9.5 amd64 9.5.21-2.pgdg100+1 [1,249 kB]
获取:2 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 postgresql-9.5 amd64 9.5.21-2.pgdg100+1 [3,988 kB]
获取:3 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 postgresql-contrib-9.5 amd64 9.5.21-2.pgdg100+1 [463 kB]
已下载 5,700 kB,耗时 0 秒 (30.5 MB/s)
选择之前未选中的软件包 postgresql-client-9.5。
(正在读取数据库 ... 当前已安装 42096 个文件和目录。)
正在准备解包 .../postgresql-client-9.5_9.5.21-2.pgdg100+1_amd64.deb ...
正在解包 postgresql-client-9.5 (9.5.21-2.pgdg100+1) ...
选择之前未选中的软件包 postgresql-9.5。
正在准备解包 .../postgresql-9.5_9.5.21-2.pgdg100+1_amd64.deb ...
正在解包 postgresql-9.5 (9.5.21-2.pgdg100+1) ...
选择之前未选中的软件包 postgresql-contrib-9.5。
正在准备解包 .../postgresql-contrib-9.5_9.5.21-2.pgdg100+1_amd64.deb ...
正在解包 postgresql-contrib-9.5 (9.5.21-2.pgdg100+1) ...
正在设置 postgresql-client-9.5 (9.5.21-2.pgdg100+1) ...
update-alternatives: 使用 /usr/share/postgresql/9.5/man/man1/psql.1.gz 提供 /usr/share/man/man1/psql.1.gz (psql.1.gz),采用自动模式
正在设置 postgresql-9.5 (9.5.21-2.pgdg100+1) ...
正在创建新的 PostgreSQL 集群 9.5/main ...
/usr/lib/postgresql/9.5/bin/initdb -D /var/lib/postgresql/9.5/main --auth-local peer --auth-host md5
属于此数据库系统的文件将由用户 "postgres" 拥有。
此用户也必须拥有服务器进程。

数据库集群将使用区域设置 "C.UTF-8" 进行初始化。
默认数据库编码已相应设置为 "UTF8"。
默认文本搜索配置将设置为 "english"。

数据页校验和已禁用。

正在修复现有目录 /var/lib/postgresql/9.5/main 的权限 ... 完成
正在创建子目录 ... 完成
选择默认 max_connections ... 100
选择默认 shared_buffers ... 128MB
选择默认时区 ... Etc/UTC
选择动态共享内存实现 ... posix
正在创建配置文件 ... 完成
正在创建 /var/lib/postgresql/9.5/main/base/1 中的 template1 数据库 ... 完成
正在初始化 pg_authid ... 完成
正在初始化依赖项 ... 完成
正在创建系统视图 ... 完成
正在加载系统对象的描述 ... 完成
正在创建排序规则 ... 完成
正在创建转换 ... 完成
正在创建词典 ... 完成
正在设置内置对象的权限 ... 完成
正在创建信息模式 ... 完成
正在加载 PL/pgSQL 服务器端语言 ... 完成
正在清理 database template1 ... 完成
正在将 template1 复制到 template0 ... 完成
正在将 template1 复制到 postgres ... 完成
正在将数据同步到磁盘 ... 完成

成功。您现在可以使用以下命令启动数据库服务器:

    /usr/lib/postgresql/9.5/bin/pg_ctl -D /var/lib/postgresql/9.5/main -l logfile start

Ver Cluster Port Status Owner    Data directory               Log file
9.5 main    5433 down   postgres /var/lib/postgresql/9.5/main /var/log/postgresql/postgresql-9.5-main.log
update-alternatives: 使用 /usr/share/postgresql/9.5/man/man1/postmaster.1.gz 提供 /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz),采用自动模式
invoke-rc.d: 无法确定当前运行级别
invoke-rc.d: policy-rc.d 拒绝执行启动操作。
正在设置 postgresql-contrib-9.5 (9.5.21-2.pgdg100+1) ...
正在处理 postgresql-common (213.pgdg100+1) 的触发器 ...
从已安装的 myspell/hunspell 软件包构建 PostgreSQL 词典...
正在移除过时的词典文件:

I, [2020-05-08T10:12:57.348808 #1]  INFO -- : > mkdir -p /shared/postgres_run
I, [2020-05-08T10:12:57.352684 #1]  INFO -- :
I, [2020-05-08T10:12:57.353381 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run
I, [2020-05-08T10:12:57.357476 #1]  INFO -- :
I, [2020-05-08T10:12:57.358473 #1]  INFO -- : > chmod 775 /shared/postgres_run
I, [2020-05-08T10:12:57.362147 #1]  INFO -- :
I, [2020-05-08T10:12:57.362866 #1]  INFO -- : > rm -fr /var/run/postgresql
I, [2020-05-08T10:12:57.366500 #1]  INFO -- :
I, [2020-05-08T10:12:57.367283 #1]  INFO -- : > ln -s /shared/postgres_run /var/run/postgresql
I, [2020-05-08T10:12:57.370661 #1]  INFO -- :
I, [2020-05-08T10:12:57.371341 #1]  INFO -- : > socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
2020/05/08 10:12:57 socat[1583] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): 没有那个文件或目录
I, [2020-05-08T10:12:57.378628 #1]  INFO -- :
I, [2020-05-08T10:12:57.379219 #1]  INFO -- : > rm -fr /shared/postgres_run/.s*
I, [2020-05-08T10:12:57.382871 #1]  INFO -- :
I, [2020-05-08T10:12:57.383391 #1]  INFO -- : > rm -fr /shared/postgres_run/*.pid
I, [2020-05-08T10:12:57.387099 #1]  INFO -- :
I, [2020-05-08T10:12:57.387666 #1]  INFO -- : > mkdir -p /shared/postgres_run/9.5-main.pg_stat_tmp
I, [2020-05-08T10:12:57.390634 #1]  INFO -- :
I, [2020-05-08T10:12:57.391391 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run/9.5-main.pg_stat_tmp
I, [2020-05-08T10:12:57.394278 #1]  INFO -- :
I, [2020-05-08T10:12:57.401477 #1]  INFO -- : 文件 > /etc/service/postgres/run  chmod: +x  chown:
I, [2020-05-08T10:12:57.408202 #1]  INFO -- : 文件 > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2020-05-08T10:12:57.409009 #1]  INFO -- : > chown -R root /var/lib/postgresql/9.5/main
I, [2020-05-08T10:12:57.422867 #1]  INFO -- :
I, [2020-05-08T10:12:57.423930 #1]  INFO -- : > [ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/9.5/bin/initdb -D /shared/postgres_data || exit 0
I, [2020-05-08T10:12:57.426672 #1]  INFO -- :
I, [2020-05-08T10:12:57.427242 #1]  INFO -- : > chown -R postgres:postgres /shared/postgres_data
I, [2020-05-08T10:12:57.462928 #1]  INFO -- :
I, [2020-05-08T10:12:57.464158 #1]  INFO -- : > chown -R postgres:postgres /var/run/postgresql
I, [2020-05-08T10:12:57.467828 #1]  INFO -- :
I, [2020-05-08T10:12:57.468624 #1]  INFO -- : 在 /etc/postgresql/9.5/main/postgresql.conf 中将 data_directory = '/var/lib/postgresql/9.5/main' 替换为 data_directory = '/shared/postgres_data'
I, [2020-05-08T10:12:57.469564 #1]  INFO -- : 在 /etc/postgresql/9.5/main/postgresql.conf 中将 (?-mix:#?listen_addresses *=.*) 替换为 listen_addresses = '*'
I, [2020-05-08T10:12:57.470341 #1]  INFO -- : 在 /etc/postgresql/9.5/main/postgresql.conf 中将 (?-mix:#?synchronous_commit *=.*) 替换为 synchronous_commit = $db_synchronous_commit
I, [2020-05-08T10:12:57.471161 #1]  INFO -- : 在 /etc/postgresql/9.5/main/postgresql.conf 中将 (?-mix:#?shared_buffers *=.*) 替换为 shared_buffers = $db_shared_buffers
I, [2020-05-08T10:12:57.471959 #1]  INFO -- : 在 /etc/postgresql/9.5/main/postgresql.conf 中将 (?-mix:#?work_mem *=.*) 替换为 work_mem = $db_work_mem
I, [2020-05-08T10:12:57.472759 #1]  INFO -- : 在 /etc/postgresql/9.5/main/postgresql.conf 中将 (?-mix:#?default_text_search_config *=.*) 替换为 default_text_search_config = '$db_default_text_search_config'
I, [2020-05-08T10:12:57.473527 #1]  INFO -- : > install -d -m 0755 -o postgres -g postgres /shared/postgres_backup
I, [2020-05-08T10:12:57.477638 #1]  INFO -- :
I, [2020-05-08T10:12:57.478527 #1]  INFO -- : 在 /etc/postgresql/9.5/main/postgresql.conf 中将 (?-mix:#?max_wal_senders *=.*) 替换为 max_wal_senders = $db_max_wal_senders
I, [2020-05-08T10:12:57.479383 #1]  INFO -- : 在 /etc/postgresql/9.5/main/postgresql.conf 中将 (?-mix:#?wal_level *=.*) 替换为 wal_level = $db_wal_level
I, [2020-05-08T10:12:57.480297 #1]  INFO -- : 在 /etc/postgresql/9.5/main/postgresql.conf 中将 (?-mix:#?checkpoint_segments *=.*) 替换为 checkpoint_segments = $db_checkpoint_segments
I, [2020-05-08T10:12:57.481086 #1]  INFO -- : 在 /etc/postgresql/9.5/main/postgresql.conf 中将 (?-mix:#?logging_collector *=.*) 替换为 logging_collector = $db_logging_collector
I, [2020-05-08T10:12:57.481922 #1]  INFO -- : 在 /etc/postgresql/9.5/main/postgresql.conf 中将 (?-mix:#?log_min_duration_statement *=.*) 替换为 log_min_duration_statement = $db_log_min_duration_statement
I, [2020-05-08T10:12:57.482800 #1]  INFO -- : 在 /etc/postgresql/9.5/main/pg_hba.conf 中将 (?-mix:^#local +replication +postgres +peer$) 替换为 local replication postgres  peer
I, [2020-05-08T10:12:57.483651 #1]  INFO -- : 在 /etc/postgresql/9.5/main/pg_hba.conf 中将 (?-mix:^host.*all.*all.*127.*$) 替换为 host all all 0.0.0.0/0 md5
I, [2020-05-08T10:12:57.484408 #1]  INFO -- : > HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/9.5/bin/postmaster -D /etc/postgresql/9.5/main
I, [2020-05-08T10:12:57.486842 #1]  INFO -- : > sleep 5
2020-05-08 10:12:57.553 UTC [1602] LOG:  数据库系统在 2020-05-08 10:04:26 UTC 已关闭
2020-05-08 10:12:57.556 UTC [1602] LOG:  现在启用了 MultiXact 成员回绕保护
2020-05-08 10:12:57.560 UTC [1599] LOG:  数据库系统已准备好接受连接
2020-05-08 10:12:57.561 UTC [1606] LOG:  autovacuum 启动器已启动
I, [2020-05-08T10:13:02.496896 #1]  INFO -- :
I, [2020-05-08T10:13:02.497338 #1]  INFO -- : > su postgres -c 'createdb discourse' || true
错误:未安装 PostgreSQL 版本 10
I, [2020-05-08T10:13:02.581202 #1]  INFO -- :
I, [2020-05-08T10:13:02.581940 #1]  INFO -- : > su postgres -c 'psql discourse -c "create user discourse;"' || true
错误:未安装 PostgreSQL 版本 10
I, [2020-05-08T10:13:02.646709 #1]  INFO -- :
I, [2020-05-08T10:13:02.647394 #1]  INFO -- : > su postgres -c 'psql discourse -c "grant all privileges on database discourse to discourse;"' || true
错误:未安装 PostgreSQL 版本 10
I, [2020-05-08T10:13:02.719733 #1]  INFO -- :
I, [2020-05-08T10:13:02.720430 #1]  INFO -- : > su postgres -c 'psql discourse -c "alter schema public owner to discourse;"'
错误:未安装 PostgreSQL 版本 10
I, [2020-05-08T10:13:02.784568 #1]  INFO -- :
I, [2020-05-08T10:13:02.785461 #1]  INFO -- : 正在终止异步进程
I, [2020-05-08T10:13:02.785916 #1]  INFO -- : 向 HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/9.5/bin/postmaster -D /etc/postgresql/9.5/main 的 pid 1599 发送 INT 信号
2020-05-08 10:13:02.786 UTC [1599] LOG:  收到快速关闭请求
2020-05-08 10:13:02.786 UTC [1599] LOG:  正在中止任何活动事务
2020-05-08 10:13:02.787 UTC [1606] LOG:  autovacuum 启动器正在关闭
2020-05-08 10:13:02.793 UTC [1603] LOG:  正在关闭
2020-05-08 10:13:02.798 UTC [1603] LOG:  数据库系统已关闭


失败
--------------------
Pups::ExecError: su postgres -c 'psql discourse -c "alter schema public owner to discourse;"' 失败,返回值为 #<Process::Status: pid 1617 exit 1>
失败位置:/pups/lib/pups/exec_command.rb:112:in `spawn'
执行失败,参数为 "su postgres -c 'psql $db_name -c \"alter schema public owner to $db_user;\"'"
7830e2259ebf66011b6d9f2882ecfc3d204f354ee965ccdc06126682b0fab6d1
** 引导失败 ** 请向上滚动查看早期的错误消息,可能不止一个。
./discourse-doctor 可能有助于诊断问题。

你是如何以及何时安装 Discourse 的?

经典安装,在 Digital Ocean Droplet 上使用此方法:discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub

(至少是两年前,但我进行了多次更新。该实例当前版本为 2.5.0b3,我尝试升级到 beta 4)

能否分享您 app.yml 文件的前几行?

即 templates 下的内容。

你说得对,app.yml 的开头确实有这一行:
"templates/postgres.9.5.template.yml"
我把它替换成了:
"templates/postgres.template.yml"
第一次重新构建后,我的 Postgres 数据库就升级了。
第二次重新构建目前正在进行中,但看起来一切正常:slight_smile

感谢大家!

所以你在两年多前就把那个改成了 9.5,然后就把这事忘了。

好吧,就在关键时刻,PostgreSQL 12 的升级马上就要来了。Meta 已经在运行它了。

看起来是这样的::slight_smile: 感谢您的帮助,@Falco