DROP 语句可用于删除数据库对象,例如架构、表和用户。
DROP 语句
- 1: DROP ACCESS POLICY
- 2: DROP AGGREGATE FUNCTION
- 3: DROP ANALYTIC FUNCTION
- 4: DROP AUTHENTICATION
- 5: DROP CA BUNDLE
- 6: DROP CERTIFICATE
- 7: DROP DIRECTED QUERY
- 8: DROP FAULT GROUP
- 9: DROP FILTER
- 10: DROP FUNCTION
- 11: DROP KEY
- 12: DROP LIBRARY
- 13: DROP LOAD BALANCE GROUP
- 14: DROP MODEL
- 15: DROP NETWORK ADDRESS
- 16: DROP NETWORK INTERFACE
- 17: DROP NOTIFIER
- 18: DROP PARSER
- 19: DROP PROCEDURE(外部)
- 20: DROP PROCEDURE(存储)
- 21: DROP PROFILE
- 22: DROP PROJECTION
- 23: DROP RESOURCE POOL
- 24: DROP ROLE
- 25: DROP ROUTING RULE
- 26: DROP SCHEMA
- 27: DROP SEQUENCE
- 28: DROP SOURCE
- 29: DROP SUBNET
- 30: DROP TABLE
- 31: DROP TEXT INDEX
- 32: DROP TLS CONFIGURATION
- 33: DROP TRANSFORM FUNCTION
- 34: DROP USER
- 35: DROP VIEW
1 - DROP ACCESS POLICY
从列或行中删除访问策略。
语法
DROP ACCESS POLICY ON table FOR { COLUMN column | ROWS}
参数
- 表
- 包含要移除的列访问策略的表的名称
- 列
- 包含要移除的访问策略的列的名称
特权
非超级用户:表的所有权
示例
以下这些示例展示了能够删除访问策略的各种情况。
删除列访问策略:
=> DROP ACCESS POLICY ON customer FOR COLUMN Customer_Number;
删除表的行访问策略:
=> DROP ACCESS POLICY ON customer_info FOR ROWS;
2 - DROP AGGREGATE FUNCTION
从 Vertica 编录中删除用户定义的聚合函数 (UDAnF)。
语法
DROP AGGREGATE FUNCTION [ IF EXISTS ] [[database.]schema.]function( [ arglist ] )
参数
IF EXISTS
- 指定当要删除的函数不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。- function
- 指定要删除的 SQL 函数的名称。如果函数名称是架构限定的名称,会将函数从指定的架构中删除(如上所述)。
- arglist
- 传递给函数的实参名称和数据类型的逗号分隔列表,格式如下:
{ [argname] argtype }[,...]
-
argname 选择性地指定实参名称,通常是列名称。
-
argtype 指定实参的数据类型,其中 argtype 与 Vertica 数据库类型匹配。
-
特权
非超级用户:所有者
要求
-
要删除某个函数,必须指定实参类型,因为多个函数可能共用相同的名称但是具有不同的参数。
-
Vertica 不会检查依赖项,因此,如果删除其他对象(例如视图或其他 SQL 函数)所引用的 SQL 函数,Vertica 会在使用这些对象时(而非删除该函数时)返回错误。
示例
以下命令将删除 ag_avg
函数:
=> DROP AGGREGATE FUNCTION ag_avg(numeric);
DROP AGGREGATE FUNCTION
另请参阅
聚合函数 (UDAF)3 - DROP ANALYTIC FUNCTION
从 Vertica 编录中删除用户定义的分析函数。
语法
DROP ANALYTIC FUNCTION [ IF EXISTS ] [[database.]schema.]function( [ arglist ] )
参数
IF EXISTS
- 指定当要删除的函数不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。- function
- 指定要删除的 SQL 函数的名称。如果函数名称是架构限定的名称,会将函数从指定的架构中删除(如上所述)。
- arglist
- 传递给函数的实参名称和数据类型的逗号分隔列表,格式如下:
{ [argname] argtype }[,...]
-
argname 选择性地指定实参名称,通常是列名称。
-
argtype 指定实参的数据类型,其中 argtype 与 Vertica 数据库类型匹配。
-
特权
非超级用户:所有者
要求
-
要删除某个函数,必须指定实参类型,因为多个函数可能共用相同的名称但是具有不同的参数。
-
Vertica 不会检查依赖项,因此,如果删除其他对象(例如视图或其他 SQL 函数)所引用的 SQL 函数,Vertica 会在使用这些对象时(而非删除该函数时)返回错误。
示例
以下命令将删除 analytic_avg
函数:
=> DROP ANALYTIC FUNCTION analytic_avg(numeric);
DROP ANALYTIC FUNCTION
另请参阅
分析函数 (UDAnF)4 - DROP AUTHENTICATION
删除身份验证方法。
语法
DROP AUTHENTICATION [ IF EXISTS ] auth‑method‑name [ CASCADE ]
参数
IF EXISTS
- 指定当要删除的身份验证方法不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
- auth‑method‑name
- 要删除的身份验证方法的名称。
CASCADE
- 如果要删除的身份验证方法已授予用户,则此项为必填。在这种情况下,忽略此选项会导致删除操作失败。
特权
超级用户
示例
删除身份验证方法 md5_auth
:
=> DROP AUTHENTICATION md5_auth;
使用 CASCADE
删除已授予用户的身份验证方法:
=> CREATE AUTHENTICATION localpwd METHOD 'password' LOCAL;
=> GRANT AUTHENTICATION localpwd TO jsmith;
=> DROP AUTHENTICATION localpwd CASCADE;
另请参阅
5 - DROP CA BUNDLE
删除证书颁发机构 (CA) 捆绑包。
语法
DROP CA BUNDLE [ IF EXISTS ] name [,...] [ CASCADE ]
参数
IF EXISTS
- 当要删除的 CA 捆绑包不存在时,Vertica 不会报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
name
- CA 捆绑包的名称。
CASCADE
- 在删除 CA 捆绑包之前删除依赖对象。
特权
CA 捆绑包的所有权
示例
请参阅管理 CA 捆绑包。
另请参阅
6 - DROP CERTIFICATE
从数据库中删除 TLS 证书。
要查看现有证书,请查询 CERTIFICATES。
语法
DROP CERTIFICATE [ IF EXISTS ] certificate-name [,...] [ CASCADE ]
参数
IF EXISTS
- 当要删除的证书不存在时,Vertica 不会报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
- certificate-name
- 要删除的证书的名称。
CASCADE
- 在删除证书之前删除依赖对象(例如,TLS 配置)。
特权
非超级用户,为以下之一:
示例
删除 server_cert
,如果存在:
=> DROP CERTIFICATE server_cert;
DROP CERTIFICATE;
删除 CA 证书及其依赖项(通常是它已签名的证书):
=> DROP CERTIFICATE ca_cert CASCADE;
DROP CERTIFICATE;
另请参阅
7 - DROP DIRECTED QUERY
从数据库中删除定向查询。如果定向查询处于活动状态,Vertica 会在移除前将其停用。
语法
DROP DIRECTED QUERY directed-query-id
参数
-
directed‑query‑id
- 标识将从数据库中删除的定向查询。若要获取定向查询的标识符,请使用 GET DIRECTED QUERY 或查询系统表 DIRECTED_QUERIES。
特权
超级用户8 - DROP FAULT GROUP
移除指定容错组及其子容错组,并会将所有节点放置在已删除容错组的父组下。
要删除所有容错组,请使用 ALTER DATABASE..DROP ALL FAULT GROUP。
要将孤立的节点添加回容错组,必须使用 CREATE FAULT GROUP 和 ALTER FAULT GROUP...ADD NODE 手动将其重新分配给新的或现有容错组。
提示
有关在群集中定义的所有容错组的列表,请查询 系统表 FAULT_GROUPS。语法
DROP FAULT GROUP [ IF EXISTS ] fault‑group
参数
IF EXISTS
- 指定当 fault-group 不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
- fault‑group
- 指定要删除的容错组的名称。
特权
超级用户
示例
=> DROP FAULT GROUP group2;
DROP FAULT GROUP
另请参阅
9 - DROP FILTER
从 Vertica 编录中删除用户定义的加载筛选器函数。
语法
DROP FILTER [[database.]schema.]filter()
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
filter()
- 指定要删除的筛选器函数。必须在函数名称上附加空的圆括号。
特权
非超级用户:
-
所有者或 DROP 权限
-
对架构的 USAGE 权限
示例
以下命令将删除 Iconverter
筛选器函数:
=> drop filter Iconverter();
DROP FILTER
另请参阅
10 - DROP FUNCTION
从 Vertica 编录中删除 SQL 函数或用户定义的函数 (UDF)。
语法
DROP FUNCTION [ IF EXISTS ] [[database.]schema.]function[,...] ( [ arg‑list ] )
参数
IF EXISTS
- 指定当要删除的函数不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。- function
- 要删除的 SQL 或用户定义函数 (UDF),其中 UDF 可以是以下类型之一:
-
arg‑list
创建此函数时为其定义的以逗号分隔的实参列表,按如下方式指定:
[arg‑name] arg‑type[,...]
其中 arg-name(可选)限定 arg-type:
-
arg‑name 通常是列名称。
-
arg‑type 是 Vertica 支持的 SQL 数据类型的名称。
-
特权
非超级用户,为以下之一:
-
所有者或 DROP 权限
-
对架构的 USAGE 权限
要求
-
要删除某个函数,必须指定实参类型,因为多个函数可能共用相同的名称但是具有不同的参数。
-
删除 SQL 函数时,Vertica 不会检查依赖项,因此,如果其他对象引用 SQL 函数(例如视图或其他 SQL 函数),Vertica 只会在使用这些对象时返回错误。
示例
以下命令将删除 zerowhennull
函数,该函数在 macros
架构中:
=> DROP FUNCTION macros.zerowhennull(x INT);
DROP FUNCTION
另请参阅
11 - DROP KEY
从数据库中删除加密密钥及其证书(如果有)。
要查看现有的加密密钥,请查询 CRYPTOGRAPHIC_KEYS。
语法
DROP KEY [ IF EXISTS ] key-name [,...] [ CASCADE ]
参数
IF EXISTS
- 当要删除的密钥不存在时,Vertica 不会报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
- key-name
- 要删除的加密密钥的名称。
CASCADE
- 在删除密钥之前删除依赖对象。
特权
非超级用户,为以下之一:
-
密钥的所有权
-
DROP 权限
示例
删除 k_ca
,如果存在:
=> DROP KEY k_ca IF EXISTS;
DROP KEY;
删除 k_client
及其依赖项(与之关联的证书):
=> DROP KEY k_client CASCADE;
DROP KEY;
另请参阅
12 - DROP LIBRARY
从数据库中移除 UDx 库。从 Vertica 节点上的托管目录中删除库文件。库中用户定义的函数 (UDF) 不再可用。有关详细信息,请参阅开发用户定义的扩展 (UDx)。
语法
DROP LIBRARY [ IF EXISTS ] [[database.]schema.]library [ CASCADE]
参数
IF EXISTS
- 仅当库存在时才执行此命令。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
库
- 要删除的库名称,与在 CREATE LIBRARY 中用于加载库的名称相同。
CASCADE
- 同时删除使用该库定义的所有函数。DROP LIBRARY 在以下情况下会失败:CASCADE 被省略,且有一个或多个 UDx 在使用目标库。
特权
可为以下之一:
-
超级用户
-
UDXDEVELOPER 和库所有者(通过 CREATE LIBRARY 创建库的用户)
-
UDXDEVELOPER 和对库的 DROP 权限(请参阅 GRANT(库))
示例
超级用户可以删除任何库:
=> DROP LIBRARY ml.MyLib CASCADE;
具有 UDXDEVELOPER 角色的用户可以删除其创建的库:
=> GRANT UDXDEVELOPER TO alice, bob;
GRANT ROLE
=> \c - alice;
You are now connected as user "alice".
-- Must enable the role before using:
=> SET ROLE UDXDEVELOPER;
SET
-- Create and use ml.mylib...
-- Drop library and dependencies:
DROP LIBRARY ml.mylib CASCADE;
DROP LIBRARY
可以向用户授予删除库的显式权限:
=> \c - alice
You are now connected as user "alice".
=> GRANT DROP ON LIBRARY ml.mylib to bob;
GRANT PRIVILEGE
=> \c - bob
You are now connected as user "bob".
=> SET ROLE UDXDEVELOPER;
SET
=> DROP LIBRARY ml.mylib cascade;
DROP LIBRARY
13 - DROP LOAD BALANCE GROUP
删除负载均衡组。
语法
DROP LOAD BALANCE GROUP [ IF EXISTS ] group_name [ CASCADE ]
参数
-
IF EXISTS
- 指定当要删除的负载均衡组不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
-
group_name
- 要删除的组的名称。
[CASCADE]
- 同时还会删除针对该组的所有负载均衡路由规则。如果未提供此关键字和一个或多个路由规则目标 group_name,此语句将失败并显示错误消息。
特权
超级用户示例
以下语句演示了当负载均衡组具有依赖路由规则以及使用 CASCADE 关键字时会出现的错误:
=> DROP LOAD BALANCE GROUP group_all;
NOTICE 4927: The RoutingRule catch_all depends on LoadBalanceGroup group_all
ROLLBACK 3128: DROP failed due to dependencies
DETAIL: Cannot drop LoadBalanceGroup group_all because other objects depend on it
HINT: Use DROP ... CASCADE to drop the dependent objects too
=> DROP LOAD BALANCE GROUP group_all CASCADE;
DROP LOAD BALANCE GROUP
另请参阅
14 - DROP MODEL
从 Vertica 数据库中移除一个或多个模型。
语法
DROP MODEL [ IF EXISTS ] [[database.]schema.]model[,...]
参数
IF EXISTS
- 指定当要删除的模型不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
- [database.]架构
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。- 模型
- 要删除的模型。
特权
以下几项之一:
-
超级用户
-
非超级用户:模型所有者
示例
请参阅删除模型。
15 - DROP NETWORK ADDRESS
从编录中删除网络地址。网络地址是节点上用于连接负载均衡策略的 IP 地址和端口的名称。
语法
DROP NETWORK ADDRESS [ IF EXISTS ] address‑name [ CASCADE ]
参数
-
IF EXISTS
- 指定当要删除的网络地址不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
-
address‑name
- 要删除的网络地址的名称。
CASCADE
- 从指向该网络地址的任何负载均衡组中移除该网络地址。如果未提供此关键字,且一个或多个负载均衡组包含此地址,则此语句将失败并显示错误消息。
特权
超级用户示例
以下语句演示了当网络地址具有依赖的负载均衡组以及使用 CASCADE 关键字时会出现的错误:
=> DROP NETWORK ADDRESS node01;
NOTICE 4927: The LoadBalanceGroup group_1 depends on NetworkInterface node01
NOTICE 4927: The LoadBalanceGroup group_random depends on NetworkInterface node01
ROLLBACK 3128: DROP failed due to dependencies
DETAIL: Cannot drop NetworkInterface node01 because other objects depend on it
HINT: Use DROP ... CASCADE to drop the dependent objects too
=> DROP NETWORK ADDRESS node01 CASCADE;
DROP NETWORK ADDRESS
16 - DROP NETWORK INTERFACE
从 Vertica 中移除网络接口。使用 CASCADE 选项还可以从节点定义中移除网络接口。(有关详细信息,请参阅识别用于导入/导出的数据库或节点。)
语法
DROP NETWORK INTERFACE [ IF EXISTS ] network‑interface‑name [ CASCADE ]
参数
参数定义如下:
IF EXISTS
- 指定当要删除的网络接口不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
- network‑interface‑name
- 要移除的网络接口。
CASCADE
- 从所有节点定义中移除网络接口。
特权
超级用户
示例
=> DROP NETWORK INTERFACE myNetwork;
17 - DROP NOTIFIER
删除通过
CREATE NOTIFIER
创建的基于推送的通知程序。
语法
DROP NOTIFIER [ IF EXISTS ] notifier‑name
参数
IF EXISTS
- 指定当要删除的通知程序不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
- notifier‑name
- 通知程序的唯一标识符。
18 - DROP PARSER
从 Vertica 编录中删除用户定义的加载解析器函数。
语法
DROP PARSER[[database.]schema.]parser()
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
parser()
- 要删除的解析器函数的名称。必须在函数名称上附加空的圆括号。
特权
非超级用户:
-
所有者或 DROP 权限
-
对架构的 USAGE 权限
示例
=> DROP PARSER BasicIntegerParser();
DROP PARSER
另请参阅
19 - DROP PROCEDURE(外部)
仅限企业模式
从 Vertica 中移除外部过程。只会移除对 Vertica 内部过程的引用。外部文件仍保留在每个数据库节点的
database/procedures
目录中。
语法
DROP PROCEDURE [ IF EXISTS ] [[database.]schema.]procedure( [ parameter‑list ] )
参数
IF EXISTS
- 指定当要删除的过程不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。- 过程
- 指定要删除的过程。
- parameter‑list
- 为此过程定义的形式参数的逗号分隔列表,指定如下:
[parameter‑name] parameter‑type[,...]
其中 parameter-name 选择性地限定 parameter-type。
特权
非超级用户:
-
所有者或 DROP 权限
-
对架构的 USAGE 权限
示例
=> DROP PROCEDURE helloplanet(arg1 varchar);
另请参阅
CREATE PROCEDURE(外部)20 - DROP PROCEDURE(存储)
删除存储过程。
语法
DROP PROCEDURE [ IF EXISTS ] [[database.]schema.]procedure( [ parameter-type-list] );
参数
IF EXISTS
- 指定当要删除的过程不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
过程
- 存储过程的名称,其中 procedure 符合标识符中描述的约定。
- parameter-type-list
- IN 参数类型的逗号分隔列表。
特权
非超级用户:
-
所有者或 DROP 权限
-
对架构的 USAGE 权限
示例
对于下列过程:
=> CREATE PROCEDURE raiseXY(IN x INT, y VARCHAR) LANGUAGE PLvSQL AS $$
BEGIN
RAISE NOTICE 'x = %', x;
RAISE NOTICE 'y = %', y;
-- some processing statements
END;
$$;
CALL raiseXY(3, 'some string');
NOTICE 2005: x = 3
NOTICE 2005: y = some string
您可以使用以下命令进行删除:
=> DROP PROCEDURE raiseXY(INT, VARCHAR);
DROP PROCEDURE
有关 RAISE NOTICE 的详细信息,请参阅错误和诊断。
另请参阅
21 - DROP PROFILE
从数据库中移除用户定义的配置文件(通过
CREATE PROFILE
创建)。不能删除 DEFAULT
配置文件。
语法
DROP PROFILE [ IF EXISTS ] profile‑name[,...] [ CASCADE ]
参数
IF EXISTS
- 指定当要删除的配置文件不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
- profile‑name
- 要删除的配置文件。
CASCADE
- 将分配给已删除的配置文件的所有用户转移给 DEFAULT 配置文件。如果忽略此选项,且目标配置文件分配有用户,Vertica 将返回错误。
特权
超级用户
示例
=> DROP PROFILE sample_profile;
22 - DROP PROJECTION
屏蔽要从编录中删除的 投影,以便该投影不可供用户查询。
语法
DROP PROJECTION [ IF EXISTS ] { [[database.]schema.]projection[,...] } [ RESTRICT | CASCADE ]
参数
IF EXISTS
- 指定当要删除的投影不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
projection
- 指定要删除的投影:
-
如果投影未分段,则将删除数据库群集中的所有投影副本。
-
如果投影已分段,则将通过指定投影基本名的方式删除所有伙伴实例投影。您也可以指定具体的伙伴投影名称,但前提是如此删除该伙伴实例投影不会违反系统 K-safety。
有关投影名称约定,请参阅投影命名。
-
RESTRICT | CASCADE
- 指定在投影包含对象的情况下是否将其删除:
-
RESTRICT
(默认值):仅在投影不包含任何对象的情况下将其删除。 -
CASCADE
:即便投影包含对象,仍将其删除。
-
特权
非超级用户:锚表的所有者
限制
投影删除操作有以下限制:
另请参阅
23 - DROP RESOURCE POOL
删除用户创建的资源池。分配给此池的所有内存都将返回到 GENERAL 池。
语法
DROP RESOURCE POOL pool-name [ FOR subcluster-spec ]
参数
- pool-name
- 指定要删除的资源池。
-
FOR subcluster‑spec
- 仅适用于 Eon 模式,从指定的子群集中删除此资源池,其中 subcluster-spec 为以下几项之一:
-
SUBCLUSTER subcluster-name
:从已命名子群集中删除 pool‑name。您不能连接到此子群集,否则 Vertica 会返回错误。 CURRENT SUBCLUSTER
:从连接到的子群集中删除 pool‑name。
如果省略此参数,将从所有子群集中删除资源池。如果为单个子群集创建了资源池,则必须指定此参数以将资源池从该子群集中显式删除;否则,Vertica 将返回错误。
-
特权
超级用户
如果您尝试删除的资源池是另一个资源池的辅助池,则 Vertica 会返回一个错误。该错误会列出与您尝试删除的辅助池有关的资源池。要删除辅助资源池,首先在主要资源池上将 CASCADE TO 参数设置为 DEFAULT
,然后再删除辅助池。
例如,可以删除资源池 rp2
,它是 rp1
的辅助池,如下:
=> ALTER RESOURCE POOL rp1 CASCADE TO DEFAULT;
=> DROP RESOURCE POOL rp2;
传输资源请求
按照该池对比于 GENERAL 池的优先级,队列中对该池的请求将全部传输给 GENERAL 池。如果该池的优先级高于 GENERAL 池,则这些请求将放置在队列列首;否则,这些请求将放置在队列列尾。
正在使用该池的用户将收到通知,通知其改为使用 GENERAL 池:
NOTICE: Switched the following users to the General pool: username
如果用户不具备使用 GENERAL 池的权限,DROP RESOURCE POOL 会返回错误。现有会话将传输给 GENERAL 池,而无论会话的用户是否具备使用 GENERAL 池的权限。如果正在删除的池的限制级别较 GENERAL 池高,这一会话传输过程会导致需要更多用户权限。为避免赋予用户更多特权,请按照以下步骤删除受限池:
-
针对所有用户调用池权限。
-
关闭对池有权限的所有会话。
-
删除资源池。
示例
此示例将删除用户定义的资源池:
=> DROP RESOURCE POOL ceo_pool;
此 Eon 模式示例返回了当前子群集,然后删除了当前子群集的用户定义资源池:
=> SELECT CURRENT_SUBCLUSTER_NAME();
CURRENT_SUBCLUSTER_NAME
-------------------------
analytics_1
(1 row)
=> DROP RESOURCE POOL dashboard FOR CURRENT SUBCLUSTER;
DROP RESOURCE POOL
另请参阅
24 - DROP ROLE
从数据库中删除角色。
注意
不能对已添加到具有 LDAPLink 服务的 Vertica 数据库的角色使用 DROP ROLE。语法
DROP ROLE [ IF EXISTS ] role‑name[,...] [ CASCADE ]
参数
IF EXISTS
- 指定当要删除的角色不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
- role‑name
- 要删除的角色名称
CASCADE
- 删除角色前先自用户或其他角色调用该角色
特权
超级用户
示例
=> DROP ROLE appadmin;
NOTICE: User bob depends on Role appadmin
ROLLBACK: DROP ROLE failed due to dependencies
DETAIL: Cannot drop Role appadmin because other objects depend on it
HINT: Use DROP ROLE ... CASCADE to remove granted roles from the dependent users/roles
=> DROP ROLE appadmin CASCADE;
DROP ROLE
另请参阅
25 - DROP ROUTING RULE
从编录中删除路由规则。
语法
DROP ROUTING RULE [ IF EXISTS ] rule‑name
参数
-
IF EXISTS
- 指定当要删除的路由规则不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
-
rule‑name
- 要删除的规则的名称。
特权
超级用户示例
=> DROP ROUTING RULE internal_clients;
DROP ROUTING RULE
26 - DROP SCHEMA
从数据库中永久删除架构。由于 DROP SCHEMA 是一个不可逆的过程,因此在删除架构前,请务必先确认您确实想要删除该架构。使用 CASCADE 参数可删除包含一个或多个对象的架构。
语法
DROP SCHEMA [ IF EXISTS ] [database.]schema[,...] [ CASCADE | RESTRICT ]
参数
IF EXISTS
- 指定当要删除的架构不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
- [database.]架构
- 要删除的数据库的名称。如果指定一个数据库,它必须是当前数据库。
CASCADE
- 指定删除架构及其中的所有对象,而不考虑这些对象的所有者。
当心
依赖于已删除架构中对象的其他架构中的对象——例如,用户定义的函数——也将以静默形式删除。 RESTRICT
- 仅当架构为空时将其删除(默认)。
特权
非超级用户:架构所有者
限制
-
不能删除 PUBLIC 架构。
-
如果有用户正在访问正在删除的架构中的对象,则在该事务完成前,不会删除该架构。
-
取消 DROP SCHEMA 语句可能导致无法预见的结果。
示例
以下示例将删除架构 S1,但前提是该架构不包含任何对象:
=> DROP SCHEMA S1;
以下示例将删除架构 S1,而无论其包含架构与否:
=> DROP SCHEMA S1 CASCADE;
27 - DROP SEQUENCE
移除指定的命名序列号生成器。
语法
DROP SEQUENCE [ IF EXISTS ] [[database.]schema.]sequence[,...]
参数
IF EXISTS
- 指定当要删除的序列不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。- 序列
- 要删除的序列的名称。
特权
非超级用户:序列或架构所有者
限制
-
对于在表的默认表达式中指定的序列,在您下次尝试加载数据时,默认表达式会执行失败。Vertica 不会检查这些实例。
-
DROP SEQUENCE
不支持CASCADE
关键字。如果序列用在列的默认表达式中,那么在从默认表达式中删除对序列的所有引用之前,不能删除该序列。
示例
以下命令将删除名为 sequential
的序列。
=> DROP SEQUENCE sequential;
另请参阅
28 - DROP SOURCE
从 Vertica 编录中删除用户定义的加载源函数。
语法
DROP SOURCE [[database.]schema.]source()
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
source()
- 指定要删除的源函数。必须在函数名称上附加空的圆括号。
特权
非超级用户:
-
所有者或 DROP 权限
-
对架构的 USAGE 权限
示例
以下命令将删除 curl
源函数:
=> DROP SOURCE curl();
DROP SOURCE
另请参阅
29 - DROP SUBNET
从 Vertica 中移除子网。
当心
在移除子网之前,请确保您的数据库未配置为允许在公共子网上导出。语法
DROP SUBNET [ IF EXISTS ] subnet‑name[,...] [ CASCADE ]
参数
参数定义如下:
IF EXISTS
- 指定当要删除的子网不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
- subnet‑name
- 要移除的子网。
CASCADE
- 从所有数据库定义中移除指定的子网。
特权
超级用户
示例
=> DROP SUBNET mySubnet;
另请参阅
识别用于导入/导出的数据库或节点30 - DROP TABLE
移除一个或多个表及其
投影。当您运行 DROP TABLE
时,更改会自动提交。
语法
DROP TABLE [ IF EXISTS ] [ [database.]schema.]table[,...] [ CASCADE ]
参数
IF EXISTS
- 指定当要删除的一个或多个表不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
表
- 要删除的表。
CASCADE
- 指定删除目标表的所有投影。
CASCADE
可选,如果目标表只有自动投影。如果忽略此选项且任何表具有非超投影集,Vertica 将返回错误并回退整个删除操作。此选项对外部表无效。
特权
非超级用户:
要求
-
请勿取消正在执行的
DROP TABLE
。这样会导致数据库不一致。 -
请检查确定目标表不在使用中,无论是直接使用还是间接使用——例如,在视图中。
-
如果删除然后恢复被某视图引用的表,新表必须具有相同的名称和列定义。
示例
请参阅 删除表
另请参阅
31 - DROP TEXT INDEX
删除用于执行文本搜索的文本索引。
注意
当删除具有与其关联的文本索引的源表时,文本索引也会被删除。语法
DROP TEXT INDEX [ IF EXISTS ] [[database.]schema.]idx‑table
参数
IF EXISTS
- 指定当要删除的文本索引不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
idx‑table
- 指定文本索引名称。当使用多个架构时,指定在
DROP TEXT INDEX
语句中包含该索引的架构。
特权
-
dbadmin
-
表所有者
-
对于源表的 DROP 权限
示例
=> DROP TEXT INDEX t_text_index;
DROP INDEX
另请参阅
32 - DROP TLS CONFIGURATION
删除现有的 TLS CONFIGURATION。
如果将 TLS 配置设置为配置参数,则无法删除。有关详细信息,请参阅TLS 配置。
语法
DROP TLS CONFIGURATION tls_config_name
参数
-
tls_config_name
- 要删除的 TLS CONFIGURATION 对象的名称。
特权
非超级用户,为以下之一:
-
TLS 配置的所有权
-
DROP 权限
33 - DROP TRANSFORM FUNCTION
从 Vertica 编录中删除用户定义的转换函数 (UDTF)。
语法
DROP TRANSFORM FUNCTION [ IF EXISTS ] [[database.]schema.]function( [ arg‑list ] )
参数
IF EXISTS
- 指定当要删除的函数不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。- function
- 指定要删除的转换函数。
-
arg‑list
创建此函数时为其定义的以逗号分隔的实参列表,按如下方式指定:
[arg‑name] arg‑type[,...]
其中 arg-name(可选)限定 arg-type:
-
arg‑name 通常是列名称。
-
arg‑type 是 Vertica 支持的 SQL 数据类型的名称。
注意
删除多态函数时可以省略 arg‑list。-
特权
以下几项之一:
- 超级用户
-
架构或函数所有者
示例
以下命令将删除 tokenize
UDTF,该 UDTF 在 macros
架构中:
=> DROP TRANSFORM FUNCTION macros.tokenize(varchar);
DROP TRANSFORM FUNCTION
以下命令将删除 Pagerank
多态函数,该函数在 online
架构中:
=> DROP TRANSFORM FUNCTION online.Pagerank();
DROP TRANSFORM FUNCTION
另请参阅
CREATE TRANSFORM FUNCTION34 - DROP USER
从授权数据库用户列表中删除一个名称。
注意
DROP USER 无法移除使用 LDAPLink 服务添加到 Vertica 数据库的用户。语法
DROP USER [ IF EXISTS ] user‑name[,...] [ CASCADE ]
参数
IF EXISTS
- 当要删除的用户不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
- user‑name
- 要删除的用户的名称。
CASCADE
- 删除通过 user‑name 创建的所有用户定义的对象,包括架构、表和引用该表的所有视图,以及该表的投影。
当心
发出 DROP USER CASCADE 命令后,已删除用户所拥有的表将无法恢复。
特权
超级用户
示例
当用户定义的对象不存在时,DROP USER 将成功:
=> CREATE USER user2;
CREATE USER
=> DROP USER IF EXISTS user2;
DROP USER
当用户创建的对象仍然存在时,DROP USER 将失败:
=> DROP USER IF EXISTS user1;
NOTICE: Table T_tbd1 depends on User user1
ROLLBACK: DROP failed due to dependencies
DETAIL: Cannot drop User user1 because other objects depend on it
HINT: Use DROP ... CASCADE to drop the dependent objects too
无论用户定义的对象是否存在,DROP USER CASCADE 均可成功。该语句会强制删除所有用户定义的对象,如架构、表及其关联投影:
=> DROP USER IF EXISTS user1 CASCADE;
DROP USER
另请参阅
35 - DROP VIEW
删除指定视图。Vertica 不会检查删除的视图的依赖项。删除视图后,引用该视图的其他视图将出现故障。
如果删除视图,并将其替换为具有相同名称和列名称的其他视图或表,则引用该名称的其他视图将使用新视图。如果更改新视图中的列数据类型,则服务器会将旧数据类型强制转换为新类型(如果可行);否则将返回错误。
语法
DROP VIEW [ IF EXISTS ] [[database.]schema.]view[,...]
参数
IF EXISTS
- 指定当要删除的视图不存在时不报告错误。 在 SQL 脚本中使用此子句,可避免在尝试创建不存在的对象之前删除它们时出错。
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。- 视图
- 要删除的视图的名称。
特权
为以下几项之一
-
视图所有者和 USAGE 权限
-
架构所有者
示例
=> DROP VIEW myview;