数据目录是由 PostgreSQL 版本 13 初始化的,与此版本 14.0 不兼容

Mr.*_*key 72 postgresql debian docker portainer

我已将 Portainer 下载到我的服务器上,并在其中的容器中创建了一个 PostgreSQL 数据库。今天我无法再访问数据库。日志显示一条​​消息,表明存在版本问题。

我已经读到了一些类似的问题,例如在容器的映像更新到最新版本后,Postgres 容器因“数据库文件与服务器不兼容”而崩溃,在容器的映像更新为后,Postgres 容器因“数据库文件与服务器不兼容”而崩溃最新的

并且解决方案brew postgresql-upgrade-database不起作用。

我能做些什么?

日志

2021-10-03  [1] FATAL:  database files are incompatible with server
2021-10-03  [1] DETAIL:  The data directory was initialized by PostgreSQL version 13, which is not compatible with this version 14.0 (Debian 14.0-1.pgdg110+1).

PostgreSQL Database directory appears to contain a database; Skipping initialization
Run Code Online (Sandbox Code Playgroud)

我还发现了这个https://www.postgresql.org/docs/14/upgrading.html但命令不起作用。我是否需要以某种方式在容器中执行此操作,或者哪些命令可以使其在容器中运行?

小智 37

您需要使用以下命令将数据文件更新为新格式:

$ brew postgresql-upgrade-database 
Run Code Online (Sandbox Code Playgroud)

  • 通过额外的支持信息可以改进您的答案。请[编辑]添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以[在帮助中心](/help/how-to-answer)找到有关如何写出好的答案的更多信息。 (8认同)
  • 同意机器人的意见,这需要更多细节。这不是对 Homebrew 的引用,从而假设用户使用的是 macOS 吗?为什么您认为“brew”是最好的选择? (5认同)

Nya*_*edy 17

我解决了它

  1. 删除 postgres 映像
  2. 删除音量
  3. 再次拉取镜像

假设您知道上述步骤的 docker 命令。

  • 删除音量?并丢失所有数据?(: 不要这样做! (22认同)
  • 命令是什么? (10认同)
  • @DevilCode 我使用 `docker-compose stop` 然后使用 `docker-compose down` 来删除旧的数据库和卷。 (3认同)
  • 有史以来最糟糕的建议。这样做您会丢失所有数据。您的公司可能会损失数十亿美元,让您被解雇并无家可归。 (2认同)

Jac*_*cka 10

除了建议删除所有卷/图像/容器的答案之外 - 如果您在 中有数据库的共享卷docker-compose.yml,例如:

db:
  image: postgres:14.1-alpine
  volumes:
    - ./tmp/db:/var/lib/postgresql/data
Run Code Online (Sandbox Code Playgroud)

您还需要删除位于 中的 postgres 映射卷数据./tmp/db。否则那些冲突的文件仍然存在。

如果您不关心数据 - 您将数据库用于开发目的,并且您将能够轻松地重新创建数据库,只需运行rm -r ./tmp/db. 您可以重新docker-compose up创建数据库。

如果您关心数据,请pg_dumpall在删除文件之前转储数据,并在运行后恢复docker-compose up,并且您的 postgres 服务再次准备就绪。


FFi*_*inn 9

在 docker-compose.yml 中你可以改变

db-data:/var/lib/postgresql/data:rw
Run Code Online (Sandbox Code Playgroud)

对此

db-data:/var/lib/postgresql@14/data:rw
Run Code Online (Sandbox Code Playgroud)

删除镜像并运行

docker compose up -d
Run Code Online (Sandbox Code Playgroud)

再一次


cop*_*ser 5

运行后出现问题

brew update
brew upgrade

Brew 升级postgresql到 14,这给了我

psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

我也通过检查看到了与您相同的错误

tail /usr/local/var/postgres/server.log

我已经降级到版本13运行

brew uninstall postgresql
brew install postgresql@13
echo 'export PATH="/usr/local/opt/postgresql@13/bin:$PATH"' >> ~/.zshrc

我用来再次启动数据库的命令是

pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start


小智 0

我在 keycloak 中的 postgres 上也遇到了同样的问题。将版本降级到 13 解决了我的问题。