我有一个基于 Amazon Linux AMI 2014.03 的 Amazon EC2 实例。我从他们的仓库安装了 PostresSQL:
yum install postgresql-libs postgresql postgresql-server postgresql-devel
我已经读到亚马逊从 9.1 意外升级到 9.2,所以我将这一行添加到末尾,/etc/yum.conf
希望我可以控制任何升级:
exclude=postgresql*
到目前为止,一切都很好。现在我正在设置连续存档,我想运行pg_archivecleanup
. 但是我在亚马逊发行版上找不到这个postgresql-contrib
包,它也没有在包中列出:
http://aws.amazon.com/amazon-linux-ami/2014.03-packages/
还有其他地方可以预编译吗?我尝试了以下自己编译它:
sudo su -
cd /usr/local/src
wget http://ftp.postgresql.org/pub/source/v9.2.7/postgresql-9.2.7.tar.gz
tar -xzf postgresql-9.2.7.tar.gz
cd /usr/local/src/postgresql-9.2.7
./configure --without-readline # fails until you add --without-readline
cd /usr/local/src/postgresql-9.2.7/contrib/pg_archivecleanup
gmake
gmake install
但gmake
失败了:
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard pg_archivecleanup.o -L../../src/port -Wl,--as-needed -Wl,-rpath,'/usr/local/pgsql/lib',--enable-new-dtags -lpgport -lz -lcrypt -ldl -lm -o pg_archivecleanup
/usr/bin/ld: cannot find -lpgport
collect2: error: ld returned 1 exit status
gmake: *** [pg_archivecleanup] Error 1
试图弄清楚这个问题让我在这里和这里看到-lpgport
了一些非常晦涩的错误报告。仅仅为了编译一个文件而在 Linux 本身中跟踪错误似乎有点极端。
我最好的选择是什么?
- 寻找 contrib 包的另一个来源 - 在哪里?
- 找到一种方法来编译这个模块 - 怎么样?
- 放弃 Amazon Linux 并从头开始使用 Ubuntu AMI。
- 忘记
pg_archivecleanup
并编写一个脚本来删除旧的 WAL 文件。
编辑
我使用 Elastic Beanstalk 与 Amazon AMI 进行了一些非常紧密的集成。我确信它可以与另一个 AMI 一起工作,但我预计会有其他陷阱。这个选项怎么样,改编自这篇文章:
# Change to home directory to download the software
cd ~/
# Get the right postgresql package (Redhat 64 Bit)
wget http://yum.postgresql.org/9.2/redhat/rhel-6-x86_64/pgdg-redhat92-9.2-7.noarch.rpm
# Install the package
sudo rpm -ivh pgdg-redhat92-9.2-7.noarch.rpm
sudo yum install postgresql92-contrib
这是否给了我两全其美的优势,一个带有官方 Postgres 存储库的 Amazon AMI?如有必要,我可以从该 RHEL 存储库完全重新安装 Postgres。
在这个AWS 论坛帖子的帮助下,我意识到这一行
/etc/yum.conf
不仅排除更新,还排除安装。一旦我(暂时)评论出来,我就可以使用
直接从 Amazon 存储库安装 postgresql-contrib——无需更改存储库或操作系统。