首页 > 解决方案 > postgres 9.4 找不到已编译的 pg_rewind 库

问题描述

我正在运行安装在 Ubuntu 16.04.3 上的 Postgres 9.4。Postgres 是使用 apt-get 安装的,我也使用 apt-get 下载了源代码和依赖项。我下载了 pg_rewind REL9_4_STABLE 分支并构建了它。当我尝试运行我的 pg_rewind 命令时,我得到以下信息:

    The servers diverged at WAL position 0/6148D50 on timeline 1.
Rewinding from Last common checkpoint at 0/5000098 on timeline 1
SQL command failed
CREATE OR REPLACE FUNCTION rewind_support.rewind_support_ls_dir(text, boolean) RETURNS SETOF text AS '$libdir/pg_rewind_support' LANGUAGE C STRICT;
ERROR:  could not access file "$libdir/pg_rewind_support": No such file or directory

Failure, exiting

我找到了 pg_rewind_support.so 库文件,并将其放置在 pg_config --libdir 和 --pkglibdir 返回的位置,但没有成功。我什至创建了一个没有 .so 扩展名的副本。

$ls -la $(pg_config  --pkglibdir)/pg_rewind_support*
-rw-r--r-- 1 root root 18768 Jul 16 17:59 /usr/lib/postgresql/9.4/lib/pg_rewind_support
-rw-r--r-- 1 root root 18768 Jul 16 17:50 /usr/lib/postgresql/9.4/lib/pg_rewind_support.so
$ls -la $(pg_config  --libdir)/pg_rewind_support*
-rw-r--r-- 1 root root 18768 Jul 16 17:59 /usr/lib/x86_64-linux-gnu/pg_rewind_support
-rw-r--r-- 1 root root 18768 Jul 16 17:44 /usr/lib/x86_64-linux-gnu/pg_rewind_support.so

任何想法如何让我的 apt-get 安装的 Postgres 识别 pg_rewind 库?我不想最终在生产中运行一个完整的内部打包和构建的 postgres。

标签: postgresqlubuntu-16.04postgresql-9.4

解决方案


在与 OP 一起解决这个问题时,构建 pg_rewind 的步骤是:

  • 下载相应的 PostgreSQL 9.4.18 tarball,解压。
  • 下载 pg_rewind,进入 contrib/
  • 配置 PostgreSQL 以匹配 Debian/Ubuntu 使用的目录布局:

    ./configure --libdir=/usr/lib/postgresql/9.4/lib --bindir=/usr/lib/postgresql/9.4/bin

  • 在 PostgreSQL 上做一个“制作”。

  • 在 pg_rewind 上执行“make”和“sudo make install”。

pg_rewind必须安装在源系统(这样 .so 在那里可用)和目标系统(这样pg_rewind二进制文件在那里可用)上。


推荐阅读