首先要安装MCR v713 x64, 参考 :
然后安装pg_matlab, 首先下载代码 :
matlab有一些bug, 需要修改一下
修改安装目录和lib文件目录. 以及mcr环境
pg_matlab用到的libmatcore.so文件是已经编译好的, 直接使用, 这两个文件如下, md5码一致.
开始安装pg_matlab, 需要用到一些环境变量 :
使用pg_matlab, 设置pg93用户的环境变量 :
在库中创建测试用的函数 :
启动matcored进程, 指定监听端口必须和libmatpg/mat_pg_funcs.h一致, 这个进程是pg函数与matlab沟通的桥梁.
函数测试 :
pg和matcored已经建立连接 :
wget http://www.cybertec.at/download/pg_matlab/pg_matlab-v2.tar.gz
tar -zxvf pg_matlab-v2.tar.gz
mv pg_matlab /opt/soft_bak/postgresql-9.3.0/contrib/
matlab有一些bug, 需要修改一下
cd /opt/soft_bak/postgresql-9.3.0/contrib/pg_matlab
[root@db-172-16-3-150 pg_matlab]# vi libmatpg/Makefile
MODULE_big = matpg
改成
MODULE_big = libmatpg
[root@db-172-16-3-150 pg_matlab]# vi libmatpg/create_mat_pg_operators.sql.in
CREATE OR REPLACE FUNCTION mat_pg_add(DOUBLE PRECISION[], DOUBLE PRECISION[]) RETURNS DOUBLE PRECISION[]
AS '$libdir/matpg'
改成
CREATE OR REPLACE FUNCTION mat_pg_add(DOUBLE PRECISION[], DOUBLE PRECISION[]) RETURNS DOUBLE PRECISION[]
AS '$libdir/libmatpg'
修改安装目录和lib文件目录. 以及mcr环境
[root@db-172-16-3-150 pg_matlab]# vi Makefile
修改
PGM_DIR = /home/pg93/pgsql/bin
LIB_DIR = /home/pg93/pgsql/lib
MATLABROOT=/opt/MATLAB/MATLAB_Compiler_Runtime/v713
[root@db-172-16-3-150 pg_matlab]# cd matcored/
vi Makefile
第一行上面加一行
MATLABROOT=/opt/MATLAB/MATLAB_Compiler_Runtime/v713
[root@db-172-16-3-150 pg_matlab]# vi libmatpg/mat_pg_funcs.h
以下为pg函数连接matcored的端口, 编译时写死了, 所以后面在启动matcored时必须使用这个端口, pg函数会连不上的.
确保这个端口没有被其他程序占用.
#define MATPGPORT (54321)
pg_matlab用到的libmatcore.so文件是已经编译好的, 直接使用, 这两个文件如下, md5码一致.
[root@db-172-16-3-150 pg_matlab]# cd libmatcore
[root@db-172-16-3-150 libmatcore]# ll
total 8
drwxr-xr-x. 2 pg93 pg93 4096 Feb 10 2011 distrib
drwxr-xr-x. 2 pg93 pg93 4096 Feb 10 2011 src
[root@db-172-16-3-150 libmatcore]# md5sum distrib/libmatcore.so
ae9f35e018a46c2a240ea0490aa9d98e distrib/libmatcore.so
[root@db-172-16-3-150 libmatcore]# md5sum src/libmatcore.so
ae9f35e018a46c2a240ea0490aa9d98e src/libmatcore.so
开始安装pg_matlab, 需要用到一些环境变量 :
[root@db-172-16-3-150 pg_matlab]# export PATH=/home/pg93/pgsql/bin:$PATH
[root@db-172-16-3-150 pg_matlab]# which pg_config
/home/pg93/pgsql/bin/pg_config
[root@db-172-16-3-150 pg_matlab]# USE_PGXS=1 make all
make -e -C matcored
make[1]: Entering directory `/opt/soft_bak/postgresql-9.3.0/contrib/pg_matlab/matcored'
cc -Wall -c -o matcored.o matcored.c -I/opt/MATLAB/MATLAB_Compiler_Runtime/v713/extern/include -I../libmatcore/distrib
cc -Wall -c -o mat_wrapper.o mat_wrapper.c -I/opt/MATLAB/MATLAB_Compiler_Runtime/v713/extern/include -I../libmatcore/distrib
gcc -o matcored matcored.o mat_wrapper.o -L/opt/MATLAB/MATLAB_Compiler_Runtime/v713/runtime/glnxa64 -L../libmatcore/distrib -lmwmclmcrrt -lmatcore
make[1]: Leaving directory `/opt/soft_bak/postgresql-9.3.0/contrib/pg_matlab/matcored'
USE_PGXS=1 make -e -C libmatpg
make[1]: Entering directory `/opt/soft_bak/postgresql-9.3.0/contrib/pg_matlab/libmatpg'
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fpic -I../matcored -I. -I. -I/home/pg93/pgsql9.3.0/include/server -I/home/pg93/pgsql9.3.0/include/internal -D_GNU_SOURCE -I/usr/include/libxml2 -c -o mat_pg_funcs.o mat_pg_funcs.c
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fpic -shared -o libmatpg.so mat_pg_funcs.o -L/home/pg93/pgsql9.3.0/lib -Wl,--as-needed -Wl,-rpath,'/home/pg93/pgsql9.3.0/lib',--enable-new-dtags
sed 's,MODULE_PATHNAME,$libdir/create_mat_pg_operators,g' create_mat_pg_operators.sql.in >create_mat_pg_operators.sql
make[1]: Leaving directory `/opt/soft_bak/postgresql-9.3.0/contrib/pg_matlab/libmatpg'
[root@db-172-16-3-150 pg_matlab]# USE_PGXS=1 make install
cp libmatcore/distrib/libmatcore.so /home/pg93/pgsql/lib
cp matcored/matcored /home/pg93/pgsql/bin
USE_PGXS=1 make install -e -C libmatpg
make[1]: Entering directory `/opt/soft_bak/postgresql-9.3.0/contrib/pg_matlab/libmatpg'
/bin/mkdir -p '/home/pg93/pgsql9.3.0/lib'
/bin/mkdir -p '/home/pg93/pgsql9.3.0/share/contrib'
/usr/bin/install -c -m 755 libmatpg.so '/home/pg93/pgsql9.3.0/lib/libmatpg.so'
/usr/bin/install -c -m 644 create_mat_pg_operators.sql '/home/pg93/pgsql9.3.0/share/contrib/'
make[1]: Leaving directory `/opt/soft_bak/postgresql-9.3.0/contrib/pg_matlab/libmatpg'
使用pg_matlab, 设置pg93用户的环境变量 :
[root@db-172-16-3-150 pg_matlab]# su - pg93
pg93@db-172-16-3-150-> vi .bash_profile
export PS1="$USER@`/bin/hostname -s`-> "
export PGPORT=1921
export PGDATA=/ssd2/pg93/pg_root
export LANG=en_US.utf8
export PGHOME=/home/pg93/pgsql
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
export DATE=`date +"%Y%m%d%H%M"`
export PATH=$PGHOME/bin:$PATH:.
export MANPATH=$PGHOME/share/man:$MANPATH
export PGUSER=postgres
export PGHOST=$PGDATA
alias rm='rm -i'
alias ll='ls -lh'
export PGDATABASE=digoal
export MCRHOME=/opt/MATLAB/MATLAB_Compiler_Runtime/v713
export LD_LIBRARY_PATH=$MCRHOME/runtime/glnxa64:$MCRHOME/bin/glnxa64:$MCRHOME/sys/os/glnxa64:$MCRHOME/sys/java/jre/glnxa64/jre/lib/amd64:$MCRHOME/sys/java/jre/glnxa64/jre/lib/amd64/native_threads:$MCRHOME/sys/java/jre/glnxa64/jre/lib/amd64/server:$LD_LIBRARY_PATH
export XAPPLRESDIR=$MCRHOME/X11/app-defaults
在库中创建测试用的函数 :
pg93@db-172-16-3-150-> cd /home/pg93/pgsql/share/contrib/
pg93@db-172-16-3-150-> ll
total 4.0K
-rw-r--r--. 1 root root 341 Sep 27 12:35 create_mat_pg_operators.sql
pg93@db-172-16-3-150-> psql -f create_mat_pg_operators.sql
CREATE FUNCTION
psql:create_mat_pg_operators.sql:7: ERROR: operator does not exist: double precision[] + double precision[]
CREATE OPERATOR
启动matcored进程, 指定监听端口必须和libmatpg/mat_pg_funcs.h一致, 这个进程是pg函数与matlab沟通的桥梁.
pg93@db-172-16-3-150-> matcored 54321
pg93@db-172-16-3-150-> ps -ewf|grep matcore
pg93 7999 1 0 12:40 pts/1 00:00:00 matcored 54321
pg93 8001 7944 0 12:40 pts/1 00:00:00 grep matcore
pg93@db-172-16-3-150-> netstat -anp|grep 54321
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:54321 0.0.0.0:* LISTEN 7999/matcored
函数测试 :
pg93@db-172-16-3-150-> psql
psql (9.3.0)
Type "help" for help.
digoal=# \df
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+------------+--------------------+----------------------------------------+--------
public | mat_pg_add | double precision[] | double precision[], double precision[] | normal
(1 row)
digoal=# SELECT mat_pg_add( '{1,2,3,4}' , '{2,3,4,5}' );
卡住, 没反应了.
pg和matcored已经建立连接 :
pg93@db-172-16-3-150-> netstat -anp|grep 54321
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 127.0.0.1:54321 0.0.0.0:* LISTEN 7999/matcored
tcp 0 0 127.0.0.1:22297 127.0.0.1:54321 ESTABLISHED 8005/postgres
tcp 0 0 127.0.0.1:54321 127.0.0.1:22297 ESTABLISHED 7999/matcored