CREATE PROCEDURE(外部)
仅限企业模式
将外部过程添加到 Vertica。有关详细信息,请参阅外部过程。
语法
CREATE PROCEDURE [ IF NOT EXISTS ]
[[database.]schema.]procedure( [ argument-list ] )
AS executable
LANGUAGE 'EXTERNAL'
USER OS-user
参数
IF NOT EXISTS
如果存在同名对象,请不要创建它并继续。如果忽略此选项且对象存在,Vertica 将生成 ROLLBACK 错误消息。在上述两种情况下,如果对象已经存在,则不会创建它。
IF NOT EXISTS
子句适用于以下 SQL 脚本:可在某个对象不存在时创建该对象。请参阅 ON_ERROR_STOP 了解相关信息。
此选项无法与
OR REPLACE
结合使用。-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
过程
- 为外部过程指定名称,其中 procedure-name符合标识符中描述的约定。
- argument-list
- 过程实参的逗号分隔列表,其中每个实参指定如下:
[ argname ] argtype
-
argname 可选为此实参提供描述性名称。
-
argtype 必须为 Vertica 支持的以下数据类型之一:
-
BIGINT
-
BOOLEAN
-
DECIMAL
-
DOUBLE PRECISION
-
FLOAT
-
FLOAT8
-
INT
-
INT8
-
INTEGER
-
MONEY
-
NUMBER
-
NUMERIC
-
REAL
-
SMALLINT
-
TINYINT
-
VARCHAR
-
-
- executable
- 过程目录中可执行程序的名称,字符串。
- OS-user
- 文件的所有者,字符串。所有者:
-
不能是 root
-
必须对 executable 具有执行权限
-
特权
超级用户
系统安全
-
过程文件必须由数据库管理员(OS 帐户)或同一组中作为管理员的用户拥有。过程文件还必须启用集 UID 属性,并允许该组的读取和执行权限。
-
您使用 CREATE PROCEDURE(外部) 创建的外部过程始终以 Linux dbadmin 权限运行。如果 dbadmin 或伪超级用户授予非 dbadmin 权限以使用 GRANT(过程) 运行过程,请注意非 dbadmin 用户以完全 Linux dbadmin 权限运行该过程。
示例
以下示例展示了如何为过程文件 helloplanet.sh
创建一个名为 helloplanet
的过程。此文件接受一个 VARCHAR 实参。
创建文件:
#!/bin/bash
echo "hello planet argument: $1" >> /tmp/myprocedure.log
使用以下 SQL 创建过程:
=> CREATE PROCEDURE helloplanet(arg1 varchar) AS 'helloplanet.sh' LANGUAGE 'external' USER 'dbadmin';