1. 程式人生 > >MacOS原始碼編譯安裝 PostgreSQL

MacOS原始碼編譯安裝 PostgreSQL

  • 編譯環境 Mac OSX 下只要裝了 Xcode 就行,所有編譯需要的工具和類庫都有了。CentOS 下需要安裝下面的軟體包。
$ sudo yum install make gcc readline-devel zlib-devel flex bison

如果是從 git 倉庫 checkout 出的原始碼,還需要額外安裝下面兩個包:

$ sudo yum install flex bison

Debian 下通過下面命令安裝編譯需要的軟體包:

$ sudo aptitude install make gcc libreadline-dev zlib1g-dev
  • 下載最新的原始碼包 Linux 下我喜歡把原始碼包下載到 /usr/local/src 目錄下,Mac OSX 預設沒有這個目錄,需要建立一個, 參見:[[./system-setup.org][建立一個用來進行原始碼編譯的目錄]]。然後從 PostgreSQL [[
    http://www.postgresql.org/ftp/source/
    ][官網下載]] 最新的原始碼包。
$ curl -O https://ftp.postgresql.org/pub/source/v9.4.5/postgresql-9.4.5.tar.bz2
$ tar xjvf postgresql-9.4.5.tar.bz2 -C /usr/local/src
  • 編譯安裝到指定目錄 將 9.4.5 這個版本編譯並安裝到 /usr/local/pgsql/9.4.5 這個目錄下,然後為該目錄建立一個 default的軟連結,表示當先正在使用的資料庫版本。
$ cd /usr/local/src/postgresql-9.4.5
$ ./configure --prefix=/usr/local/pgsql/9.4.5
$ make
$ sudo make install
$ sudo ln -s /usr/local/pgsql/9.4.5 /usr/local/pgsql/default
  • 建立一個數據庫管理員使用者 Mac OSX 下不能直接建立使用者,因為新增的使用者預設都有管理員許可權,好在系統預設有一個 _postgres 使用者可以直接用。 CentOS 下還是需要老老實實的建立一個 postgres 使用者。注意兩個系統的使用者名稱不同,Mac OSX 的帶一個下劃線。
$ sudo useradd -c "PostgreSQL Server" postgres
  • 資料庫初始化 建立一個目錄 /var/lib/pgsql,用來存貯資料庫的資料檔案。併為 postgres 設定訪問許可權。 用 postgres 建立一個當前主版本的資料目錄 9.4,並做一個 default 軟連結。注意在 initdb 時指定一個數據庫超級使用者 postgres, 否則 Mac OSX 使用預設的 _postgres 會有問題。
$ sudo mkdir /var/lib/pgsql
$ sudo chown postgres:postgres /var/lib/pgsql

# 如果是 Mac OSX 應該是 _postgres:wheel 
$ sudo chown _postgres:wheel /var/lib/pgsql

# 如果是 Mac OSX 要將 sudo -u 後的 postgres 改為 _postgres,但最後的 -U postgres 不變
$ sudo -u postgres mkdir /var/lib/pgsql/9.4
$ sudo -u postgres ln -s /var/lib/pgsql/9.4 /var/lib/pgsql/default
$ sudo -u postgres /usr/local/pgsql/default/bin/initdb \
                   -D /var/lib/pgsql/default/data -U postgres
  • 資料庫訪問設定 Mac OSX 主要是本機測試用,不用做下面的設定,如果是 CentOS 伺服器上需要下面的設定。 首先指定可以訪問資料庫的客戶端 ip。
$ sudo vi /var/lib/pgsql/default/data/pg_hba.conf

修改防火牆配置,放行 5432 埠的訪問。

$ sudo vi /etc/sysconfig/iptables
.....
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT
.....

$ sudo service iptables restart
  • 啟動資料庫 用 postgres 使用者啟動資料庫,並允許外部客戶端通過 5432 埠進行訪問,只是本機自用的話就去掉 -i 的啟動引數。
$ sudo -u postgres /usr/local/pgsql/default/bin/pg_ctl \
                   -D /var/lib/pgsql/default/data -o '-i -p 5432' \
                   -l /var/lib/pgsql/default/pgstartup.log start

正式資料庫伺服器的 postgres 使用者會有自己的 HOME 目錄,可以通過下面命令啟動

$ sudo -i -u postgres /usr/local/pgsql/default/bin/pg_ctl \
                      -D /var/lib/pgsql/default/data -o '-i -p 5432' \
                      -l /var/lib/pgsql/default/pgstartup.log start

Mac OSX 下啟動命令要去掉 sudo 的 -i 引數。

$ sudo -u _postgres /usr/local/pgsql/default/bin/pg_ctl \
                    -D /var/lib/pgsql/default/data -o '-i -p 5432' \
                    -l /var/lib/pgsql/default/pgstartu