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

mnowg1ta  于 2022-11-28  发布在  Docker
关注(0)|答案(9)|浏览(410)

我已经将Portainer下载到我的服务器上,并在那里的一个容器中创建了一个PostgreSQL数据库。今天我无法再访问该数据库。日志显示一条消息,说明存在版本问题。
我已经了解到一些类似的问题,如Postgres container crashes with database files are incompatible with server after container's image has been updated to the latest onePostgres container crashes with database files are incompatible with server after container's image has been updated to the latest one
并且溶液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

我也找到了这个https://www.postgresql.org/docs/14/upgrading.html,但是命令不起作用。我需要在容器中以某种方式做这个吗?或者什么命令可以使它在容器中保持运行?

zkure5ic

zkure5ic1#

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

$ brew postgresql-upgrade-database
jslywgbw

jslywgbw2#

我通过
1.删除postgres映像
1.删除卷
1.再次拖动图像
假设您知道以上步骤的Docker命令。

0wi1tuuw

0wi1tuuw3#

在建议删除所有卷/映像/容器的答案之上-如果您在docker-compose.yml中有一个用于DB的共享卷,例如:

db:
  image: postgres:14.1-alpine
  volumes:
    - ./tmp/db:/var/lib/postgresql/data

您还需要删除位于./tmp/db中的postgresMap卷数据。否则,这些冲突文件仍将存在。
如果你不关心数据--你使用数据库进行开发,你可以很容易地重新创建数据库,只需运行rm -r ./tmp/db。然后你可以只运行docker-compose up重新创建你的数据库。
如果您关心数据,请在删除文件之前使用pg_dumpall转储数据,并在运行docker-compose up且postgres服务再次就绪后进行恢复。

5f0d552i

5f0d552i4#

运行后出现问题
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
我用来再次启动DB的命令是
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start

n9vozmp4

n9vozmp45#

我想是因为postgresql13和14在初始化上的不同,你可以在新版本之前备份你的数据库,删除它,然后把数据库迁移到新版本
例如在Django中:

dump: ./manage.py dumpdata -o mydata.json
load: ./manage.py loaddata mydata.json

django:当然,如果你有重要的信息,为每个模型单独做这件事,并在加载时注意依赖关系。

6ss1mwsb

6ss1mwsb6#

我也面临着同样的问题与postgres在keycloak。降级版本到13解决了我的问题。

qzlgjiam

qzlgjiam7#

对我来说,数据库目录在/tmp/db中,由于那里没有重要的数据,我删除了所有数据,一切都运行良好...
但如果您数据很重要,请阅读以下内容:

mec1mxoz

mec1mxoz8#

在docker-compose. yml中,您可以更改

db-data:/var/lib/postgresql/data:rw

对此

db-data:/var/lib/postgresql@14/data:rw

删除图像并运行

docker-compose up -d

再来一次

h6my8fg2

h6my8fg29#

我有同样的问题后,家酿更新我的mac -安装@14的postgresql
这对我有什么帮助:
安装旧的二进制文件v13
brew安装postgresql@13
备份您的旧DB文件夹
使用新名称初始化数据库
现在使用pg_upgrade如下:
pg_upgrade --old-datadir [您的旧数据库文件夹] --new-datadir [您的新数据库文件夹] --old-bindir [链接到旧bin(v13)]
例如:
pg_upgrade --旧数据目录PSQ-data --新数据目录PSQ-data_new --旧绑定目录/usr/local/Cellar/postgresql@13/13.9/bin
源为旧bin您将有安装后@13,只是看看你在终端上安装后收到什么“摘要”.
此操作后,只需使用新的DB启动服务器

相关问题