返回首页

gbase数据、南大通用产品文档:GBase8c

更新日期:2024年09月11日

PLPython Fenced 模式
在fenced 模式中添加plpython 非安全语言。在数据库编译时需要将python 集成进数据
库中,
在configure 阶段加入--with-python 选项。
同时也可指定安装plpython 的python 路径,
添加选项--with-includes='/python-dir=path'。
在启动数据库之前配置GUC 参数unix_socket_directory ,指定unix_socket 进程间通讯
的文件地址。用户需要提前在user-set-dir-path 下创建文件夹,并将文件夹权限修改为可读
可写可执行状态。
unix_socket_directory = '/user-set-dir-path'
配置完成,启动数据库。
将plpython 加入数据库编译,并设置好GUC 参数unix_socket_directory 后,在启动数
据库的过程中,
自动创建fenced-Master 进程。
在数据库不进行python 编译的情况下,fenced
模式需要手动拉起master 进程,在GUC 参数设置完成后,输入创建master 进程命令。
启动fenced-Master 进程,命令为:
gaussdb --fenced -k /user-set-dir-path -D /user-set-dir-path &
完成fence 模式配置,针对plpython-fenced UDF 数据库将在fenced-worker 进程中执行
UDF 计算。
使用指导

创建extension

当编译的plpython 为python2 时:
gsql=# create extension plpythonu;
CREATE EXTENSION

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
411

当编译的plpython 为python3 时:
gsql=# create extension plpython3u;
CREATE EXTENSION
下面示例是以python2 为例。

创建plpython-fenced UDF

查看UDF 信息
gsql=# select * from pg_proc where proname='pymax';
gsql=# create or replace function pymax(a int, b int)
gsql-# returns INT
gsql-# language plpythonu fenced
gsql-# as $$
gsql$# import numpy
gsql$# if a > b:
gsql$#
return a;
gsql$# else:
gsql$#
return b;
gsql$# $$;
CREATE FUNCTION

运行UDF

创建一个数据表:
gsql=# create table temp (a int ,b int) ;
CREATE TABLE
gsql=# insert into temp values (1,2),(2,3),(3,4),(4,5),(5,6);
INSERT 0 5

运行UDF:
gsql=# select pymax(a,b) from temp;
pymax
-------
2
3
4
5
6
(5 rows)

GBase 8c V5 开发者手册
南大通用数据技术股份有限公司
412

不以 ifx_lo 函数来访问智能大对象,您可通过使用标准 ODBC API 来访问智能大对象。
当以标准 ODBC API 来访问智能大对象时,支持的操作包括 CLOB 和 BLOB 数据类型
的选择、插入、更新和删除。不可以这种方式来访问 BYTE 和 TEXT 简单大对象。
使用 SQL_INFX_ATTR_LO_AUTOMATIC 来设置访问方法
可使用 SQL_INFX_ATTR_LO_AUTOMATIC 属性来告诉数据库服务器,是通过使用
ODBC API 还是通过使用 ifx_lo 函数,来访问智能大对象。
如果应用程序启用 SQL_INFX_ATTR_LO_AUTOMATIC 作为连接属性,则该连接的所有
语句都继承该属性值。要更改每个语句的此属性值,您必须设置并重置它作为语句属性。
如果为该语句启用此属性,
则应用程序可通过使用如前所述的标准 ODBC 的方式来访问智
能大对象。如果未为该语句启用此属性,则应用程序通过使用 ifx_lo 函数来访问智能大对
象。如果为该语句启用此属性,则应用程序不可使用 ifx_lo 函数。
对于 GBase 8s Driver DSN,
还可通过开启 ODBC Administration 的 Advanced 标签之下的
报告标准 ODBC 类型选项,来启用 SQL_INFX_ATTR_LO_AUTOMATIC 属性。
CLOB 数据类型列的 SQLDescribeCol 返回 DataPtrType 的 SQL_LONGVARCHAR。
如果
为该语句启用 SQL_INFX_ATTR_LO_AUTOMATIC 属性,则 BLOB 类型列的
SQLDescribeCol 返回 SQL_LONGVARBINARY。
CLOB 类型列的 SQLColAttributes 为 SQL_DESC_TYPE 的 Field Identifier 返回
SQL_LONGVARCHAR,而对于 BLOB 数据类型列,仅当为该语句启用
SQL_INFX_ATTR_LO_AUTOMATIC 属性时,它才返回 SQL_LONGVARBINARY。

通过使用 ODBC API,来插入、更新和删除智能大对象
当您插入、更新和删除 CLOB 或 BLOB 数据类型时,应用程序通过使用
SQLBindParameter 来将该数据类型与一 C 类型绑定。

GBase 8s ODBC Driver 程序员指南
南大通用数据技术股份有限公司
- 106 -
当您插入、
更新和删除 CLOB 数据类型时,
应用程序通过使用 SQLBindParameter (C 类
型为 SQL_C_CHAR,SQL 类型为 SQL_LONGVARCHAR)来将绑定 CLOB 数据类型。

当您插入、
更新和删除 BLOB 数据类型时,
应用程序通过使用 SQLBindParameter (C 类
型为 SQL_C_BINARY,SQL 类型为 SQL_LONGVARBINARY)来绑定 BLOB 数据类
型。
GBase 8s ODBC Driver 以下列方式来执行智能大对象的插入:

驱动程序发送请求至数据库服务器,来以新文件的形式在服务器端创建智能大对象。


驱动程序从数据库服务器取回此文件的文件描述符(例如,lofd)。

驱动程序将上述 lofd 文件和由应用程序以 SQLBindParameter 绑定了的智能大对
象数据发送至数据库服务器。

数据库服务器将数据写入文件。

使用 ODBC API 来选择智能大对象
当选择 CLOB 数据类型时,应用程序绑定该列的 C 类型作为 SQL_C_CHAR。当选择
BLOB 数据类型时,绑定该 C 类型作为 SQL_C_BINARY。
GBase 8s ODBC Driver 以下列方式来选择智能大对象:

驱动程序发送请求至数据库服务器,来打开智能大对象作为服务器端的文件。

驱动程序从数据库服务器取回此文件的文件描述符(例如,lofd)。

驱动程序将上述 lofd 和读请求发送至数据库服务器,
来从该文件读取智能大对象。


数据库服务器通过使用上述 lofd 来从对应的文件读取数据,并将它发送至驱动程
序。

驱动程序将该数据写入到应用程序使用 SQLBindParameter 绑定的缓冲区。

SQL 对象检查
.........................................
174