greenplum 是支持java 开发自定函数的,方法如下,请参考.
1.安装jdk,并配置好环境变量。注:每个节点都需要。
2.安装jdk后,执行如下命令:root用户
# echo "$JAVA_HOME/jre/lib/amd64/server" > /etc/ld.so.conf.d/libjdk-1.6.0_21.conf # /sbin/ldconfig
3.安装PL/Java 支持,到官网下载 :https://network.pivotal.io/products/pivotal-gpdb/#/releases/5226 ,Language Extensions下 找到自己对应系统的文件下载即可
4.下载完成之后,执行如下命令进行安装
gppkg -i pljava-ossv1.4.0_pv1.3_gpdb4.3orca-rhel5-x86_64.gppkg
等待安装完成,完成后重新启动数据库:
$ gpstop -r
5.导入PL/java 脚本
$ psql -d mydb -f $GPHOME/share/postgresql/pljava/install.sql
CREATE FUNCTION
CREATE FUNCTION
CREATE LANGUAGE
CREATE LANGUAGE
6.编写java程序
package gpdb.jar.ultrapower.com.cn;
public class HelloWorld {
public static String sayHello(String name){
return name + ",Hello!";
}
public static String sayHello_1(){
return "Hello,Hello!";
}
}
7.将程序打成jar包,并上传至服务器.本次测试使用 SayHello.jar 名
8.将SayHello.jar复至到各集群中节点上,包含主节点。
$ gpscp -f gphosts_file SayHello.jar =:$GPHOME/lib/postgresql/java/
9.配置环境变量,多个jar请用:号分割,这个需要使用 gpstop -u 让其生效.
$ gpconfig -c pljava_classpath -v \'examples.jar:SayHello.jar\' --masteronly
让配置生效,,这步很重要啊,要不死都不知道怎么死的.
gpstop -u
10.配置环境变量,使其生效.这个和 9 有啥区别我还不知道.在当前session下生效.
SELECT set_config('pljava_classpath', 'HelloWorld.jar', false);
11.编写greenplum函数 注意一下包名及方法名
create function say_hello(name text)
RETURNS TEXT
as 'gpdb.jar.ultrapower.com.cn.HelloWorld.sayHello'
LANGUAGE java;
12.使用如下命令进行测试:
mydb=# select say_hello('suncf');
say_hello
--------------
suncf,Hello!
(1 row)
13.完成
附::类型对照关系
Table 1. PL/Java data type mapping
PostgreSQL | Java |
---|---|
bool | boolean |
char | byte |
int2 | short |
int4 | int |
int8 | long |
varchar | java.lang.String |
text | java.lang.String |
bytea | byte[ ] |
date | java.sql.Date |
time | java.sql.Time (stored value treated as local time) |
timetz | java.sql.Time |
timestamp | java.sql.Timestamp (stored value treated as local time) |
timestampz | java.sql.Timestamp |
complex | java.sql.ResultSet |
setof complex | java.sql.ResultSet |