訳あってCentOS7にPostgreSQL 8.2をインストールしようとするとコンパイルは出来ても動作しませんでした。8.2はかなり古いPostgreSQLなので仕方ないですが、動作させることは可能でした。
CentOS6ならPostgreSQL 8.2を普通にコンパイルできると思います。
CentOS7にインストール
コンパイルは出来るのですがinitdbが失敗します。
$ initdb --no-locale -D pgdata The files belonging to this database system will be owned by user "yohgaki". This user must also own the server process. The database cluster will be initialized with locale C. creating directory pgdata … ok creating subdirectories … ok selecting default max_connections … 100 selecting default shared_buffers/max_fsm_pages … 32MB/204800 creating configuration files … ok creating template1 database in pgdata/base/1 … ok initializing pg_authid … FATAL: wrong number of index expressions STATEMENT: CREATE TRIGGER pg_sync_pg_database AFTER INSERT OR UPDATE OR DELETE ON pg_database FOR EACH STATEMENT EXECUTE PROCEDURE flatfile_update_trigger(); child process exited with exit code 1 initdb: removing data directory "pgdata"
どうもgcc 4.8だと新しすぎてこうなるようなので
$ sudo yum install -y compat-gcc-44
としてgcc 4.4を入れてコンパイルします。
$ CC=/usr/bin/gcc44 ./configure --prefix=/home/yohgaki/pgsql $ make $ make install
今度はinitdbも成功し、pgbenchを実行しても問題なく動作しました。
$ export HOME="/home/yohgaki/pgsql/bin:$HOME"
$ initdb -D data
The files belonging to this database system will be owned by user "yohgaki".
This user must also own the server process.
The database cluster will be initialized with locale ja_JP.utf8.
The default database encoding has accordingly been set to UTF8.
creating directory data … ok
creating subdirectories … ok
selecting default max_connections … 100
selecting default shared_buffers/max_fsm_pages … 32MB/204800
creating configuration files … ok
creating template1 database in data/base/1 … ok
initializing pg_authid … ok
initializing dependencies … ok
creating system views … ok
loading system objects' descriptions … ok
creating conversions … ok
setting privileges on built-in objects … ok
creating information schema … ok
vacuuming database template1 … ok
copying template1 to template0 … ok
copying template1 to postgres … ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.
Success. You can now start the database server using:
postgres -D data
or
pg_ctl -D data -l logfile start
Fedora 33にインストール
常用しているFedora 33で使えた方が便利、ということでgccバージョンが問題ならコンパイラーフラグでどうにかなるだろう、と試してみるとあっさり動きました。
$ CFLAGS="-Wc90-c99-compat" ./configure --prefix=/usr/local/pgsql-8.2
CentOS7でもコンパイラーフラグの指定だけで使えるかも知れません。