1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 金仓数据库 KingbaseES SQL 语言参考手册 (12. SQL语句:ALTER LANGUAGE 到 ALTER SUBSCRIPTION)

金仓数据库 KingbaseES SQL 语言参考手册 (12. SQL语句:ALTER LANGUAGE 到 ALTER SUBSCRIPTION)

时间:2021-07-23 13:32:26

相关推荐

金仓数据库 KingbaseES SQL 语言参考手册 (12. SQL语句:ALTER LANGUAGE 到 ALTER SUBSCRIPTION)

12.SQL语句:ALTER LANGUAGE 到 ALTER SUBSCRIPTION

本章包含以下SQL语句:

ALTER LANGUAGE

ALTER LARGE OBJECT

ALTER MATERIALIZED VIEW

ALTER OPERATOR

ALTER OPERATOR CLASS

ALTER OPERATOR FAMILY

ALTER PACKAGE

ALTER POLICY

ALTER PROCEDURE

ALTER PUBLICATION

ALTER ROLE

ALTER ROUTINE

ALTER RULE

ALTER SCHEMA

ALTER SEQUENCE

ALTER SERVER

ALTER STATISTICS

ALTER SUBSCRIPTION

12.1.ALTER LANGUAGE

用途

ALTERLANGUAGE更改一种过程语言的定义。唯一的功能是重命名该语言或者为它赋予一个新的拥有者。

前置条件

要使用ALTERLANGUAGE,你必须是超级用户或者该 语言的拥有者。

语法

ALTER [ PROCEDURAL ] LANGUAGE name RENAME TO new_nameALTER [ PROCEDURAL ] LANGUAGE name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }

语义

name

语言的名称

new_name

该语言的新名称

new_owner

该语言的新拥有者

示例

重命名

ALTER LANGUAGE name RENAME TO new_name;

兼容性

在 SQL 标准中没有ALTERLANGUAGE语句。

12.2.ALTER LARGE OBJECT

用途

ALTERLARGEOBJECT更改一个大对象的定义。 唯一的功能是为它赋予一个新的拥有者。

前置条件

要使用``ALTER LARGE OBJECT``,你必须是超级用户或者 该大对象的拥有者。

语法

ALTER LARGE OBJECT large_object_oid OWNER TO { new_owner | CURRENT_USER | SESSION_USER }

语义

large_object_oid

要被修改的大对象的 OID

new_owner

该大对象的新拥有者

示例

变更拥有者

ALTER LARGE OBJECT 16399 OWNER TO new_owner;

12.3.ALTER MATERIALIZED VIEW

用途

ALTER MATERIALIZED VIEW — 更改一个物化视图的定义

前置条件

ALTERMATERIALIZEDVIEW更改一个现有物化视图的 多个辅助属性。

要使用ALTERMATERIALIZEDVIEW,你必须拥有该物化视图。要 更改一个物化视图的模式,你还必须拥有新模式上的CREATE特权。要更 物化视图所在模式上的CREATE特权(这些限制强制修改拥有者不 能做一些通过删除和重建该物化视图做不到的事情。不过,超级用户怎么都能更改 任何视图的所有权。)。

DEPENDSONEXTENSION形式把该物化视图标记为依赖于一个 扩展,这样该扩展被删除时会自动地删除掉这个物化视图。

可用于ALTERMATERIALIZEDVIEW的语句形式和动作是ALTERTABLE的一个子集,并且在用于物化视图时具有相 同的含义。

语法

ALTER MATERIALIZED VIEW [ IF EXISTS ] nameaction [, ... ]ALTER MATERIALIZED VIEW nameDEPENDS ON EXTENSION extension_nameALTER MATERIALIZED VIEW [ IF EXISTS ] nameRENAME [ COLUMN ] column_name TO new_column_nameALTER MATERIALIZED VIEW [ IF EXISTS ] nameRENAME TO new_nameALTER MATERIALIZED VIEW [ IF EXISTS ] nameSET SCHEMA new_schemaALTER MATERIALIZED VIEW ALL IN TABLESPACE name [ OWNED BY role_name [, ... ] ]SET TABLESPACE new_tablespace [ NOWAIT ]其中 action是下列之一:ALTER [ COLUMN ] column_name SET STATISTICS integerALTER [ COLUMN ] column_name SET ( attribute_option = value [, ... ] )ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED |MAIN }CLUSTER ON index_nameSET WITHOUT CLUSTERSET ( storage_parameter = value [, ... ] )RESET ( storage_parameter [, ... ] )OWNER TO { new_owner | CURRENT_USER | SESSION_USER }

语义

该部分描述组成语法的关键字、参数、子句的用途。以及可能适用于他们的限制条件和其他用法说明。

示例

name

一个现有物化视图的名称(可以是模式限定的)。

column_name

一个新的或者现有的列的名称。

extension_name

该物化视图所依赖的扩展的名称。

new_column_name

一个现有列的新名称。

new_owner

该物化视图的新拥有者的用户名。

new_name

该物化视图的新名称。

new_schema

该物化视图的新模式。

12.4.ALTER OPERATOR

用途

ALTER OPERATOR — 更改一个操作符的定义

前置条件

要使用ALTEROPERATOR,你必须是该操作符的所有者。要更改操作符的所有者, 你还必须是新所有者角色的一个直接或者间接成员,并且该角色必须具有该操作符所在 模式上的CREATE特权(这些限制强制修改拥有者不能做一些通过 删除和重建操作符做不到的事情。不过,超级用户怎么都能更改任何操作符的所 有权。)。

语法

ALTER OPERATOR name ( { left_type | NONE } , { right_type | NONE } )OWNER TO { new_owner | CURRENT_USER | SESSION_USER }ALTER OPERATOR name ( { left_type | NONE } , { right_type | NONE } )SET SCHEMA new_schemaALTER OPERATOR name ( { left_type | NONE } , { right_type | NONE } )SET ( { RESTRICT = { res_proc | NONE }| JOIN = { join_proc | NONE }} [, ... ] )

语义

name

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

left_type

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

right_type

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

new_owner

该操作符的新拥有者。

new_schema

该操作符的新模式。

res_proc

这个操作符的约束选择度估算器函数,写成NONE可以移除现有的选择度估算器。

join_proc

这个操作符的连接选择度估算器函数,写成NONE可以移除现有的选择度估算器。

示例

更改类型text的一个自定义操作符a@@b的拥有者:

ALTER OPERATOR @@ (text, text) OWNER TO joe;

更改类型int[]的自定义操作符a&&b的约束和连接选择度估算器函数:

ALTER OPERATOR && (_int4, _int4) SET (RESTRICT = _int_contsel, JOIN = _int_contjoinsel);

12.5.ALTER OPERATOR CLASS

用途

ALTEROPERATORCLASS更改一个操作符类的定义。

前置条件

要使用ALTEROPERATORCLASS,你必须拥有该操作符类。要修改操作符类的拥有者,你还必须是新拥有者角色的一个直接或间接成员,并且该角色必须具有该操作符类所在模式上的CREATE特权(这些限制强制修改拥有者不能做一些通过删除和重建操作符类做不到的事情。不过,超级用户怎么都能更改任何操作符类的所有权。)。

语法

ALTER OPERATOR CLASS name USING index_methodRENAME TO new_nameALTER OPERATOR CLASS name USING index_methodOWNER TO { new_owner | CURRENT_USER | SESSION_USER }ALTER OPERATOR CLASS name USING index_methodSET SCHEMA new_schema

语义

name

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

index_method

这个操作符类所服务的索引方法的名称。

new_name

该操作符类的新名称。

new_owner

该操作符类的新拥有者。

new_schema

该操作符类的新模式。

示例

修改操作符类名称

ALTER OPERATOR CLASS org_name RENAME TO new_name;

兼容性

在 SQL 标准中没有ALTEROPERATORCLASS语句。

其他

CREATE OPERATOR CLASS,DROP OPERATOR CLASS,ALTER OPERATOR FAMILY

12.6.ALTER OPERATOR FAMILY

用途

ALTEROPERATORFAMILY更改一个操作符族的定义。你能增加操作符以及支持函数到该家族、从该族中移除它们或者更改该族的名称或者拥有者。

在用ALTEROPERATORFAMILY增加操作符和支持函数到一个族中时,它们不是族内任何特定操作符类的组成部分,而只是“松散”地存在于该族中。这表示这些操作符和函数与该族的语义兼容,但是没有被任何特定索引的正确功能所要求(所要求的操作符和函数应该被作为一个操作符类的一部分声明,见CREATE OPERATOR CLASS。KingbaseES将允许一个族的松散成员在任何时候被从该族中删除,但是在删除一个操作符类的成员之前,必须已经删除整个类以及依赖于该成员的索引。具有代表性的是,单一数据类型操作符和函数是操作符类的一部分,因为在特定数据类型上的索引需要它们的支持。而多数据类型操作符和函数则被作为该族的松散成员。

ALTEROPERATORFAMILY目前不检测操作符族定义是否包括该索引方法所要求的所有操作符和函数,也不检查操作符和函数是否形成了一个有理的集合。定义一个合法的操作符族是用户的责任。

前置条件

要使用ALTEROPERATORFAMILY,你必须是超级用户(这样的限制是因为一个错误的操作符族定义可能会迷惑服务器甚至让它崩溃)。

语法

ALTER OPERATOR FAMILY name USING index_method ADD{ OPERATOR strategy_number operator_name ( op_type, op_type )[ FOR SEARCH | FOR ORDER BY sort_family_name ]| FUNCTION support_number [ ( op_type [ , op_type ] ) ]function_name [ ( argument_type [, ...] ) ]} [, ... ]ALTER OPERATOR FAMILY name USING index_method DROP{ OPERATOR strategy_number ( op_type [ , op_type ] )| FUNCTION support_number ( op_type [ , op_type ] )} [, ... ]ALTER OPERATOR FAMILY name USING index_methodRENAME TO new_nameALTER OPERATOR FAMILY name USING index_methodOWNER TO { new_owner | CURRENT_USER | SESSION_USER }ALTER OPERATOR FAMILY name USING index_methodSET SCHEMA new_schema

语义

name

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

index_method

这个操作符族所应用的索引方法的名称。

strategy_number

与该操作符族相关的一个操作符的索引方法策略号。

operator_name

与该操作符族相关的一个操作符的名称(可以是模式限定的)。

op_type

在一个OPERATOR子句中指定该操作符的操作数数据类型, 或者用NONE来表示一个左一元或者右一元操作符。不同于CREATEOPERATORCLASS中类似的语法,操作数数据 类型总是必须被指定。

在一个ADDFUNCTION子句中指定该函数意图支持的操作数数据类型(如果不同于该函数的输入数据类型)。对于 B-树比较函数和哈希函数,有必要指定op_type,因为该函数的输入数据类型总是正确的。对于 B-树排序支持函数和 GiST、SP-GiST 和 GIN 操作符类中的所有函数,有必要指定该函数要使用的操作数数据类型。

在一个DROPFUNCTION子句中,必须指定该函数要支持的参数的数据类型。

sort_family_name

一个现有btree操作符族的名称(可能是模式限定的),它描述与一个排序操作符相关的排序顺序。

如果既没有指定FORSEARCH也没有指定FORORDERBY,默认值是FORSEARCH

support_number

一个与该操作符族相关的函数的索引方法支持过程编号。

function_name

作为该操作符族的一种索引方法支持函数的函数名称(可以是模式限定的)。如果没有指定参数列表,则该名称必须在其模式中唯一。

argument_type

该函数的参数数据类型。

new_name

该操作符族的新名称。

new_owner

该操作符族的新拥有者。

new_schema

该操作符族的新模式。

OPERATORFUNCTION子句可以以任何顺序出现。

示例

下列示例命令为一个操作符族增加跨数据类型的操作符和支持函数,该操作符族已经包含用于数据类型int4以及int2的 B-树操作符类。

ALTER OPERATOR FAMILY integer_ops USING btree ADD-- int4 vs int2OPERATOR 1 < (int4, int2) ,OPERATOR 2 <= (int4, int2) ,OPERATOR 3 = (int4, int2) ,OPERATOR 4 >= (int4, int2) ,OPERATOR 5 > (int4, int2) ,FUNCTION 1 btint42cmp(int4, int2) ,-- int2 vs int4OPERATOR 1 < (int2, int4) ,OPERATOR 2 <= (int2, int4) ,OPERATOR 3 = (int2, int4) ,OPERATOR 4 >= (int2, int4) ,OPERATOR 5 > (int2, int4) ,FUNCTION 1 btint24cmp(int2, int4) ;

再次移除这些项:

ALTER OPERATOR FAMILY integer_ops USING btree DROP-- int4 vs int2OPERATOR 1 (int4, int2) ,OPERATOR 2 (int4, int2) ,OPERATOR 3 (int4, int2) ,OPERATOR 4 (int4, int2) ,OPERATOR 5 (int4, int2) ,FUNCTION 1 (int4, int2) ,-- int2 vs int4OPERATOR 1 (int2, int4) ,OPERATOR 2 (int2, int4) ,OPERATOR 3 (int2, int4) ,OPERATOR 4 (int2, int4) ,OPERATOR 5 (int2, int4) ,FUNCTION 1 (int2, int4) ;

兼容性

在 SQL 标准中没有ALTEROPERATORFAMILY语句。

其他

对于DROPFUNCTION,要指定的类型是该函数意图支持的输入数据类型。对于 GiST、SP-GiST 以及 GIN索引,可能无需对该函数的 实际输入参数类型做任何事情。

因为索引机制在使用函数之前不会检查其上的访问权限,包括一个操作符族中的函数或操作符都等同于授予了其上的公共执行权限。这对于操作符族中很有用的这类函数来说,这通常不成问题。

操作符应该由 SQL 函数定义。一个 SQL 函数很可能被内联到调用查询中,这将阻止优化器识别出该查询匹配一个索引。

12.7.ALTER PACKAGE

用途

ALTER PACKAGE--修改一个包的定义,修改包的属性,包括:名称、属主和模式。需要注意,包属性的修改是没有包规范和包体之分的,包体总是和包规范具有相同属性。包被修改后,该包的对象(变量、常量、游标、函数和存储过程)的相关属性也会被修改。

前置条件

执行ALTERPACKAGE的用户必须是包的属主或非受限数据库管理员,并且要具有包所在模式的USAGE权限。

执行OWNERTO时,如果执行ALTERPACKAGE命令的用户是包的属主但不是非受限数据库管理员,那么新的用户要具有该模式的CREATE权限。

执行RENAMETO时,要求用户具有包所在模式下的CREATE权限。

执行SETSCHEMA时,要求用户在新模式下拥有CREATE权限。

语法

ALTER PACKAGE name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }ALTER PACKAGE name RENAME TO new_nameALTER PACKAGE name SET SCHEMA new_schema

语义

name

修改的包的名字。可以有数据库名和模式名修饰,但数据库名只能是当前数据库。

new_name

包的新名字。

new_owner

包的新属主。

new_schema

包的新归属模式。

示例

ALTER PACKAGE pkg OWNER TO user_a;

ALTER PACKAGE pkg RENAME TO pkg2;

ALTER PACKAGE test.public.pkg RENAME TO pkg3;(当前数据库为 TEST)

ALTER PACKAGE pkg SET SCHEMA sch;

12.8.ALTER POLICY

用途

ALTERPOLICY更改一条现有行级安全性策略的定义。 请注意,ALTERPOLICY只允许修改策略所应用的角色集合, 和要修改的USINGWITHCHECK表达式。 要更改策略的其他属性,例如其应用的命令,或者是允许还是限制, 则必须删除并重新创建策略。

ALTERPOLICY的第二种形式中,如果指定了角色列表、``using_expression``以及``check_expression``, 它们会被独立地替换。当这些子句之一被省略时,策略的对应部分不会被更改。

前置条件

要使用ALTERPOLICY,你必须拥有该策略所适用的表。

语法

ALTER POLICY name ON table_name RENAME TO new_nameALTER POLICY name ON table_name[ TO { role_name | PUBLIC | CURRENT_USER | SESSION_USER } [, ...] ][ USING ( using_expression ) ][ WITH CHECK ( check_expression ) ]

语义

name

要更改的现有策略的名称。

table_name

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

new_name

该策略的新名称。

role_name

该策略适用的角色。可以一次指定多个角色。要把该策略 应用于所有角色,可使用PUBLIC

using_expression

该策略的USING表达式。详见CREATE POLICY。

check_expression

该策略的WITHCHECK表达式。详见CREATE POLICY。

示例

修改策略名称

ALTER POLICY policy_name ON mytable RENAME TO new_policy_name;

兼容性

ALTERPOLICY是一种KingbaseES扩展。

12.9.ALTER PROCEDURE

用途

ALTER PROCEDURE — 更改一个过程的定义

前置条件

要使用ALTERPROCEDURE,你必须拥有该过程。要更改一个过程的方案,你还必须有新方案上的CREATE特权。要更改拥有者,你还必须是新拥有角色的直接或间接成员,并且那个角色在该过程的方案上拥有CREATE特权(这些限制强制更新拥有者无法做到通过删除和重建该过程无法做到的事情。不过,超级用户总是能够更改任何过程的拥有关系)。

语法

ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]action [ ... ] [ RESTRICT ]ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]RENAME TO new_nameALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]OWNER TO { new_owner | CURRENT_USER | SESSION_USER }ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]SET SCHEMA new_schemaALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]DEPENDS ON EXTENSION extension_name其中action是下列之一:[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINERSET configuration_parameter { TO | = } { value | DEFAULT }SET configuration_parameter FROM CURRENTRESET configuration_parameterRESET ALL

语义

name

一个现有的过程的名字(可以被方案限定)。如果没有指定参数列表,这个名字必须在其方案中唯一。

argmode

参数的模式:INVARIADIC。如果被省略,默认是IN

argname

参数的名字。注意ALTERPROCEDURE实际上并不关心参数名,因为只需要参数的数据类型来确定过程的身份。

argtype

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

new_name

该过程的新名字。

new_owner

该过程的新拥有者。注意,如果这个过程被标记为SECURITYDEFINER,接下来它将被作为新拥有者执行。

new_schema

该过程的新方案。

extension_name

该过程所依赖的扩展的名称。

[EXTERNAL]SECURITYINVOKER[EXTERNAL]SECURITYDEFINER

更改该过程是否为一个安全性定义器。关键词EXTERNAL由于SQL符合性的原因被忽略。更多有关这个能力的信息请见CREATE PROCEDURE语句。

configuration_parametervalue

增加或者更改在调用该过程时,要对一个配置参数做的赋值。如果``value``是DEFAULT或者等效的值,则会使用RESET,过程本地的设置会被移除,这样该过程的执行就会使用其所处环境中的值。使用RESETALL可以清除所有的过程本地设置。SETFROMCURRENT会把ALTERPROCEDURE执行时该参数的当前值保存为进入该过程时要被应用的值。

关于允许的参数名和参数值的更多信息请见SET和服务器配置参数参考手册。

RESTRICT

为了符合SQL标准会被忽略。

示例

要重命名具有两个integer类型参数的过程insert_datainsert_record

ALTER PROCEDURE insert_data(integer, integer) RENAME TO insert_record;

要把具有两个integer类型参数的过程insert_data的拥有者改为joe

ALTER PROCEDURE insert_data(integer, integer) OWNER TO joe;

要重把具有两个integer类型参数的过程insert_data的方案改为accounting

ALTER PROCEDURE insert_data(integer, integer) SET SCHEMA accounting;

把过程insert_data(integer,integer)标记为依赖于扩展myext

ALTER PROCEDURE insert_data(integer, integer) DEPENDS ON EXTENSION myext;

要调整一个过程自动设置的搜索路径:

ALTER PROCEDURE check_password(text) SET search_path = admin, sys_temp;

要为一个过程禁用search_path的自动设置:

ALTER PROCEDURE check_password(text) RESET search_path;

现在这个过程将用其调用者所使用的任何搜索路径执行。

12.10.ALTER PUBLICATION

用途

命令ALTERPUBLICATION可以更改发布的属性。

前三个语句更改哪些表是该发布的一部分。SETTABLE子句用指定的表替换发布中的表的列表。ADDTABLEDROPTABLE子句将从发布中添加和删除一个或多个表。请注意,将表添加到已订阅的发布中将需要在订阅端执行ALTERSUBSCRIPTION...REFRESHPUBLICATION操作才能生效。

第四条语句可以改变在CREATE PUBLICATION中指定的所有发布属性。 该命令中未提及的属性保留其先前的设置。

其余语句更改所有者和发布的名称。

前置条件

你必须拥有该发布才能使用ALTERPUBLICATION。要改变所有者,你也必须是新所有者角色的直接或间接成员。新的所有者必须在数据库上拥有CREATE权限。此外,``FOR ALL TABLES``发布的新所有者必须是超级用户。但是,超级用户可以在避开这些限制的情况下更改发布的所有权。

语法

ALTER PUBLICATION name ADD TABLE [ ONLY ] table_name [ * ] [, ...]ALTER PUBLICATION name SET TABLE [ ONLY ] table_name [ * ] [, ...]ALTER PUBLICATION name DROP TABLE [ ONLY ] table_name [ * ] [, ...]ALTER PUBLICATION name SET ( publication_parameter [= value] [, ... ] )ALTER PUBLICATION name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }ALTER PUBLICATION name RENAME TO new_name

语义

name

要修改定义的现有发布的名称。

table_name

现有表的名称。如果在表名之前指定了ONLY,则只有该表受到影响。 如果没有指定ONLY,则该表及其所有后代表(如果有的话)都会受到影响。 可选地,可以在表名之后指定*以明确指示包含后代表。

SET(publication_parameter[=value] [, ... ] )

该子句修改最初由CREATE PUBLICATION设置的发布参数。

new_owner

发布的新所有者的用户名。

new_name

发布的新名称。

示例

将发布修改为只发布删除和更新:

ALTER PUBLICATION noinsert SET (publish = 'update, delete');

给发布添加一些表:

ALTER PUBLICATION mypublication ADD TABLE users, departments;

兼容性

ALTERPUBLICATION是KingbaseES的一个扩展。

其他

参见CREATE PUBLICATION,DROP PUBLICATION,CREATE SUBSCRIPTION,ALTER SUBSCRIPTION

12.11.ALTER ROLE

用途

ALTERROLE更改一个 KingbaseES角色的属性。

前面列出的这个命令的第一种变体能够更改CREATE ROLE中指定的很多角色属性(覆盖了所有可能的属性,不过没有增加和移除成员关系的选项,如果要增加和移除成员关系可使用GRANT和REVOKE)。该命令中没有提到的属性保持它们之前的设置。 数据库超级用户能够更改任何角色的任何这些设置。具有CREATEROLE特权的角色能够更改任何这些设置,但是只能为非超级用户和非复制角色修改。普通角色只能更改它们自己的口令。

第二种变体更改该角色的名称。数据库超级用户能重命名任何角色。具有CREATEROLE特权的角色能够重命名任何非超级用户角色。当前的会话 用户不能被重命名(如果需要这样做,请以一个不同的用户连接)。由于MD5加密的口令使用角色名作为 salt,因此如果一个角色的口令是MD5加密的,重命名该角色会清空其口令。

其余的变体用于更改一个角色的配置变量的会话默认值,可以为所有数据库设置,或者 只为INDATABASE中指定的数据库设置。如果指定的是ALL而不是一个角色名,将会为所有角色更改该设置。把ALLINDATABASE一起使用实际上和使用命 令ALTERDATABASE...SET...相同。

只要改角色后续开始一个新会话,指定的值将会成为该会话的默认值,并且会覆盖kingbase.conf中存在的值或者从kingbase命令行收到的值。这只在登录时发生,执行SET ROLE或者SET SESSION AUTHORIZATION不会导致新的配置值被设置。对于所有数据库设置的值会被附加到一个角色的数据库相关的设置所覆盖。特定数据库或角色的设置会覆盖为所有角色所作的设置。

前置条件

超级用户能够更改任何人的会话默认值。具有CREATEROLE特权的角色能够更改非超级用户的默认值。普通角色只能为它们自己设置默认值。某些配置变量不能以这种方式设置,或者只能由超级用户发出的命令设置。只有超级用户能够更改所有角色在所有数据库中的设置。

语法

ALTER ROLE role_specification [ WITH ] option [ ... ]其中option可以是:SUPERUSER | NOSUPERUSER| CREATEDB | NOCREATEDB| CREATEROLE | NOCREATEROLE| INHERIT | NOINHERIT| LOGIN | NOLOGIN| REPLICATION | NOREPLICATION| BYPASSRLS | NOBYPASSRLS| CONNECTION LIMIT connlimit| [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL| VALID UNTIL 'timestamp'ALTER ROLE name RENAME TO new_nameALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] SETconfiguration_parameter { TO | = } { value | DEFAULT }ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] SETconfiguration_parameter FROM CURRENTALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESETconfiguration_parameterALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESETALL其中role_specification可以是:role_name| CURRENT_USER| SESSION_USER

语义

name

要对其属性进行修改的角色的名称。

CURRENT_USER

修改当前用户而不是一个显式标识的角色。

SESSION_USER

修改当前会话用户而不是一个显式标识的角色。

SUPERUSERNOSUPERUSERCREATEDBNOCREATEDBCREATEROLENOCREATEROLEINHERITNOINHERITLOGINNOLOGINREPLICATIONNOREPLICATIONBYPASSRLSNOBYPASSRLSCONNECTIONLIMITconnlimit[ENCRYPTED]PASSWORD'password'PASSWORDNULLVALIDUNTIL'timestamp'

这些子句修改原来有CREATE ROLE设置的属性。更多信息请见CREATEROLE参考页。

new_name

该角色的新名称。

database_name

要在其中设置该配置变量的数据库名称。

configuration_parametervalue

把这个角色的指定配置参数的会话默认值设置为给定值。如果valueDEFAULT或者等效地使用了RESET,角色相关的变量设置会被移除,这样该角色将会在新会话中继承系统范围的默认 设置。使用RESETALL可清除所有角色相关的设置。SETFROMCURRENT可以把会话中该参数的当前值保存为角色相关的值。如果指定了INDATABASE,只会为给定的角色和数据库设置或者移除该配置参数。

角色相关的变量设置只在登录时生效,SET ROLE以及SET SESSION AUTHORIZATION不会处理角色相关的变量设置。

关于允许的参数名称和值详见SET和服务器配置参数参考手册。

示例

更改一个角色的口令:

ALTER ROLE davide WITH PASSWORD 'hu8jmn3';

移除一个角色的口令:

ALTER ROLE davide WITH PASSWORD NULL;

更改一个口令的失效日期,指定该口令应该在 年 5 月 4 日中午(在一个比UTC快 1 小时的时区)过期:

ALTER ROLE chris VALID UNTIL 'May 4 12:00:00 +1';

让一个口令永远有效:

ALTER ROLE fred VALID UNTIL 'infinity';

让一个角色能够创建其他角色和新的数据库:

ALTER ROLE miriam CREATEROLE CREATEDB;

为一个角色指定maintenance_work_mem参数的非默认设置:

ALTER ROLE worker_bee SET maintenance_work_mem = 100000;

为一个角色指定 client_min_messages 参数的数据库相关的非默认设置:

ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;

其他

使用CREATE ROLE增加新角色,使用DROP ROLE移除一个角色。

ALTERROLE无法更改一个角色成员关系。可以使用GRANT和REVOKE来实现。

在使用这个命令指定一个未加密口令时要多加小心。该口令将会以明文传送到服务器,并且它还可能会被记录在客户端的命令历史或者服务器日志中。ksql包含了一个命令password,它可以被用来更改一个角色 的口令而不暴露明文口令。

也可以把一个会话默认值绑定到一个指定的数据库而不是一个角色,详见 :ALTER_DATABASE。如果出现冲突,数据库角色相关的设置会覆盖角色相关的设置,角色相关的又会覆盖数据库相关的设置。

12.12.ALTER ROUTINE

用途

ALTERROUTINE更改一个例程的定义,它可以是聚集函数、普通函数或者过程。参数的描述、更多的例子以及进一步的细节请参考ALTER AGGREGATE、ALTER FUNCTION语句以及ALTER PROCEDURE语句。

前置条件

你必须拥有该例程以使用 ALTER ROUTINE 。要重命名例程名或更改例程名的属主,那么这个例程名必须不存在。要修改某个模式下的例程,那么这个模式下必须存在这个例程。

语法

ALTER ROUTINE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]

action [ ... ] [ RESTRICT ]

ALTER ROUTINE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]

RENAME TO new_name

ALTER ROUTINE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]

OWNER TO { new_owner | CURRENT_USER | SESSION_USER }

ALTER ROUTINE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]

SET SCHEMA new_schema

ALTER ROUTINE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]

DEPENDS ON EXTENSION extension_name

其中action是下列之一:

IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER PARALLEL { UNSAFE | RESTRICTED | SAFE } COST execution_cost ROWS result_rows SET configuration_parameter { TO | = } { value | DEFAULT } SET configuration_parameter FROM CURRENT RESET configuration_parameter RESET ALL

语义

待补充

示例

将类型integer的例程foo重命名为foobar

ALTER ROUTINE foo(integer) RENAME TO foobar;

不管foo是聚集、函数还是过程,这个命令都能使用。

兼容性

这个语句与SQL标准中的ALTERROUTINE语句部分兼容。更多细节请参考ALTER FUNCTION语句和ALTER PROCEDURE语句。允许例程名称引用聚集函数是一种KingbaseES的扩展。

其他

参见ALTER AGGREGATE,ALTER FUNCTION语句,ALTER PROCEDURE语句,DROP ROUTINE注意没有CREATEROUTINE命令。

12.13.ALTER RULE

用途

ALTERRULE更改一条现有规则的定义。当前,唯一可用的动作是更改规则的名称。

前置条件

要使用ALTERRULE,你必须拥有该规则适用的表或者视图。

语法

ALTER RULE name ON table_name RENAME TO new_name

语义

name

要修改的一条现有规则的名称。

table_name

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

new_name

该规则的新名称。

示例

要重命名一条现有的规则:

ALTER RULE notify_all ON emp RENAME TO notify_me;

兼容性

ALTERRULE是一种KingbaseES的语言扩展,整个查询重写系统也是。

12.14.ALTER SCHEMA

用途

ALTERSCHEMA更改一个模式的定义。

前置条件

要使用ALTERSCHEMA,你必须拥有该模式。要重命名一个模式,你还必须拥有该数据库的CREATE特权。要更改拥有者,你还必须是新拥有角色的一个直接或者间接成员,并且该角色必须具有该数据库上的CREATE特权(注意超级用户自动拥有所有这些特权)。

语法

ALTER SCHEMA name RENAME TO new_nameALTER SCHEMA name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }

语义

name

一个现有模式的名称。

new_name

该模式的新名称。新名称不能以sys_开始,因为这些名称被保留用于系统模式。

new_owner

该模式的新拥有者。

示例

要重命名一条现有的规则:

ALTER RULE notify_all ON emp RENAME TO notify_me;

兼容性

在 SQL 标准中没有ALTERSCHEMA语句。

12.15.ALTER SEQUENCE

用途

ALTERSEQUENCE更改一个现有序列发生器的参数。 任何没有在ALTERSEQUENCE命令中明确设置的参数 保持它们之前的设置。

前置条件

要使用ALTERSEQUENCE,你必须拥有该序列。要更改一个序列 的模式,你还必须拥有新模式上的CREATE特权。要更改拥有者,你还必须 是新拥有角色的一个直接或者间接成员,并且该角色必须具有该域的模式上的CREATE特权(这些限制强制修改拥有者不能做一些通过删除和重 建该序列做不到的事情。不过,超级用户怎么都能更改任何序列的所有权。)。

语法

ALTER SEQUENCE [ IF EXISTS ] name[ AS data_type ][ INCREMENT [ BY ] increment ][ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ][ START [ WITH ] start ][ RESTART [ [ WITH ] restart ] ][ CACHE cache ] [ NOCACHE ][ [ NO ] CYCLE ] [ NOCYCLE ][ ORDER ] [ NOORDER ][ OWNED BY { table_name.column_name | NONE } ]ALTER SEQUENCE [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_USER |SESSION_USER }ALTER SEQUENCE [ IF EXISTS ] name RENAME TO new_nameALTER SEQUENCE [ IF EXISTS ] name SET SCHEMA new_schema

语义

name

要修改的序列的名称(可以是模式限定的)。

IFEXISTS

在序列不存在时不要抛出一个错误。这种情况下会发出一个提示。

data_type

可选子句ASdata_type改变序列的数据类型。有效类型是smallintintegerbigint

当且仅当先前的最小值和最大值是旧数据类型的最小值或最大值时(换句话说, 如果序列是使用NOMINVALUENOMAXVALUE, 隐式或显式创建的),则更改数据类型会自动更改序列的最小值和最大值。 否则,将保留最小值和最大值,除非将新值作为同一命令的一部分给出。 如果最小值和最大值不符合新的数据类型,则会生成错误。

increment

子句INCREMENTBYincrement是可选的。 一个正值将产生一个上升序列,一个负值会产生一个下降序列。如果 没有指定,旧的增量值将被保持。

minvalueNOMINVALUE

可选的子句MINVALUEminvalue决定一个序列 能产生的最小值。如果指定了NOMINVALUE,上升序列和下降序列的默认值分别是 1 和 数据类型的最小值。如果这些选项都没有被指定,将保持当前的 最小值。

maxvalueNOMAXVALUE

可选的子句MAXVALUEmaxvalue决定一个序列 能产生的最大值。如果指定了NOMAXVALUE,上升序列和下降序列的默认值分别是 数据类型的最大值和 -1。如果这些选项都没有被指定,将保持当前的 最大值。

start

可选的子句STARTWITHstart更改该序列被记录的开始值。 这对于当前序列值没有影响,它会简单地设置 未来ALTERSEQUENCERESTART命令将会使用的值。

restart

可选的子句RESTART[WITHrestart]更改该序列的 当前值。这类似于用is_called=false调用setval函数:被指定的值将会被 下一次nextval调用返回。写上没有``restart``值的RESTART等效于提供被CREATESEQUENCE记录的或者上一次被ALTERSEQUENCESTARTWITH设置的开始值。

setval调用相比,序列上的RESTART操作是事务性的并阻止并发事务从同一序列中获取数字。 如果这不是所需的操作模式,则应使用setval

cacheNOCYCLE

子句CACHEcache使得序列数字被预先 分配并且保存在内存中以便更快的访问。最小值是 1(每次只产生一个值,即 无缓存)。如果没有指定,旧的缓冲值将被保持。

指定NOCACHE,即没有缓存,缓存值为1。

CYCLE

可选的CYCLE关键词可以被用来允许该序列在达到``maxvalue``(上升序列)或``minvalue``(下降序列)时 回卷。如果到达该限制,下一个被产生的数字将分别是``minvalue``或者``maxvalue``。

NOCYCLENOCYCLE

如果指定了可选的NOCYCLE关键词,任何在该 序列到达其最大值后的nextval调用将会返回 一个错误。如果既没有指定CYCLE也没有指定NOCYCLE,旧的循环行为将被保持。

NOCYCLE等价于NOCYCLE

ORDERNOORDER

ORDERNOORDER只在语法层面兼容Oracle数据库,并没有实现相应的功能。

OWNEDBYtable_name.column_nameOWNEDBYNONE

OWNEDBY选项导致该序列与一个特定的表列相关联, 这样如果该列(或者整个表)被删除,该序列也会被自动删除。如果指定, 这种关联会替代之前为该序列指定的任何关联。被指定的表必须具有相同的 拥有者并且与该序列在同一个模式中。指定OWNEDBYNONE可以移除任何现有的关联,让该序列 “自立”。

new_owner

该序列的新拥有者的用户名。

new_name

该序列的新名称。

new_schema

该序列的新模式。

示例

从 105 重启一个被称为serial的序列:

ALTER SEQUENCE serial RESTART WITH 105;

其他

ALTERSEQUENCE将不会立即影响除当前后端外 其他后端中的nextval结果,因为它们有预分配(缓存)的序列 值。在注意到序列生成参数被更改之前它们将用尽所有缓存的值。当前后端将被 立刻影响。

ALTERSEQUENCE不会影响该序列的currval状态(在 KingbaseES V8 之前有时会影响)。

ALTERSEQUENCE阻塞并发nextvalcurrvallastvalsetval调用。

由于历史原因,ALTERTABLE也可以被用于序列,但是只有等效于上述形式的ALTERTABLE变体才被 允许用于序列。

12.16.ALTER SERVER

用途

ALTERSERVER更改一个外部服务器的定义。 第一种形式更改该服务器的版本字符串或者该服务器的一般选项(至少要求一个子句)。第二种形式更改该服务器的拥有者。

前置条件

要修改该服务器,你必须是它的拥有者。此外为了修改拥有者,你必须拥有该服务器并且是新拥有角色的一个直接或者间接成员,并且你必须具有该服务器的外部数据包装器上的USAGE特权(注意超级用户自动满足所有这些政策)。

语法

ALTER SERVER name [ VERSION 'new_version' ][ OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ] ) ]ALTER SERVER name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }ALTER SERVER name RENAME TO new_name

语义

name

一个现有服务器的名称。

new_version

新的服务器版本。

OPTIONS([ADD|SET|DROP]option['value'] [, ... ] )

更改该服务器的选项。ADDSETDROP指定要执行的动作。如果没有显式地指定操作,将会假定为ADD。选项名称必须唯一,名称和值也会使用该服务器的外部数据包装器库进行验证。

new_owner

该外部服务器的新拥有者的用户名。

new_name

该外部服务器的新名称。

示例

修改服务器foo,增加连接选项:

ALTER SERVER foo OPTIONS (host 'foo', dbname 'foodb');

修改服务器foo,更改版本、更改host选项:

ALTER SERVER foo VERSION '8.4' OPTIONS (SET host 'baz');

兼容性

ALTERSERVER符合 ISO/IEC 9075-9 (SQL/MED)。OWNERTORENAME形式是 KingbaseES 扩展。

12.17.ALTER STATISTICS

用途

ALTERSTATISTICS更改现有扩展统计对象的参数。任何在ALTERSTATISTICS命令中没有明确设定的参数保持它们之前的设置。

前置条件

您必须拥有统计对象才能使用ALTERSTATISTICS。要更改统计对象的模式,还必须在新模式上具有CREATE权限。 要更改所有者,还必须是新所有者角色的直接或间接成员,且该角色在统计对象的模式上必须具有CREATE权限。 (这些限制强制了通过删除和重新创建统计对象来改变所有者不会做任何你不能做的事情,但是超级用户可以改变任何统计对象的所有权。)

语法

ALTER STATISTICS name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }ALTER STATISTICS name RENAME TO new_nameALTER STATISTICS name SET SCHEMA new_schema

语义

name

要修改的统计对象的名称(可能有模式修饰)。

new_owner

统计对象的新所有者的用户名。

new_name

统计对象的新名称。

new_schema

统计对象的新模式。

示例

修改服务器foo,增加连接选项:

ALTER SERVER foo OPTIONS (host 'foo', dbname 'foodb');

修改服务器foo,更改版本、更改host选项:

ALTER SERVER foo VERSION '8.4' OPTIONS (SET host 'baz');

兼容性

SQL标准中没有ALTERSTATISTICS命令。

12.18.ALTER SUBSCRIPTION

用途

ALTERSUBSCRIPTION可以修改大部分可以在CREATE SUBSCRIPTION中指定的订阅属性。

前置条件

要使用ALTERSUBSCRIPTION,你必须拥有该订阅。要改变所有者,你也必须是新所有者的直接或间接成员。新所有者必须是超级用户。(目前,所有的订阅所有者必须是超级用户,所以所有者的检查将在实践中被绕过,但这可能在未来发生变化。)

语法

ALTER SUBSCRIPTION name CONNECTION 'conninfo'ALTER SUBSCRIPTION name SET PUBLICATION publication_name [, ...] [ WITH (set_publication_option [= value] [, ... ] ) ]ALTER SUBSCRIPTION name REFRESH PUBLICATION [ WITH ( refresh_option [= value] [, ... ] ) ]ALTER SUBSCRIPTION name ENABLEALTER SUBSCRIPTION name DISABLEALTER SUBSCRIPTION name SET ( subscription_parameter [= value] [, ... ] )ALTER SUBSCRIPTION name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }ALTER SUBSCRIPTION name RENAME TO new_name

语义

name

要修改属性的订阅的名称。

CONNECTION'conninfo'

该子句修改最初由CREATE SUBSCRIPTION设置的连接属性。

SETPUBLICATIONpublication_name

更改订阅发布的列表。参阅CREATE SUBSCRIPTION获取更多信息。默认情况下,此命令也将像REFRESHPUBLICATION一样工作。

``set_publication_option``指定了这个操作的附加选项。 支持的选项是:

refresh(boolean)

如果为false,则该命令将不会尝试刷新表信息。然后应单独执行REFRESHPUBLICATION。默认值是true

此外,可以指定REFRESHPUBLICATION下描述的刷新选项。

REFRESHPUBLICATION

从发布者获取缺少的表信息。这将开始复制自上次调用REFRESHPUBLICATION或从CREATESUBSCRIPTION以来添加到订阅发布中的表。

``refresh_option``指定了刷新操作的附加选项。 支持的选项有:

copy_data(boolean)

指定在复制启动后是否应复制正在订阅的发布中的现有数据。 默认值是true

ENABLE

启用先前禁用的订阅,在事务结束时启动逻辑复制工作。

DISABLE

禁用正在运行的订阅,在事务结束时停止逻辑复制工作。

SET(subscription_parameter[=value] [, ... ] )

该子句修改原先由CREATE SUBSCRIPTION设置的参数。 允许的选项是slot_namesynchronous_commit

new_owner

订阅的新所有者的用户名。

new_name

订阅的新名称。

示例

将订阅的发布更改为insert_only

ALTER SUBSCRIPTION mysub SET PUBLICATION insert_only;

禁用(停止)订阅:

ALTER SUBSCRIPTION mysub DISABLE;

兼容性

ALTERSUBSCRIPTION是KingbaseES 的一个扩展。

其他

参见CREATE SUBSCRIPTION,DROP SUBSCRIPTION,CREATE PUBLICATION,ALTER PUBLICATION

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。