执行外部程序

仅限企业模式

使用 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' );

过程在启动节点上执行。Vertica 通过将程序分叉并运行程序来运行该过程。每个过程参数作为字符串传递到可执行文件。父分叉进程会等待直至子进程结束。

如果子进程以状态 0 退出,Vertica 会通过返回一行来报告操作发生,如 helloplanet 示例中所示。如果子进程以任何其他状态退出,Vertica 将报告如下错误:

ERROR 7112: Procedure reported: Procedure execution error: exit status = code

要停止执行,请通过从客户端发送取消命令(例如,按 Ctrl+C)来取消该进程。如果过程程序退出并显示错误,将返回带有退出状态的错误消息。

权限

要执行外部过程,用户需要以下权限:

  • 对于过程的 EXECUTE 权限

  • 对于包含该过程的架构的 USAGE 权限