外部 Postgres 中不存在“selected”关系

你好,
我正在尝试设置一个 Discourse 服务器,该服务器由两台服务器组成,作为故障转移对。为此,我需要它们连接到同一个数据库。我已经在其他地方运行了一个 PostgreSQL 服务器,并遵循了此处的说明,看起来连接正常。然而,当我尝试重建应用时,却遇到了以下错误:

I, [2019-07-23T17:33:20.623719 #14] INFO – : > cd /var/www/discourse && su discourse -c ‘bundle exec rake
db:migrate’
rake aborted!
StandardError: 发生了一个错误,此迁移及之后的所有迁移均被取消:

PG::UndefinedTable: 错误:关系 “selected” 不存在
第 7 行:OR (t.closed AND tsp.execute_at >= now())
^
: WITH selected AS (
SELECT tsp.id
FROM topic_status_updates tsp
JOIN topics t
ON t.id = tsp.topic_id
WHERE tsp.execute_at < now()
OR (t.closed AND tsp.execute_at >= now())
)

UPDATE topic_status_updates
SET deleted_at = now(), deleted_by_id = -1
WHERE id in (SELECT * FROM selected)

当我访问 Discourse 数据库时,发现并不存在名为 ‘selected’ 的表。我该如何解决这个问题?之前我在单台服务器上本地部署时,实例一直正常运行;只有在将数据库迁移到另一台服务器后,问题才开始出现。

数据库存在吗?

确实如此——当我访问数据库时,总共有 125 张表。

这是预期的行为,此处的 selected 是一个 CTE(公用表表达式)。

“其他地方”的 PostgreSQL 版本是什么?

我们数据库服务器上运行的版本是 9.4.22

哦,那版本太旧了。目前最低支持的版本是 PostgreSQL 10。