PostgreSQL 安装及相关配置

记录一下最近安装和配置 PostgreSQL 的过程,
使用了 CentOS 7 和 PostgreSQL 10,包括以下内容

  • 安装
  • 初始化
  • 开放密码登录
  • Oracle FDW

安装

下方链接可以找到最新的安装方法

Linux downloads (Red Hat family)

最近一次成功安装的步骤

CentOS 7 + PostgreSQL 10

  1. 选择版本

    yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    
  2. Install the client packages:

    yum install postgresql10
    
  3. Optionally install the server packages:

    yum install postgresql10-server
    
  4. Optionally initialize the database and enable automatic start:

    /usr/pgsql-10/bin/postgresql-10-setup initdb
    systemctl enable postgresql-10
    systemctl start postgresql-10
    

补充插件

除了核心数据库的安装,还需要另外安装一个库

yum install postgresql10-contrib

没有这个库,就无法直接通过 CREATE EXTENSION 安装插件

初次登录

root 用户

  1. 找到配置文件目录

    systemctl status postgresql-10
    

    在执行结果中找到 -D 后的部分,一般为 /var/lib/pgsql/10/data/

  2. 修改其中的 hba.conf 文件

  3. 将第一个 host 方式中的 ident 改成 md5,允许使用账号密码登录

postgres 用户

  1. 数据库默认开启 postgres 用户,操作系统也有同名用户
  2. 在 shell 中切换到 postgres 用户

    su postgres
    
  3. 登录数据库,Peer 方式

    psql
    
  4. 刷新配置使上述 root 用户修改的配置生效

    SELECT pg_reload_conf()
    
  5. 设置密码

    \password
    

尝试通过密码登录

OracleFdw

  1. 安装 postgresql*-devel

    yum install postgresql10-devel
    
  2. 安装 oracle-instantclient*-devel-*,先从 Oracle 网站下载

    rpm -i oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm
    
  3. 添加环境变量

    export ORACLE_HOME=/usr/lib/oracle/12.2/client64/lib
    
  4. 确认包含 pgxs

    /usr/pgsql-10/bin/pg_config --pgxs
    

    反馈

    /usr/pgsql-10/lib/pgxs/src/makefiles/pgxs.mk
    
  5. 安装 oracle-fdw

    unzip oracle_fdw-2.2.1.zip
    cd oracle_fdw-2.2.1
    PATH=/usr/pgsql-10/bin:$PATH make
    make install
    
  6. 修改 ld.so.conf 或往 ld.so.conf.d 下加入一个新规则

    echo $ORACLE_HOME > /etc/ld.so.conf.d/oracle.conf
    
  7. 刷新 ld.so.cache

    ldconfg
    
  8. 进入数据库,安装插件

    CREATE EXTENSION oracle_fdw;
    

    如果以当前用户直接启动 PostgreSQL 的服务端,可以省去步骤 6、7 ,但现在是通过 systemctl 启动,会以 postgres 用户来运行,设置在当前用户下的 $ORACLE_HOME这个环境变量不会生效,可以在 ld.so.conf 里加入全局的配置,让所有用户都能找到 /usr/lib/oracle/12.2/client64/lib 下的动态库。否则会出现 postgres 找不到 oracle 动态库而无法启用扩展,并提示:could not load library "/usr/pgsql-10/lib/oracle_fdw.so": libclntsh.so.12.1: cannot open shared object file