由于软件包损坏,postgres-xc 无法安装

由于软件包损坏,postgres-xc 无法安装

在 14.04 安装中,postgresql 通过以下方式安装 sudo apt-get install postgresql postgresql-contrib libpq-dev

此安装旨在作为从属安装,但如果不运行 pg_resetxlog,则无法启动。即使/usr/lib/postgresql/9.3/bin/有 pg_resetxlog,系统也需要安装“postgres-xc”。

apt-get install postgres-xc
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 postgres-xc : Depends: postgres-xc-client but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

如果 postgres-xc 依赖于 postgres-xc-client,为什么这种依赖关系被忽略?

更新 从服务器是 VPS。通过 sudo apt-get install postgresql postgresql-contrib libpq-dev
主服务器创建 postgresql 进行安装(OS X 10.6.8,通过 homebrew 安装 postgre)

psql -c "select pg_start_backup('initial_backup');"
rsync -cva --inplace --exclude=*pg_xlog* /usr/local/var/postgres/ slave_IP_address:/var/lib/postgresql/9.3/main/
psql -c "select pg_stop_backup();"

然后从服务器创建了 recovery.conf 文件。但是从服务器启动时service postgresql start开始阻塞 pg_log 被排除,然后创建了该目录。
然后: PANIC: could not locate a valid checkpoint record

答案1

您复制了基础备份,但pg_xlog显然是故意的。

唯一可以解决此问题的情况是,主服务器中有一个文件,archive_command用于postgresql.conf将 WAL 存档到某个共享位置,而副本restore_command服务器中有一个文件recovery.conf,可以读取已存档的 WAL。即便如此,您也必须将mkdir文件清空pg_xlog

如果你不使用 WAL 归档必须复制pg_xlog,包括创建的 WAL 段的结束pg_stop_backup,如手册中所述。

我强烈建议您使用较新的pg_basebackup命令来制作副本。它更简单,更容易正确执行。只需replication在主服务器上启用来自计划副本地址的连接(在 `pg_hba.conf 中),就像流式复制一样,然后:

pg_basebackup -D /path/to/new/data/dir -X stream --write-recovery-conf -h master.server.address ...other connection options...

将主服务器的数据目录(包括所有必需的 WAL)复制到副本服务器。它甚至会recovery.conf自动为您创建一个。


postgres-xc不是与 PostgreSQL 相同。它是 PostgreSQL 旧版本的不兼容分支,添加了多主集群。如果 Ubuntu 提示您安装postgres-xc以获取 PostgreSQL 工具,则这是一个严重的错误。

永不奔跑pg_resetxlog。唯一需要这样做的时间是数据库严重故障之后,并且只有在完全备份之后;请参阅维基百科上的数据库损坏

相关内容