postgresql 在Docker上将数据从Postgres 9.6.5转移到Postgres 11.7

w8biq8rn  于 12个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(165)

我有一个Postgres 9.6.5 Docker容器,它有一个与之关联的卷,用于/var/lib/postgresql/data文件夹。我需要将Postgres升级到版本11.7并保留旧版本上的数据。我试图附加卷中存在的数据,但它给出了以下错误。
x1c 0d1x的数据
我在Postgres文档中读到,当它安装在物理机器上时,可以将旧版本升级到新版本,但是在容器的情况下似乎不存在该过程。到目前为止,我发现的唯一工作方法是通过转储文件进行数据恢复,然而,在存在大量数据的情况下,可能效率不高。我看到容器之间还有一种直接转储(即,不通过file.sql),使用以下命令

docker exec id_container_old_postgres pg_dump -U postgres -d db_name | docker exec -i id_container_new_postgres psql -U postgres -d db_name

字符串
这对我不起作用,并给出了以下错误

psql: FATAL:  Peer authentication failed for user "postgres"


然而,即使是这种方法,我恐怕是效率低下。因此,我认为这将是更有用的找到一种方法,让Postgres 11.7直接从卷读取数据。有没有什么方法可以做到这一点,任何数据检索过程,这是比我提到的一个更有效?

uxhixvfz

uxhixvfz1#

考虑到你是从哪里开始的(你现在还不知道如何连接到postgresql),没有。
你不需要反复做这些事情,所以专注于简单而正确地做。
首先,postgresql 11是生命周期的终结,所以除非你必须使用那个版本,否则就使用更高的版本。
其次,使用新版本的pg_dump而不是旧版本。新版本知道所有旧版本,可以在需要的地方翻译。
于是:

  • 如果可能,升级到PostgreSQL 16(最新版本)
  • 在主机上安装PostgreSQL客户端软件包v16
  • 使用它以-Fc(自定义/压缩格式)转储到文件
  • 然后使用它来恢复到PostgreSQL 16的容器
  • 删除文件

相关问题