金仓数据库 KingbaseES SQL 语言参考手册 (18. SQL语句: DROP MATERIALIZED VIEW 到 DROP SYNONYM)

18. SQL语句: DROP MATERIALIZED VIEW 到 DROP SYNONYM

本章包含以下SQL语句:

18.1. DROP MATERIALIZED VIEW

用途

DROP MATERIALIZED VIEW删除一个现有的物化视图。

前置条件

要执行这个命令你必须是该物化视图的拥有者。

语法

DROP MATERIALIZED VIEW [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该物化视图不存在则不要抛出一个错误,而是发出一个提示。

name

要移除的物化视图的名称(可以是模式限定的)。

CASCADE

自动删除依赖于该物化视图的对象(例如其他物化视图或常规视图),然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该物化视图,则拒绝删除它。这是默认值。

示例

这个命令将移除名为order_summary的物化视图:

DROP MATERIALIZED VIEW order_summary;

兼容性

DROP MATERIALIZED VIEW是一个 KingbaseES扩展。

18.2. DROP OPERATOR

用途

DROP OPERATOR从数据库系统中删除一个现有的操作符。

前置条件

要执行这个命令,你必须是该操作符的拥有者。

语法

DROP OPERATOR [ IF EXISTS ] name ( { left_type | NONE } , { right_type | NONE } ) [, ...] [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该操作符不存在则不要抛出一个错误,而是发出一个提示。

name

一个现有的操作符的名称(可以是模式限定的)。

left_type

该操作符左操作数的数据类型,如果没有左操作数就写 NONE

right_type

该操作符右操作数的数据类型,如果没有右操作数就写 NONE

CASCADE

自动删除依赖于该操作符的对象(例如使用它的视图),然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该操作符,则拒绝删除它。这是默认值。

示例

为类型integer移除幂操作符:

DROP OPERATOR ^ (integer, integer);

为类型bit移除左一元按位补操作符:

DROP OPERATOR ~ (none, bit);

为类型bigint移除右一元阶乘操作符:

DROP OPERATOR ! (bigint, none);

在一条命令中删除多个操作符:

DROP OPERATOR ~ (none, bit), ! (bigint, none);

兼容性

SQL 标准中没有DROP OPERATOR语句。

18.3. DROP OPERATOR CLASS

用途

DROP OPERATOR CLASS — 删除一个操作符类

DROP OPERATOR CLASS不会删除任何被该类引用的操作符或者函数。如果有索引依赖于该操作符类,你将需要指定CASCADE来完成删除。

前置条件

要执行这个命令,你必须是该操作符类的拥有者。

语法

DROP OPERATOR CLASS [ IF EXISTS ] name USING index_method [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该操作符类不存在则不要抛出一个错误,而是发出一个提示。

name

一个现有的操作符类的名称(可以是模式限定的)。

index_method

该操作符类适用的索引访问方法的名称。

CASCADE

自动删除依赖于该操作符类的对象(例如索引),然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该操作符类,则拒绝删除它。这是默认值。

示例

移除 B-树操作符类widget_ops

DROP OPERATOR CLASS widget_ops USING btree;

如果有任何使用该操作符类的索引存在,这个命令都不会成功。增加CASCADE可以把这类索引与该操作符类一起删除。

兼容性

SQL 标准中没有DROP OPERATOR CLASS语句。

其他

DROP OPERATOR CLASS将不会删除包含该类的操作符族,即使该族中已经没有任何成员(特别是由CREATE OPERATOR CLASS隐式创建的族)。一个空操作符族是无害的,但是为了整洁你可能希望用DROP OPERATOR AMILY移除该操作符族,或者一开始就使用DROP OPERATOR FAMILY会更好。

18.4. DROP OPERATOR FAMILY

用途

DROP OPERATOR FAMILY — 删除一个操作符族

DROP OPERATOR FAMILY包括删除该族所包含的任何操作符类,但是它不会删除该族所引用的任何操作符或函数。如果有任何依赖于该族中操作符类的索引存在,你将需要指定CASCADE来完成删除。

前置条件

要执行这个命令,你必须是该操作符族的拥有者。

语法

DROP OPERATOR FAMILY [ IF EXISTS ] name USING index_method [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该操作符族不存在则不要抛出一个错误,而是发出一个提示。

name

一个现有操作符族的名称(可以是模式限定的)。

index_method

该操作符族适用的索引访问方法的名称。

CASCADE

自动删除依赖于该操作符族的对象,然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该操作符族,则拒绝删除它。这是默认值。

示例

移除 B-树操作符族float_ops

DROP OPERATOR FAMILY float_ops USING btree;

如果有任何使用该族中操作符类的索引存在,这个命令都不会成功。增加 CASCADE可以把这类索引与该操作符族一起删除。

兼容性

SQL 标准中没有DROP OPERATOR FAMILY 语句。

18.5. DROP OWNED

用途

DROP OWNED — 移除一个数据库角色拥有的数据库对象

DROP OWNED删除当前数据库中被指定角色之一拥有的所有对象。任何已被授予给给定角色在当前数据库中对象上以及在共享对象(数据库、表空间)上的特权也将会被收回。

前置条件

语法

DROP OWNED BY { name | CURRENT_USER | SESSION_USER } [, ...] [ CASCADE |
RESTRICT ]

语义

name

其对象将被删除并且其特权将被收回的角色的名称。

CASCADE

自动删除依赖于受影响对象的对象,然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何其他数据库对象依赖于一个受影响的对象,则拒绝删除一个角色所拥有的对象。这是默认值。

示例

DROP OWNED BY user1;

兼容性

DROP OWNED命令是一个 KingbaseES扩展。

其他

DROP OWNED常常被用来为移除一个或者多个角色做准备。因为 DROP OWNED 只影响当前数据库中的对象,通常需要在包含将被移除角色所拥有的对象的每一个数据库中都执行这个命令。

使用CASCADE选项可能导致这个命令递归去删除由其他用户所拥有的对象。

REASSIGN OWNED 命令是另一种选择,它可以把一个或多个角色所拥有的所有数据库对象重新授予给其他角色。不过,REASSIGN OWNED不处理其他对象的特权。角色所拥有的数据库、表空间将不会被移除。

更多讨论请见 删除角色 。

18.6. DROP PACKAGE

用途

删除包。需要注意,在执行该命令删除一个包的时候,会同时删除包规范和包体。无法单独删除一个包规范,若只想删除一个包体,可通过DROP PACKAGE BODY命令,详见 DROP PACKAGE BODY语句 。

用户必须是包的属主或包所在模式的属主或非受限数据库管理员。

前置条件

用户要具有包所在模式下的 USAGE 权限。

语法

DROP PACKAGE [ IF EXISTS ] package_names [ CASCADE | RESTRICT ];

语义

package_names

包的名字,当需要同时删除多个包时,包名之间用 ,隔开。可以有数据库名和模式名修饰,但数据库名只能是当前数据库。

IF EXIST

要删除的包不存在时,不会出现错误信息。

CASCADE

自动删除依赖于该过程的对象,然后接着删除依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该过程,则拒绝删除它。这是默认选项。

示例

DROP PACKAGE pkg;
DROP PACKAGE IF EXISTS test.public.pkg, pkg2;

18.7. DROP PACKAGE BODY

用途

删除包体。需要注意,在执行该命令删除一个包体的时候,不会删除包规范。无法单独删除一个包规范,若想删除包含包规范在内的一整个包,可通过DROP PACKAGE命令,详见 DROP PACKAGE语句 。

前置条件

用户必须是包的属主或包所在模式的属主或非受限数据库管理员。

用户要具有包所在模式下的 USAGE 权限。

语法

DROP PACKAGE BODY [ IF EXISTS ] package_names;

语义

package_names

包的名字,当需要同时删除多个包体时,包名之间用 ,隔开。可以有数据库名和模式名修饰,但数据库名只能是当前数据库。

IF EXIST

要删除的包体不存在时,不会出现错误信息。

示例

DROP PACKAGE BODY pkg;
DROP PACKAGE BODY IF EXISTS test.public.pkg, pkg2;

18.8. DROP POLICY

用途

DROP POLICY — 从一个表移除一条行级安全性策略

DROP POLICY从该表移除指定的策略。注意如果从一个移除了最后一条策略并且该表的行级安全性仍被 ALTER TABLE启用,则默认的否定策略将被使用。不管该表的策略存在与否,ALTER TABLE ... DISABLE ROW LEVEL SECURITY都可以被用来禁用一个表的行级安全性。

前置条件

语法

DROP POLICY [ IF EXISTS ] name ON table_name [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该策略不存在也不抛出一个错误。这种情况下会发出一个提示。

name

要删除的策略的名称。

table_name

该策略所在的表的名称(可以被模式限定)。

CASCADE

这些关键词不会产生效果,因为它们不依赖于策略。

RESTRICT

这些关键词不会产生效果,因为它们不依赖于策略。

示例

要在名为my_table上删除策略p1

DROP POLICY p1 ON my_table;

兼容性

DROP POLICY是一种KingbaseES扩展。

18.9. DROP PROCEDURE

用途

DROP PROCEDURE移除一个现有过程的定义。

前置条件

为了执行这个命令,用户必须是该过程的拥有者。该过程的参数类型必须指定,因为可能存在多个不同的过程具有相同名称和不同参数列表。

语法

DROP PROCEDURE [ IF EXISTS ] name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] [, ...]
    [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该过程不存在也不抛出一个错误。这种情况下会发出一个提示。

name

现有过程的名称(可以是被方案限定的)。如果没有指定参数列表,则该名称在其所属的方案中必须是唯一的。

argmode

参数的模式:IN或者VARIADIC。如果省略,默认为IN

argname

参数的名称。注意,其实DROP PROCEDURE并不在意参数名称,因为只需要参数的数据类型来确定过程的身份。

argtype

该过程如果有参数,参数的数据类型(可以是被方案限定的)。

CASCADE

自动删除依赖于该过程的对象,然后接着删除依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该过程,则拒绝删除它。这是默认选项。

示例

DROP PROCEDURE do_db_maintenance();

兼容性

这个命令符合SQL标准,不过KingbaseES做了这些扩展:

  • 标准仅允许每个命令删除一个过程。

  • IF EXISTS选项

  • 指定参数模式和名称的能力

18.10. DROP PUBLICATION

用途

DROP PUBLICATION — 删除一个发布

DROP PUBLICATION从数据库中删除一个现有的发布。

前置条件

发布只能被它自己的所有者或超级用户删除。

语法

DROP PUBLICATION [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果发布不存在,不要抛出一个错误。在这种情况下发出一个提示。

name

现有发布的名称。

CASCADE

这些关键词没有任何作用,因为发布没有依赖关系。

RESTRICT

这些关键词没有任何作用,因为发布没有依赖关系。

示例

删除一个发布:

DROP PUBLICATION mypublication;

兼容性

DROP PUBLICATION是一个KingbaseES 扩展。

18.11. DROP ROLE

用途

DROP ROLE移除指定的角色。

没有必要移除涉及该角色的角色成员关系。DROP ROLE会自动收回目标角色在其他角色中的成员关系,以及其他角色在目标角色中的成员关系。其他角色不会被删除也不会被影响。

前置条件

如果一个角色仍然被集簇中任何数据库中引用,它就不能被移除。如果尝试移除将会抛出一个错误。在删除该角色前,你必须删除(或者重新授予所有权)它所拥有的所有对象并且收回该已经授予给该角色的在其他对象上的特权。 REASSIGN OWNED 和 DROP OWNED 命令可以用于这个目的。更多讨论请见 删除角色 。要删除一个超级用户角色,你必须自己就是一个超级用户。要删除一个非超级用户角色,你必须具有CREATEROLE特权。

语法

DROP ROLE [ IF EXISTS ] name [, ...]

语义

IF EXISTS

如果该角色不存在则不要抛出一个错误,而是发出一个提示。

name

要移除的角色的名称。

示例

要删除一个角色:

DROP ROLE jonathan;

兼容性

SQL 标准定义了DROP ROLE,但是它只允许一次删除一个角色并且它指定了和KingbaseES不同的特权需求。

其他

KingbaseES包括一个程序 dropuser 具有和这个命令完全相同的功能(事实上它会调用这个命令),但是该程序可以从 shell 运行。

18.12. DROP ROUTINE

用途

DROP ROUTINE — 删除一个例程

DROP ROUTINE删除一个现有例程的定义,它可以是一个聚集函数、一个普通函数或者过程。有关参数的描述、更多的示例以及进一步的细节请参考 DROP AGGREGATE 、 DROP FUNCTION语句 以及 DROP PROCEDURE语句 。

前置条件

语法

DROP ROUTINE [ IF EXISTS ] name [ ( [ [ argmode ] [ argname ] argtype  [, ...] ] ) ] [, ...]
[ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该聚集不存在则不要抛出一个错误,而是发出一个提示。

name

一个现有聚集函数的名称(可以是模式限定的)。

argmode

一个参数的模式:INVARIADIC。如果被忽略,默认值是IN

argname

一个参数的名称。注意``DROP AGGREGATE``并不真正关心参数名称,因为决定聚集函数的身份时只需要参数数据类型。

argtype

该聚集函数所操作的一个输入数据类型。要引用一个零参数的聚集函数,写``*``来替代参数说明列表。要引用一个有序集聚集函数,在直接和聚集参数说明之间写上ORDER BY

CASCADE

自动删除依赖于该聚集函数的对象(例如使用它的视图),然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该聚集函数,则拒绝删除它。这是默认值。

示例

要为类型integer移除聚集函数myavg

DROP AGGREGATE myavg(integer);

要移除假想集聚集函数myrank,该函数接收一个排序列的任意列表和直接参数的一个匹配的列表:

DROP AGGREGATE myrank(VARIADIC "any" ORDER BY VARIADIC "any");

要在一个命令中删除多个聚合函数:

DROP AGGREGATE myavg(integer), myavg(bigint);

兼容性

在 SQL 标准中没有DROP AGGREGATE语句。

其他

ALTER AGGREGATE 下描述了另一种引用有序集聚集的语法。

18.13. DROP RULE

用途

DROP RULE — 移除一个重写规则

DROP RULE删除一个重写规则。

前置条件

语法

DROP RULE [ IF EXISTS ] name ON table_name [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该规则不存在则不要抛出一个错误,而是发出一个提示。

name

要删除的规则的名称。

table_name

该规则适用的表或视图的名称(可以是模式限定的)。

CASCADE

自动删除依赖于该规则的对象,然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该规则,则拒绝删除它。这是默认值。

示例

要删除重写规则newrule

DROP RULE newrule ON mytable;

兼容性

DROP RULE是一个 KingbaseES语言扩展,整个查询重写系统也是这样。

18.14. DROP SCHEMA

用途

DROP SCHEMA — 移除一个模式

DROP SCHEMA从数据库中移除模式。

前置条件

一个模式只能由其拥有者或一个超级用户删除。注意即使拥有者不拥有该模式中的某些对象,也能删除该模式(以及所有含有的对象)。

语法

DROP SCHEMA [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该模式不存在则不要抛出一个错误,而是发出一个提示。

name

一个模式的名称。

CASCADE

自动删除包含在该模式中的对象(表、函数等),然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果该模式含有任何对象,则拒绝删除它。这是默认值。

示例

要从数据库中移除模式mystuff及其中 所包含的对象:

DROP SCHEMA mystuff CASCADE;

兼容性

DROP SCHEMA完全符合 SQL 标准,不过该标准只允许在每个命令中删除一个模式并且没有 IF EXISTS选项。该选项是一个 KingbaseES扩展。

其他

使用CASCADE选项可能会使这条命令移除除指定模式之外其他模式中的对象。

18.15. DROP SEQUENCE

用途

DROP SEQUENCE移除序数生成器。

前置条件

一个序列只能被其拥有者或超级用户删除。

语法

DROP SEQUENCE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该序列不存在则不要抛出一个错误,而是发出一个提示。

name

一个序列的名称(可以是模式限定的)。

CASCADE

自动删除依赖于该序列的对象,然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT

如果有任何对象依赖于该序列,则拒绝删除它。这是默认值。

示例

要移除序列serial

DROP SEQUENCE serial;

兼容性

DROP SEQUENCE符合SQL标准,不过该标准只允许每个命令中删除一个序列并且没有IF EXISTS选项。该选项是一个 KingbaseES扩展。

18.16. DROP SERVER

用途

DROP SERVER — 移除一个外部服务器描述符

DROP SERVER移除一个现有的外部服务器描述符。

前置条件

要执行这个命令,当前用户必须是该服务器的拥有者。

语法

DROP SERVER [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

语义

IF EXISTS

如果该服务器不存在则不要抛出一个错误,而是发出一个提示。

name 一个现有服务器的名称。

CASCADE 自动删除依赖于该服务器的对象(例如用户映射),然后删除所有依赖于那些对象的对象(见 依赖跟踪 )。

RESTRICT 如果有任何对象依赖于该服务器,则拒绝删除它。这是默认值。

示例

如果一个服务器foo存在则删除它:

DROP SERVER IF EXISTS foo;

兼容性

DROP SERVER符合 ISO/IEC 9075-9(SQL/MED)。IF EXISTS子句是一个 KingbaseES扩展。

18.17. DROP STATISTICS

用途

DROP STATISTICS — 删除扩展统计

DROP STATISTICS删除数据库中的统计对象。

前置条件

只有统计对象的所有者、模式的所有者或超级用户可以删除统计对象。

语法

DROP STATISTICS [ IF EXISTS ] name [, ...]

语义

IF EXISTS name 要删除的统计对象的名称(可以有模式修饰)。

示例

删除不同模式中的两个统计对象,如果不存在时不会失败:

DROP STATISTICS IF EXISTS
accounting.users_uid_creation,
public.grants_user_role;

兼容性

SQL标准中没有DROP STATISTICS命令。

18.18. DROP SUBSCRIPTION

用途

DROP SUBSCRIPTION — 删除一个订阅

DROP SUBSCRIPTION删除数据库集群中的一个订阅。

如果订阅与复制槽相关联,就不能在事务块内部执行DROP SUBSCRIPTION。(可以使用ALTER SUBSCRIPTION取消关联复制槽。)

前置条件

只有超级用户才可以删除订阅。

语法

DROP SUBSCRIPTION [ IF EXISTS ] name [ CASCADE | RESTRICT ]

语义

name 要删除的订阅的名称。

CASCADE

这个关键词没有任何作用,因为订阅没有依赖关系。

RESTRICT 这个关键词没有任何作用,因为订阅没有依赖关系。

示例

删除一个订阅:

DROP SUBSCRIPTION mysub;

兼容性

DROP SUBSCRIPTION是一个KingbaseES 扩展。

其他

当删除与远程主机(正常状态)上的复制槽相关联的订阅时,DROP SUBSCRIPTION``将连接到远程主机,并尝试删除该复制槽,作为其操作的一部分。这是必要的,以便释放远程主机上为订阅分配的资源。如果失败,因为远程主机不可访问,或者因为远程复制槽不能被删除,或者复制槽不存在或从不存在,则\ ``DROP SUBSCRIPTION命令将失败。要在这种情况下继续,请执行``ALTER SUBSCRIPTION ... SET (slot_name = NONE)``来解除复制槽与订阅的关联。之后,``DROP SUBSCRIPTION``将不再尝试对远程主机执行任何操作。请注意,如果远程复制槽仍然存在,则应手动删除该插槽;否则将继续保留WAL,最终可能导致磁盘空间不足。

如果订阅与复制槽相关联,那么不能在事务块内部执行DROP SUBSCRIPTION

18.19. DROP SYNONYM

用途

DROP SYNONYM删除一个现有的同义词。

前置条件

要执行这个命令必须拥有该同义词的权限。

语法

DROP [ PUBLIC ] SYNONYM [ IF EXISTS ] syn_name [, ...] [ FORCE ]

语义

IF EXISTS

当该同义词不存在时不发出错误信息,而是发出一个提示。

syn_name

要移除的同义词的名称(可以是模式限定的)。

FORCE

没有实际意义。

示例

例1:删除名为syntab的私有同义词:

DROP SYNONYM syntab;

例2:删除名为syntb的公有同义词:

DROP PUBLIC SYNONYM syntb;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值