执行外部程序
仅限企业模式
使用 CREATE PROCEDURE(外部) 语句定义过程后,可以将其用作 SELECT 语句中的元命令。Vertica 不支持在更复杂的语句或表达式中使用过程。
以下示例将运行名为 helloplanet
的过程:
=> SELECT helloplanet('earthlings');
helloplanet
-------------
0
(1 row)
以下示例将运行名为 proctest
的过程。此过程引用 copy_vertica_database.sh
脚本,而该脚本可将数据库从一个群集复制到另一个群集。该脚本由服务器 RPM 安装在
/opt/vertica/scripts
目录中。
=> SELECT proctest(
'-s qa01',
'-t rbench1',
'-D /scratch_b/qa/PROC_TEST' );
注意
外部过程无法直接访问数据库数据。请将 ODBC 或 JDBC 用于此目的。过程在启动节点上执行。Vertica 通过将程序分叉并运行程序来运行该过程。每个过程参数作为字符串传递到可执行文件。父分叉进程会等待直至子进程结束。
如果子进程以状态 0 退出,Vertica 会通过返回一行来报告操作发生,如 helloplanet
示例中所示。如果子进程以任何其他状态退出,Vertica 将报告如下错误:
ERROR 7112: Procedure reported: Procedure execution error: exit status = code
要停止执行,请通过从客户端发送取消命令(例如,按 Ctrl+C)来取消该进程。如果过程程序退出并显示错误,将返回带有退出状态的错误消息。
权限
要执行外部过程,用户需要以下权限:
-
对于过程的 EXECUTE 权限
-
对于包含该过程的架构的 USAGE 权限