ALTER 语句可用于更改现有数据库对象。
ALTER 语句
- 1: ALTER ACCESS POLICY
- 2: ALTER AUTHENTICATION
- 3: ALTER CA BUNDLE
- 4: ALTER DATABASE
- 5: ALTER FAULT GROUP
- 6: ALTER FUNCTION 语句
- 6.1: ALTER AGGREGATE FUNCTION
- 6.2: ALTER ANALYTIC FUNCTION
- 6.3: ALTER FILTER
- 6.4: ALTER FUNCTION (SQL)
- 6.5: ALTER FUNCTION(标量)
- 6.6: ALTER PARSER
- 6.7: ALTER SOURCE
- 6.8: ALTER TRANSFORM FUNCTION
- 7: ALTER HCATALOG SCHEMA
- 8: ALTER LIBRARY
- 9: ALTER LOAD BALANCE GROUP
- 10: ALTER MODEL
- 11: ALTER NETWORK ADDRESS
- 12: ALTER NETWORK INTERFACE
- 13: ALTER NODE
- 14: ALTER NOTIFIER
- 15: ALTER PROCEDURE(存储)
- 16: ALTER PROJECTION
- 17: ALTER PROFILE
- 18: ALTER PROFILE RENAME
- 19: ALTER RESOURCE POOL
- 20: ALTER ROLE
- 21: ALTER ROUTING RULE
- 22: ALTER SCHEMA
- 23: ALTER SEQUENCE
- 24: ALTER SUBCLUSTER
- 25: ALTER SESSION
- 26: ALTER SUBNET
- 27: ALTER TABLE
- 27.1: Table-constraint
- 27.2: 投影列编码
- 28: ALTER TLS CONFIGURATION
- 29: ALTER USER
- 30: ALTER VIEW
1 - ALTER ACCESS POLICY
对现有访问策略执行以下操作之一:
-
通过更改其表达式和启用/禁用策略来修改访问策略。
-
将访问策略从一个表复制到另一个表。
语法
修改策略:
ALTER ACCESS POLICY ON [[database.]schema.]table
{ FOR COLUMN column [ expression ] | FOR ROWS [ WHERE expression ] } { GRANT TRUSTED } { ENABLE | DISABLE }
复制政策:
ALTER ACCESS POLICY ON [[database.]schema.]table
{ FOR COLUMN column | FOR ROWS } COPY TO TABLE table;
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
表
- 包含要启用、禁用或复制的访问策略的表的名称。
-
FOR COLUMN column [expression]
- 替换之前为此列设置的访问策略表达式。从
FOR COLUMN
子句中省略 expression,以便仅启用或禁用此策略,或将其复制到其他表中。 -
FOR ROWS [WHERE expression]
- 替换之前为此表设置的行访问策略表达式。从
FOR ROWS
子句中省略WHERE expression
,以便仅启用或禁用此策略,或将其复制到另一个表。 -
GRANT TRUSTED
指定 GRANT 语句在确定用户是否可以对目标表执行 DML 操作时优先于访问策略。如果省略,则只有在访问策略允许用户查看原始未更改状态的存储数据时,用户才能修改表数据。有关详细信息,请参阅访问策略和 DML 操作。
重要
GRANT TRUSTED 仅影响 DML 操作,并且不允许用户查看访问策略将屏蔽的数据。指定此选项可能允许具有某些授权的用户更新他们无法查看的数据。ENABLE | DISABLE
- 指示在表级别启用还是禁用访问策略。
-
COPY TO TABLE tablename
- 将现有访问策略复制到指定的表。复制的访问策略包括启用/禁用和 GRANT TRUSTED 状态。
需要满足以下要求:
-
复制列访问策略:
-
目标表必须包含相同名称和兼容数据类型的列。
-
目标列不得包含访问策略。
-
-
复制行访问策略:目标表不得包含访问策略。
-
特权
修改访问策略
非超级用户:表的所有权
复制访问策略
非超级用户:源表和目标表的所有权
示例
请参阅 管理访问策略
另请参阅
CREATE ACCESS POLICY2 - ALTER AUTHENTICATION
修改指定身份验证方法的设置。
语法
ALTER AUTHENTICATION auth_record {
| { ENABLE | DISABLE }
| { LOCAL | HOST [ { TLS | NO TLS } ] host_ip_address }
| RENAME TO new_auth_record_name
| METHOD value
| SET param=value[,...]
| PRIORITY value
| [ [ NO ] FALLTHROUGH ]
}
参数
特权
超级用户
示例
启用和禁用身份验证方法
本示例使用 ALTER AUTHENTICATION 禁用了 v_ldap
身份验证方法,然后再次启用了它:
=> ALTER AUTHENTICATION v_ldap DISABLE;
=> ALTER AUTHENTICATION v_ldap ENABLE;
重命名身份验证方法
以下示例将 v_kerberos
身份验证方法重命名为 K5
。所有被授予 v_kerberos
身份验证方法的用户现在都改为授予了 K5
方法。
=> ALTER AUTHENTICATION v_kerberos RENAME TO K5;
修改身份验证参数
本示例将 ident1
身份验证的系统用户设置为 user1
:
=> CREATE AUTHENTICATION ident1 METHOD 'ident' LOCAL;
=> ALTER AUTHENTICATION ident1 SET system_users='user1';
在使用 ALTER AUTHENTICATION 设置或修改 LDAP 或 Ident 参数时,Vertica 会对这些参数进行验证。
本示例将更改 IP 地址并为名为 Ldap1
. 的 LDAP 身份验证方法指定参数。为 LDAP 服务器指定捆绑参数。Vertica 将连接到对数据库客户端进行身份验证的 LDAP 服务器。如果身份验证成功,Vertica 将在指定 LDAP 服务器上对被关联到(被授予)Ldap1
身份验证方法的任何用户进行身份验证:
=> CREATE AUTHENTICATION Ldap1 METHOD 'ldap' HOST '172.16.65.196';
=> ALTER AUTHENTICATION Ldap1 SET host='ldap://172.16.65.177',
binddn_prefix='cn=', binddn_suffix=',dc=qa_domain,dc=com';
下一个示例将为名为 Ldap2
的 LDAP 身份验证方法指定参数。指定 LDAP 搜索和捆绑参数。有时 Vertica 没有足够的信息为尝试进行身份验证的用户创建可分辨名称 (Distinguished Name, DN)。在这种情况下,必须指定使用 LDAP 搜索和捆绑:
=> CREATE AUTHENTICATION Ldap2 METHOD 'ldap' HOST '172.16.65.196';
=> ALTER AUTHENTICATION Ldap2 SET basedn='dc=qa_domain,dc=com',
binddn='cn=Manager,dc=qa_domain,
dc=com',search_attribute='cn',bind_password='secret';
更改身份验证方法
本示例将 localpwd
身份验证从 hash 更改为trust:
=> CREATE AUTHENTICATION localpwd METHOD 'hash' LOCAL;
=> ALTER AUTHENTICATION localpwd METHOD 'trust';
设置多领域
此示例为身份验证方法 krb_local 设置了其他领域:
=> ALTER AUTHENTICATION krb_local set realm = 'COMPANY.COM';
另请参阅
3 - ALTER CA BUNDLE
添加证书、从证书颁发机构 (CA) 捆绑包中移除证书或更改证书颁发机构 (CA) 捆绑包的所有者。
语法
ALTER CA BUNDLE name
[ADD CERTIFICATES ca_cert[, ca_cert[, ...]]
[REMOVE CERTIFICATES ca_cert[, ca_cert[, ...]]
[OWNER TO user]
参数
name
- CA 捆绑包的名称。
ca_cert
- 要添加或从捆绑包中移除的 CA 证书的名称。
user
- 数据库用户的名称。
特权
CA 捆绑包的所有权。
示例
请参阅管理 CA 捆绑包。
另请参阅
4 - ALTER DATABASE
使用 ALTER DATABASE 可执行以下任务:
要查看参数的当前值,请查询系统表 CONFIGURATION_PARAMETERS 或使用 SHOW DATABASE。
语法
ALTER DATABASE db-spec {
DROP ALL FAULT GROUP
| EXPORT ON { subnet‑name | DEFAULT }
| RESET STANDBY
| SET [PARAMETER] parameter=value [,...]
| CLEAR [PARAMETER] parameter[,...]
}
参数
- db-spec
- 指定要更改的数据库,为以下之一:
-
数据库名称
-
DEFAULT
:当前数据库
-
DROP ALL FAULT GROUP
- 删除所有容错组(在指定数据库上定义)。
EXPORT ON
- 指定用于导入和导出数据的网络,为以下之一:
-
subnet‑name:公用网络的子网。
-
DEFAULT
:指定使用专用网络。
有关详细信息,请参阅识别用于导入/导出的数据库或节点和更改节点导出地址。
-
RESET STANDBY
- 仅限 Enterprise 模式,还原所有不活动节点并恢复替换节点至待机状态。如果任何被替换节点无法恢复活动,Vertica 会将备用节点留在适当位置。
SET [PARAMETER]
- 设置指定参数。
CLEAR [PARAMETER]
- 将指定参数重置为其默认值。
特权
超级用户
5 - ALTER FAULT GROUP
修改现有容错组。例如,使用 ALTER FAULT GROUP
语句执行以下操作:
-
向现有容错组添加节点或从中删除节点
-
向父容错组添加子容错组或从中删除子容错组
-
重命名容错组
语法
ALTER FAULT GROUP fault-group-name {
| ADD NODE node-name
| DROP NODE node-name
| ADD FAULT GROUP child-fault-group-name
| DROP FAULT GROUP child-fault-group-name
| RENAME TO new-fault-group-name }
参数
fault-group-name
- 要修改的现有容错组名称。
提示
有关在群集中定义的所有容错组的列表,请查询 FAULT_GROUPS 系统表。 node-name
- 要向现有(父)容错组添加或从中删除的节点的名称。
child-fault-group-name
- 要向现有父容错组添加或从中移除的子容错组的名称。
new-fault-group-name
- 要重命名的容错组的新名称。
特权
超级用户
示例
此示例显示了如何将 parent0
容错组重命名为 parent100
:
=> ALTER FAULT GROUP parent0 RENAME TO parent100;
ALTER FAULT GROUP
通过查询 FAULT_GROUPS 系统表来验证更改:
=> SELECT member_name FROM fault_groups;
member_name
----------------------
v_exampledb_node0003
parent100
mygroup
(3 rows)
另请参阅
6 - ALTER FUNCTION 语句
Vertica 为每种类型的用户定义的扩展 提供了 ALTER 语句。每个 ALTER 语句都会修改 Vertica 编录中用户定义的函数的元数据:
Vertica 还提供ALTER FUNCTION (SQL),可修改用户定义的 SQL 函数的元数据。
6.1 - ALTER AGGREGATE FUNCTION
更改用户定义的聚合函数。
语法
ALTER AGGREGATE FUNCTION [[db-name.]schema.]function‑name( [ parameter‑list ] ) {
OWNER TO new‑owner
| RENAME TO new‑name
| SET SCHEMA new‑schema
}
参数
-
[db-name.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
function‑name
- 要更改的 SQL 函数的名称。
-
arg‑list
- 为此函数定义的参数的逗号分隔列表。如果无列表,请指定一个空列表。
注意
Vertica 支持函数过载,并使用参数列表标识要更改的函数。 -
OWNER TO new‑owner
- 将函数所有权转移给其他用户。
-
RENAME TO new‑name
- 重命名此函数。
-
SET SCHEMA new‑schema
- 将函数移动到其他架构。
特权
非超级用户:对架构的 USAGE 权限,为以下之一:
-
函数所有者
-
对函数的 ALTER 权限
对于某些操作,非超级用户还必须具备以下架构权限:
另请参阅
CREATE AGGREGATE FUNCTION6.2 - ALTER ANALYTIC FUNCTION
更改用户定义的分析函数。
语法
ALTER ANALYTIC FUNCTION [[db-name.]schema.]function‑name( [ parameter‑list ] ) {
OWNER TO new‑owner
| RENAME TO new‑name
| SET FENCED boolean‑expr
| SET SCHEMA new‑schema
}
-
[db-name.]schema
- 数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。 -
function‑name
- 要更改的函数的名称。
-
parameter‑list
- 为此函数定义的参数的逗号分隔列表。如果无列表,请指定一个空列表。
注意
Vertica 支持函数过载,并使用参数列表标识要更改的函数。 -
OWNER TO new‑owner
- 将函数所有权转移给其他用户。
-
RENAME TO new‑name
- 重命名此函数。
SET FENCED { true | false }
- 指定是否为此函数启用隔离模式。
-
SET SCHEMA new‑schema
- 将函数移动到其他架构。
权限
非超级用户:对架构的 USAGE 权限,为以下之一:
-
函数所有者
-
对函数的 ALTER 权限
对于某些操作,非超级用户还必须具备以下架构权限:
另请参阅
CREATE ANALYTIC FUNCTION6.3 - ALTER FILTER
更改用户定义的筛选器。
语法
ALTER FILTER [[db-name.]schema.]function‑name( [ parameter‑list ] ) {
OWNER TO new‑owner
| RENAME TO new‑name
| SET FENCED boolean‑expr
| SET SCHEMA new‑schema
}
-
[db-name.]schema
- 数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。 -
function‑name
- 要更改的函数的名称。
-
parameter‑list
- 为此函数定义的参数的逗号分隔列表。如果无列表,请指定一个空列表。
注意
Vertica 支持函数过载,并使用参数列表标识要更改的函数。 -
OWNER TO new‑owner
- 将函数所有权转移给其他用户。
-
RENAME TO new‑name
- 重命名此函数。
SET FENCED { true | false }
- 指定是否为此函数启用隔离模式。
-
SET SCHEMA new‑schema
- 将函数移动到其他架构。
权限
非超级用户:对架构的 USAGE 权限,为以下之一:
-
函数所有者
-
对函数的 ALTER 权限
对于某些操作,非超级用户还必须具备以下架构权限:
另请参阅
CREATE FILTER6.4 - ALTER FUNCTION (SQL)
更改用户定义的 SQL 函数。
语法
ALTER FUNCTION [[db-name.]schema.]function‑name( [arg‑list] ) {
OWNER TO new‑owner
| RENAME TO new‑name
| SET SCHEMA new‑schema
}
参数
-
[db-name.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
function‑name
- 要更改的 SQL 函数的名称。
- arg‑list
- 函数实参名称的逗号分隔列表。如果无列表,请指定一个空列表。
-
OWNER TO new‑owner
- 将函数所有权转移给其他用户。
-
RENAME TO new‑name
- 重命名此函数。
-
SET SCHEMA new‑schema
- 将函数移动到其他架构。
特权
非超级用户:对架构的 USAGE 权限,为以下之一:
-
函数所有者
-
对函数的 ALTER 权限
对于某些操作,非超级用户还必须具备以下架构权限:
示例
将函数 SQL_one
重命名为 SQL_two
:
=> ALTER FUNCTION SQL_one (int, int) RENAME TO SQL_two;
将函数 SQL_two
移动到架构 macros
:
=> ALTER FUNCTION SQL_two (int, int) SET SCHEMA macros;
重新分配 SQL_two
的所有权:
=> ALTER FUNCTION SQL_two (int, int) OWNER TO user1;
另请参阅
6.5 - ALTER FUNCTION(标量)
更改用户定义的标量函数。
语法
ALTER FUNCTION [[db-name.]schema.]function‑name( [ parameter‑list] ) {
OWNER TO new‑owner
| RENAME TO new‑name
| SET FENCED boolean‑expr
| SET SCHEMA new‑schema
}
-
[db-name.]schema
- 数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。 -
function‑name
- 要更改的函数的名称。
-
parameter‑list
- 为此函数定义的参数的逗号分隔列表。如果无列表,请指定一个空列表。
注意
Vertica 支持函数过载,并使用参数列表标识要更改的函数。 -
OWNER TO new‑owner
- 将函数所有权转移给其他用户。
-
RENAME TO new‑name
- 重命名此函数。
SET FENCED { true | false }
- 指定是否为此函数启用隔离模式。
-
SET SCHEMA new‑schema
- 将函数移动到其他架构。
权限
非超级用户:对架构的 USAGE 权限,为以下之一:
-
函数所有者
-
对函数的 ALTER 权限
对于某些操作,非超级用户还必须具备以下架构权限:
示例
将函数 UDF_one
重命名为 UDF_two
:
=> ALTER FUNCTION UDF_one (int, int) RENAME TO UDF_two;
将函数 UDF_two
移动到架构 macros
:
=> ALTER FUNCTION UDF_two (int, int) SET SCHEMA macros;
禁用函数 UDF_two
的隔离模式:
=> ALTER FUNCTION UDF_two (int, int) SET FENCED false;
另请参阅
CREATE FUNCTION(标量)6.6 - ALTER PARSER
更改用户定义的解析器。
语法
ALTER PARSER [[db-name.]schema.]function‑name( [ parameter‑list ] ) {
OWNER TO new‑owner
| RENAME TO new‑name
| SET FENCED boolean‑expr
| SET SCHEMA new‑schema
}
-
[db-name.]schema
- 数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。 -
function‑name
- 要更改的函数的名称。
-
parameter‑list
- 为此函数定义的参数的逗号分隔列表。如果无列表,请指定一个空列表。
注意
Vertica 支持函数过载,并使用参数列表标识要更改的函数。 -
OWNER TO new‑owner
- 将函数所有权转移给其他用户。
-
RENAME TO new‑name
- 重命名此函数。
SET FENCED { true | false }
- 指定是否为此函数启用隔离模式。
-
SET SCHEMA new‑schema
- 将函数移动到其他架构。
权限
非超级用户:对架构的 USAGE 权限,为以下之一:
-
函数所有者
-
对函数的 ALTER 权限
对于某些操作,非超级用户还必须具备以下架构权限:
另请参阅
CREATE PARSER6.7 - ALTER SOURCE
更改用户定义的加载源函数。
语法
ALTER SOURCE [[db-name.]schema.]function‑name( [ parameter‑list ] ) {
OWNER TO new‑owner
| RENAME TO new‑name
| SET FENCED boolean‑expr
| SET SCHEMA new‑schema
}
-
[db-name.]schema
- 数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。 -
function‑name
- 要更改的函数的名称。
-
parameter‑list
- 为此函数定义的参数的逗号分隔列表。如果无列表,请指定一个空列表。
注意
Vertica 支持函数过载,并使用参数列表标识要更改的函数。 -
OWNER TO new‑owner
- 将函数所有权转移给其他用户。
-
RENAME TO new‑name
- 重命名此函数。
SET FENCED { true | false }
- 指定是否为此函数启用隔离模式。
-
SET SCHEMA new‑schema
- 将函数移动到其他架构。
权限
非超级用户:对架构的 USAGE 权限,为以下之一:
-
函数所有者
-
对函数的 ALTER 权限
对于某些操作,非超级用户还必须具备以下架构权限:
另请参阅
CREATE SOURCE6.8 - ALTER TRANSFORM FUNCTION
更改用户定义的转换函数。
语法
ALTER TRANSFORM FUNCTION [[db-name.]schema.]function-name( [ parameter-list ] ) {
OWNER TO new-owner
| RENAME TO new-name
| SET FENCED { true | false }
| SET SCHEMA new-schema
}
-
[db-name.]schema
- 数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。 -
function‑name
- 要更改的函数的名称。
-
parameter‑list
- 为此函数定义的参数的逗号分隔列表。如果无列表,请指定一个空列表。
注意
Vertica 支持函数过载,并使用参数列表标识要更改的函数。 -
OWNER TO new‑owner
- 将函数所有权转移给其他用户。
-
RENAME TO new‑name
- 重命名此函数。
SET FENCED { true | false }
- 指定是否为此函数启用隔离模式。
-
SET SCHEMA new‑schema
- 将函数移动到其他架构。
权限
非超级用户:对架构的 USAGE 权限,为以下之一:
-
函数所有者
-
对函数的 ALTER 权限
对于某些操作,非超级用户还必须具备以下架构权限:
另请参阅
CREATE TRANSFORM FUNCTION7 - ALTER HCATALOG SCHEMA
更改使用 CREATE HCATALOG SCHEMA 创建的架构上的参数值。HCatalog 连接器使用 HCatalog 架构访问存储在 Hive 数据仓库中的数据。有关详细信息,请参阅使用 HCatalog 连接器。
某些参数在创建后无法更改。如果需要更改其中一个值,请删除并重新创建架构。您可以使用 ALTER HCATALOG SCHEMA 更改以下参数:
-
HOSTNAME
-
PORT
-
HIVESERVER2_HOSTNAME
-
WEBSERVICE_HOSTNAME
-
WEBSERVICE_PORT
-
WEBHDFS_ADDRESS
-
HCATALOG_CONNECTION_TIMEOUT
-
HCATALOG_SLOW_TRANSFER_LIMIT
-
HCATALOG_SLOW_TRANSFER_TIME
-
SSL_CONFIG
-
CUSTOM_PARTITIONS
语法
ALTER HCATALOG SCHEMA schema-name SET [param=value]+;
参数
- schema‑name
- Vertica 编录中要更改的架构名称。Hive 数据库中的表通过此架构提供。
- param
- 要更改的参数的名称。
- value
- 参数的新值。必须指定值;此语句不会从类似
CREATE HCATALOG SCHEMA
的配置文件中读取默认值。
特权
以下几项之一:
-
超级用户
-
架构所有者
示例
以下示例显示了如何更改 "hcat" 架构的 Hive 元存储主机名和端口。在此示例中,Hive 使用高可用性元存储。
=> ALTER HCATALOG SCHEMA hcat SET HOSTNAME='thrift://ms1.example.com:9083,thrift://ms2.example.com:9083';
以下示例显示了尝试设置不可更改的参数时收到的错误。
=> ALTER HCATALOG SCHEMA hcat SET HCATALOG_USER='admin';
ERROR 4856: Syntax error at or near "HCATALOG_USER" at character 39
8 - ALTER LIBRARY
替换当前与 Vertica 编录中的 UDx 库关联的库文件。Vertica 自动将更新文件的副本分发到所有群集节点。编录中定义的引用更新库的 UDx 将自动开始使用更新库文件。如果名称和签名匹配,则视为 UDx 相同。
当前库和替换库必须使用同一种语言编写。
当心
如果原始库中存在的某个 UDx 函数在更新后的库中不存在,则会自动将其删除。如果正在使用该函数,可能会导致数据丢失,例如,如果表依赖它填充列。语法
ALTER LIBRARY [[database.]schema.]name [DEPENDS 'depends-path'] AS 'path';
参数
- 架构
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。- name
- 使用 CREATE LIBRARY 创建的现有库的名称。
-
DEPENDS 'depends-path'
此库所依赖的文件或库,启动程序节点的文件系统或其他受支持的文件系统或对象存储中的一个或多个文件或目录。对于目录,路径条目以斜杠 (
/
) 结束,后跟通配符 (*
)(可选)。要指定多个文件,请使用冒号 (:
) 分隔条目。如果任何路径条目包含冒号(例如 URI),请在整个 DEPENDS 路径两端加上括号,且单个路径元素使用双引号,如下例所示:
DEPENDS '["s3://mybucket/gson-2.3.1.jar"]'
要指定具有多个目录级别的库,请参阅多级库依赖项。
DEPENDS 对使用 R 编写的库没有影响。R 软件包必须本地安装在每个节点上,包括外部依赖项。
重要
CREATE LIBRARY 的性能在 Eon 模式下会降低,这与 DEPENDS 子句指定的依赖关系的数量和深度成正比。-
AS path
- 替换库文件在启动程序节点文件系统上的绝对路径。
特权
超级用户,或者架构上的 UDXDEVELOPER 和 CREATE。非超级用户必须明确启用 UDXDEVELOPER 角色。有关示例,请参阅 CREATE LIBRARY。
如果 DEPENDS 子句指定具有多个目录级别的库,Vertica 将按照库路径包含该库的所有子目录。例如,以下 CREATE LIBRARY 语句使 UDx 库 mylib
能够导入它在 site‑packages
的子目录中找到的所有 Python 包和模块:
=> CREATE LIBRARY mylib AS '/path/to/python_udx' DEPENDS '/path/to/python/site-packages' LANGUAGE 'Python';
重要
DEPENDS 可以指定深度达 100 级的 Java 库依赖项。示例
此示例显示了如何使用新文件更新名为 myFunctions
的已定义库。
=> ALTER LIBRARY myFunctions AS '/home/dbadmin/my_new_functions.so';
另请参阅
开发用户定义的扩展 (UDx)9 - ALTER LOAD BALANCE GROUP
更改负载均衡组的配置。
语法
ALTER LOAD BALANCE GROUP group-name {
RENAME TO new-name |
SET FILTER TO 'ip-cidr-addr' |
SET POLICY TO 'policy' |
ADD {ADDRESS | FAULT GROUP | SUBCLUSTER} add-list |
DROP {ADDRESS | FAULT GROUP | SUBCLUSTER} drop-list
}
参数
-
group-name
- 要更改的现有负载均衡组的名称。
-
RENAME TO new-name
- 将组重命名为 new-name。
-
SET FILTER TO 'ip-cidr-addr'
- 用于替换现有 IP 地址筛选器的 IPv4 或 IPv6 CIDR,该筛选器选择将容错组或子群集的哪些成员包括在负载均衡组中。此设置仅在负载均衡组包含容错组或子群集时有效。
-
SET POLICY TO 'policy'
- 更改负载均衡组为传入连接选择目标节点所使用的策略。可为以下之一:
-
ROUNDROBIN
-
RANDOM
-
NONE
有关详细信息,请参阅CREATE LOAD BALANCE GROUP。
-
ADD {ADDRESS | FAULT GROUP | SUBCLUSTER }
- 将指定类型的对象添加到负载均衡组。负载均衡组只能包含一种类型的对象。例如,如果使用地址列表创建负载均衡组,则只能添加附加地址,而不能添加容错组或子群集。
-
add-list
- 要添加到容错组的对象(地址、容错组或子群集)的逗号分隔列表。
DROP {ADDRESS | FAULT GROUP | SUBCLUSTER}
- 从负载均衡组(地址、容错组或子群集)中移除指定类型的对象。对象类型必须与负载均衡组中已有的对象的类型相匹配。
-
drop-list
- 要从负载均衡组中移除的对象的列表。
特权
超级用户示例
从名为 group_2 的负载均衡组中移除地址。
=> SELECT * FROM LOAD_BALANCE_GROUPS;
name | policy | filter | type | object_name
---------+------------+--------+-----------------------+-------------
group_1 | ROUNDROBIN | | Network Address Group | node01
group_1 | ROUNDROBIN | | Network Address Group | node02
group_2 | ROUNDROBIN | | Network Address Group | node03
(3 rows)
=> ALTER LOAD BALANCE GROUP group_2 DROP ADDRESS node03;
ALTER LOAD BALANCE GROUP
=> SELECT * FROM LOAD_BALANCE_GROUPS;
name | policy | filter | type | object_name
---------+------------+--------+-----------------------+-------------
group_1 | ROUNDROBIN | | Network Address Group | node01
group_1 | ROUNDROBIN | | Network Address Group | node02
group_2 | ROUNDROBIN | | Empty Group |
(3 rows)
以下示例向名为 group_2 的组中添加了三个网络地址:
=> ALTER LOAD BALANCE GROUP group_2 ADD ADDRESS node01,node02,node03;
ALTER LOAD BALANCE GROUP
=> SELECT * FROM load_balance_groups WHERE name = 'group_2';
-[ RECORD 1 ]----------------------
name | group_2
policy | ROUNDROBIN
filter |
type | Network Address Group
object_name | node01
-[ RECORD 2 ]----------------------
name | group_2
policy | ROUNDROBIN
filter |
type | Network Address Group
object_name | node02
-[ RECORD 3 ]----------------------
name | group_2
policy | ROUNDROBIN
filter |
type | Network Address Group
object_name | node03
另请参阅
10 - ALTER MODEL
允许用户重命名现有模型、更改所有权或将其移动到其他架构。
语法
ALTER MODEL [[database.]schema.]model
{ OWNER TO owner
| RENAME TO new‑name
| SET SCHEMA schema
}
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。model
- 标识要更改的模型。
-
OWNER TO owner
- 将此模型的所有权重新分配给 owner。如果为非超级用户,则必须是当前所有者。
RENAME TO
- 重命名模式,其中 new‑name 符合标识符中描述的约定。 同一架构中的序列、表、投影、视图和模型中也必须是唯一的。
-
SET SCHEMA schema
- 将模型从一个架构移动到另一个架构。
特权
非超级用户:对架构的 USAGE 权限,为以下之一:
-
模型所有者
-
对模型的 ALTER 权限
对于某些操作,非超级用户必须具备以下架构权限:
示例
请参阅更改模型。
11 - ALTER NETWORK ADDRESS
更改现有网络地址的配置。
语法
ALTER NETWORK ADDRESS name {
RENAME TO new-name
| SET TO 'ip-addr' [PORT port-number]
| { ENABLE | DISABLE }
}
参数
-
name
- 要更改的现有网络地址的名称。
-
RENAME TO new-name
- 将网络地址重命名为 new-name。此名称更改不会影响网络地址在负载均衡组中的成员身份。
-
SET TO 'ip-addr'
- 更改为网络地址分配的 IP 地址。
-
PORT port-number
- 设置网络地址的端口号。更改端口号时必须提供网络地址。
ENABLE | DISABLE
- 启用或禁用网络地址。
示例
将网络地址从 test_addr
重命名为 alt_node1
,然后将其 IP 地址更改为 192.168.1.200
,端口号为 4000
:
=> ALTER NETWORK ADDRESS test_addr RENAME TO alt_node1;
ALTER NETWORK ADDRESS
=> ALTER NETWORK ADDRESS alt_node1 SET TO '192.168.1.200' PORT 4000;
ALTER NETWORK ADDRESS
另请参阅
12 - ALTER NETWORK INTERFACE
已弃用
此语句已被弃用。请改用 ALTER NETWORK ADDRESS。重命名网络接口。
语法
ALTER NETWORK INTERFACE network-interface-name RENAME TO new-network-interface-name
参数
-
network-interface-name
- 现有网络接口的名称。
-
new-network-interface-name
- 网络接口的新名称。
特权
超级用户
示例
重命名网络接口:
=> ALTER NETWORK INTERFACE myNetwork RENAME TO myNewNetwork;
13 - ALTER NODE
设置和清除指定节点上的节点级别配置参数。ALTER NODE 还执行以下管理任务:
-
更改节点类型。
-
指定用于导入和导出的各个节点上公用网络的网络接口。
-
替换故障节点。
有关移除节点的信息,请参阅
语法
ALTER NODE node‑name {
EXPORT ON { network‑interface | DEFAULT }
| [IS] node‑type
| REPLACE [ WITH standby‑node ]
| RESET
| SET [PARAMETER] parameter=value[,...]
| CLEAR [PARAMETER] parameter[,...]
}
参数
- node‑name
- 要更改的节点的名称。
-
[IS] node‑type
- 更改节点类型,其中 node‑type 为以下之一:
-
PERMANENT:(默认值):存储数据的节点。
-
EPHEMERAL:从一种类型转换到另一种类型的节点——通常是从 PERMANENT 到 STANDBY 或 EXECUTE。
-
STANDBY:保留以在任何节点发生故障时替换该节点的节点。备用节点不存储段或数据,直到它被调用以替换故障节点。当用作替换节点时,Vertica 将其类型更改为 PERMANENT。有关详细信息,请参阅活动备用节点。
-
EXECUTE:该节点仅为计算目的而保留。执行节点不包含段或数据。
注意
仅 Enterprise 模式支持 STANDBY 和 EXECUTE 节点类型。 -
EXPORT ON
- 指定用于导入和导出数据的网络,为以下之一:
-
network‑interface:公用网络的网络接口名称。
-
DEFAULT
:使用公用网络的默认网络接口,通过ALTER DATABASE
指定。
-
-
REPLACE [WITH standby‑node]
- 仅限 Enterprise 模式,将指定节点替换为可用的活动的备用节点。如果省略
WITH
子句,Vertica 会尝试从与故障节点相同的容错组中查找替换节点。如果指定的节点未发生故障,Vertica 将忽略此语句。
RESET
- 仅限 Enterprise 模式,恢复指定的故障节点并使其替换节点返回到备用状态。如果故障节点无法恢复活动,Vertica 将忽略此语句并将备用节点留在原处。
SET [PARAMETER]
- 在节点级别将一个或多个配置参数设置为指定值。
CLEAR [PARAMETER]
- 清除一个或多个指定配置参数。
特权
超级用户
示例
指定使用 v_vmart_node0001
上公用网络的默认网络接口进行导入/导出操作:
=> ALTER NODE v_vmart_node0001 EXPORT ON DEFAULT;
将故障节点 v_vmart_node0001
替换为活动的备用节点,然后还原故障节点:
=> ALTER NODE v_vmart_node0001 REPLACE WITH standby1;
...
=> ALTER NODE v_vmart_node0001 RESET;
设置和清除配置参数 MaxClientSessions
:
=> ALTER NODE v_vmart_node0001 SET MaxClientSessions = 0;
...
=> ALTER NODE v_vmart_node0001 CLEAR MaxClientSessions;
将节点类型设置为 EPHEMERAL
:
=> ALTER NODE v_vmart_node0001 IS EPHEMERAL;
14 - ALTER NOTIFIER
更新现有通知程序。
注意
要更改与现有标识符关联的操作 URL,请 删除通知程序并重新创建。语法
ALTER NOTIFIER notifier‑name
[ ENABLE | DISABLE ]
[ MAXPAYLOAD 'max‑payload‑size' ]
[ MAXMEMORYSIZE 'max‑memory‑size' ]
[ TLSMODE 'tls‑mode' ]
[ CA BUNDLE bundle‑name [ CERTIFICATE certificate‑name ] ]
[ IDENTIFIED BY 'uuid' ]
[ [NO] CHECK COMMITTED ]
[ PARAMETERS 'adapter‑params' ]
参数
- notifier‑name
- 指定要更新的通知程序。
[NO] CHECK COMMITTED
- 指定在发送队列中的下一条消息之前等待传递确认。并非所有消息传递系统都支持传递确认。
ENABLE | DISABLE
- 指定启用还是禁用通知程序。
MAXPAYLOAD
- 消息的最大大小,最大为 2 TB,以 KB、MB、GB 或 TB 为单位指定,如下所示:
MAXPAYLOAD integer{K|M|G|T}
默认设置特定于适配器,例如 Kafka 为 1 M。
对此参数的更改,在通知程序后禁用并重新启用或在数据库重新启动后生效。
MAXMEMORYSIZE
- 内部通知程序的最大大小,最大为 2 TB,以 KB、MB、GB 或 TB 为单位指定,如下所示:
MAXMEMORYSIZE integer{K|M|G|T}
如果队列超过此大小,通知程序将删除多余的消息。
-
TLSMODE 'tls‑mode'
指定通知程序和端点之间的连接类型,可以是以下类型之一:
-
disable
(默认值):明文连接。 -
verify-ca
:加密连接,且服务器的证书已经验证为由受信任的 CA 签名。
如果通知程序
ACTION
为'syslog'
,则该参数无效;您必须为 TLS 配置 syslog 才能为这些 Vertica syslog 通知程序启用加密。-
-
CA BUNDLE bundle‑name
指定 CA 捆绑包。如果
TLSMODE
需要,捆绑包中的证书可用于验证 Kafka 服务器的证书。如果为当前使用
disable
的通知程序指定了 CA 捆绑包,而不会验证 Kafka 服务器的证书,则在连接到 Kafka 服务器时,将不使用该捆绑包。除非将TLSMODE
更改为验证服务器证书行为,否则此行为会持续存在。对 CA 捆绑包内容的更改,在通知程序后禁用并重新启用或在数据库重新启动后生效。但是,对通知程序所用的 CA 捆绑包的更改会立即生效。
如果通知程序
ACTION
为'syslog'
,则该参数无效;您必须为 TLS 配置 syslog 才能为这些 Vertica syslog 通知程序启用加密。-
CERTIFICATE certificate‑name
指定一个供端点验证的客户端证书。
如果通知程序
ACTION
为'syslog'
,则该参数无效;您必须为 TLS 配置 syslog 才能为这些 Vertica syslog 通知程序启用加密。-
IDENTIFIED BY 'uuid'
- 指定通知程序的唯一标识符。如果设置,则此通知程序发布的所有消息都具有此属性。
-
PARAMETERS 'adapter‑params'
- 指定以字符串形式传递给适配器的一个或多个可选适配器参数。适配器参数仅适用于与通知程序关联的适配器。
对此参数的更改,在通知程序后禁用并重新启用或在数据库重新启动后生效。
对于 Kafka 通知程序,请参阅 Kafka 和 Vertica 配置设置。
特权
超级用户
SASL_SSL Kafka 配置的加密通知程序
按照此步骤,为使用 SASL_SSL 的 Kafka 端点创建或更改通知程序。请注意,每当您更改给定通知程序的 TLSMODE、证书或 CA 捆绑包时,都必须重复此步骤。
-
在设置 TLSMODE、证书和 CA 捆绑包时,使用 CREATE 或 ALTER 以禁用通知程序。
=> ALTER NOTIFIER encrypted_notifier DISABLE TLSMODE 'verify-ca' CA BUNDLE ca_bundle2;
-
更改通知程序并为 SASL_SSL 设置适合的 rdkafka 适配器参数。
=> ALTER NOTIFIER encrypted_notifier PARAMETERS 'sasl.username=user;sasl.password=password;sasl.mechanism=PLAIN;security.protocol=SASL_SSL';
-
启用通知程序。
=> ALTER NOTIFIER encrypted_notifier ENABLE;
示例
更新现有通知程序的设置:
=> ALTER NOTIFIER my_dc_notifier
ENABLE
MAXMEMORYSIZE '2G'
IDENTIFIED BY 'f8b0278a-3282-4e1a-9c86-e0f3f042a971'
CHECK COMMITTED;
更改 TLSMODE
并将 CA 捆绑包和证书添加到现有通知程序。此通知程序连接到 Kafka 服务器的证书,并验证其是否由受信任的 CA 签名。
=> ALTER NOTIFIER my_notifier
TLSMODE 'verify-ca'
CA BUNDLE ca_bundle
CERTIFICATE client_cert;
另请参阅
15 - ALTER PROCEDURE(存储)
语法
ALTER PROCEDURE procedure ( [ [ parameter_mode ] [ parameter ] parameter_type [, ...] ] )
[ SECURITY { INVOKER | DEFINER }
| RENAME TO new_procedure_name
| OWNER TO new_owner
| SET SCHEMA new_schema
| SOURCE TO new_source
]
参数
- 过程
- 要更改的过程。
- parameter_mode
- 存储过程的 IN 参数。
- parameter
- 参数的名称。
- parameter_type
- 参数的类型。
SECURITY { INVOKER | DEFINER }
- 指定是否以调用者或过程定义者(所有者)的权限执行过程。
有关详细信息,请参阅执行存储过程。
-
RENAME TO new_procedure_name
- 过程的新名称。
-
OWNER TO new_owner
- 过程的新所有者(定义者)。
-
SET SCHEMA new_schema
- 过程的新架构。
-
SOURCE TO new_source
- 新的过程源代码。有关详细信息,请参阅范围和结构。
特权
OWNER TO
超级用户
RENAME
和 SCHEMA TO
非超级用户:
-
对过程架构的 CREATE 权限
-
过程的所有权
其他操作
非超级用户:过程的所有权
示例
请参阅更改存储过程。
16 - ALTER PROJECTION
更改指定投影的 DDL。
语法
ALTER PROJECTION [[database.]schema.]projection
{ RENAME TO new‑name | ON PARTITION RANGE BETWEEN min-val AND max-val }
参数
-
架构
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
projection
- 要更改的投影,其中 projection 可以为以下之一:
-
投影基本名称:重命名共享此基本名称的所有投影。
-
投影名称:重命名指定投影及其基本名称。如果投影是分段的,则其伙伴实例不受此更改的影响。
有关投影名称约定,请参阅投影命名。
-
-
new‑name
- 新的投影名称。
ON PARTITION RANGE
-
注意
仅对使用分区范围创建的投影有效。指定将此投影的数据限制在分区键范围内,指定如下:
ON PARTITION RANGE BETWEEN min-range-value AND max-range-value
以下要求适用于 min‑range‑value 和 ≤ max‑range‑value:
-
Min‑range‑value 必须 ≤ max‑range‑value
-
它们必须解析为与表分区表达式兼容的数据类型。
-
它们可以是:
-
字符串字面量。例如,
2021-07-31
-
具有稳定或不可变函数的表达式,例如:
date_trunc('month', now()::timestamp - interval'1 month')
-
max-range-value 可以设置为 NULL,以指定分区范围没有上限。
如果新的键范围超出之前的范围,Vertica 将发出警告,指出投影已过期,必须刷新才能使用。
有关其他要求和使用详细信息,请参阅分区范围投影。
-
特权
非超级用户权限、对架构的 CREATE 和 USAGE 权限以及以下锚表权限之一:
-
表所有者
-
ALTER 权限
-
SELECT 权限(仅当定义了分区范围投影时)
示例
=> SELECT export_tables('','public.store_orders');
export_tables
---------------------------------------------
CREATE TABLE public.store_orders
(
order_no int,
order_date timestamp NOT NULL,
shipper varchar(20),
ship_date date NOT NULL
);
(1 row)
=> CREATE PROJECTION store_orders_p AS SELECT * from store_orders;
CREATE PROJECTION
=> ALTER PROJECTION store_orders_p RENAME to store_orders_new;
ALTER PROJECTION
另请参阅
CREATE PROJECTION
17 - ALTER PROFILE
更改配置文件。未在配置文件中设置的所有参数都从默认配置文件继承其设置。可以使用 ALTER PROFILE
更改默认配置文件。
语法
ALTER PROFILE name LIMIT [
PASSWORD_LIFE_TIME setting
PASSWORD_MIN_LIFE_TIME setting
PASSWORD_GRACE_TIME setting
FAILED_LOGIN_ATTEMPTS setting
PASSWORD_LOCK_TIME setting
PASSWORD_REUSE_MAX setting
PASSWORD_REUSE_TIME setting
PASSWORD_MAX_LENGTH setting
PASSWORD_MIN_LENGTH setting
PASSWORD_MIN_LETTERS setting
PASSWORD_MIN_UPPERCASE_LETTERS setting
PASSWORD_MIN_LOWERCASE_LETTERS setting
PASSWORD_MIN_DIGITS setting
PASSWORD_MIN_SYMBOLS setting
PASSWORD_MIN_CHAR_CHANGE setting ]
参数
注意
要将参数重置为从默认配置文件继承,请将其值设置为default
。
特权
超级用户
配置文件设置和客户端身份验证
以下配置文件设置会影响客户端身份验证方法,例如 LDAP 或 GSS:
-
FAILED_LOGIN_ATTEMPTS
-
PASSWORD_LOCK_TIME
所有其他配置文件设置仅供 Vertica 用于管理其密码。
示例
ALTER PROFILE sample_profile LIMIT FAILED_LOGIN_ATTEMPTS 3;
另请参阅
18 - ALTER PROFILE RENAME
重命名现有配置文件。
语法
ALTER PROFILE name RENAME TO new‑name;
参数
- name
- 配置文件的当前名称。
- new‑name
- 配置文件的新名称。
特权
超级用户
示例
此示例显示了如何重命名现有配置文件。
ALTER PROFILE sample_profile RENAME TO new_sample_profile;
另请参阅
19 - ALTER RESOURCE POOL
通过设置一个或多个参数来修改现有资源池。
语法
ALTER RESOURCE POOL pool‑name [ FOR subcluster-spec ] [ parameter‑name setting ]...
参数
- pool‑name
- 资源池的名称。内置池名称不能用于用户定义的池。
注意
如果使用大写字母指定资源池名称,Vertica 会将它们转换为小写字母。 -
FOR subcluster‑spec
- 仅限 Eon 模式,指定将此资源池与某个子群集关联,其中 subcluster-spec 为以下之一:
-
SUBCLUSTER subcluster-name
:更改现有子群集的资源池。您不能连接到此子群集,否则 Vertica 会返回错误。 CURRENT SUBCLUSTER
:更改您连接到的子群集的资源池。
-
- parameter‑name
- 要设置的参数,如下所示。
- 设置
要在 parameter‑name 上设置的值。要将此参数重置为其默认值,请指定
DEFAULT
。-
CASCADE TO
指定一个辅助资源池,用于执行其
[RUNTIMECAP](#RUNTIMECAP)
设置超出分配资源池的查询:CASCADE TO secondary‑pool
-
CPUAFFINITYMODE
指定资源池是单独使用还是共用
[CPUAFFINITYSET](#CPUAFFINITYSET)
中指定的 CPU。CPUAFFINITYMODE { SHARED | EXCLUSIVE | ANY }
-
SHARED
:在此池中运行的查询与其他 Vertica 资源池共享其CPUAFFINITYSET
CPU。 -
EXCLUSIVE
:仅将CPUAFFINITYSET
CPU 专用于此资源池,不用于其他 Vertica 资源池。如果将CPUAFFINITYSET
设置为百分比,那么仅为此资源池分配可用于 Vertica 的 CPU 资源百分比。 -
ANY
(默认值):此资源池中的查询可以在任何 CPU 上运行,如果CPUAFFINITYSET
指定 CPU 资源,则此查询无效。
重要
CPUAFFINITYMODE
CPUAFFINITYSET
必须在同一语句中一起设置。-
-
CPUAFFINITYSET
指定此资源池可用的 CPU。所有群集节点必须具有相同的 CPU 数量。分配给该集合的 CPU 资源对常规资源池不可用。
CPUAFFINITYSET { 'cpu‑index[,...]' | 'cpu‑indexi-cpu‑indexn' | 'integer%' | NONE }
-
cpu‑index[,...]
:将以一个或多个逗号分隔的 CPU 专用于此池。 -
cpu‑indexi-cpu‑indexn
:将一系列连续的 CPU 索引专用于此池 -
integer%
:此池可用的所有可用 CPU 的百分比。Vertica 将此百分比向下舍入以包括整个 CPU 单元。 -
NONE
(默认值):没有关联集分配给该资源池。与该池关联的查询可在任何 CPU 上执行。
重要
CPUAFFINITYSET
CPUAFFINITYMODE
必须在同一语句中一起设置。-
-
EXECUTIONPARALLELISM
限制用于处理此资源池中发出的任何单一查询的线程数量。
EXECUTIONPARALLELISM { limit | AUTO }
-
limit:介于 1 与内核数之间的整数值。将此参数设置为减小的值时,可以增大池中发出的简短查询的吞吐量,特别是在并发执行多个查询的情况下。
-
AUTO
or0
(默认值):Vertica 根据系统中的内核数、可用内存和数据量计算设置。除非内存有限,或者数据量非常小,否则 Vertica 会将此参数设置为节点中的核心数。
-
-
MAXCONCURRENCY
设置群集中资源池可用的最大并发执行槽数:
MAXCONCURRENCY { integer | NONE }
NONE
(默认)指定不限数量的并发执行槽。-
MAXMEMORYSIZE
通过从
GENERAL
池中借用内存,资源池可以增加的每个节点的最大大小:MAXMEMORYSIZE { 'integer%' | 'integer{K|M|G|T}' | NONE }
-
integer%
:占总内存的百分比 -
integer{K|M|G|T}
:以千字节、兆字节、千兆字节或太字节为单位的内存量 -
NONE
(默认值):无限制,池可以从GENERAL
池中借用任意数量的可用内存。
-
MAXQUERYMEMORYSIZE
此池可以在运行时分配以处理查询的最大内存量。如果查询需要的内存超过此设置,Vertica 将停止执行并返回错误。
设置此参数如下:
MAXQUERYMEMORYSIZE { 'integer%' | 'integer{K|M|G|T}' | NONE }
-
integer{K|M|G|T}
:以千字节、兆字节、千兆字节或太字节为单位的内存量,最大为MAXMEMORYSIZE
。 -
NONE
(默认值):无限制;池可以从 GENERAL 池中借用任意数量的可用内存,其限制由以下设置:MAXMEMORYSIZE
。
重要
对MAXQUERYMEMORYSIZE
的更改会追溯应用于当前正在执行的查询。如果减少此设置值,对于按照先前内存大小计划的查询,如果其尝试分配的内存大于新设置允许的值,则很可能会失败。-
MEMORYSIZE
每个节点分配给此池的 Vertica 资源管理器可用的总内存量:
MEMORYSIZE { 'integer%' | 'integer{K|M|G|T}' }
-
integer%
:占总内存的百分比 -
integer{K|M|G|T}
:以千字节、兆字节、千兆字节或太字节为单位的内存量
默认值: 0%。没有分配任何内存,资源池从
GENERAL
池中借用内存。-
-
PLANNEDCONCURRENCY
指定资源池中并发执行的查询首选数量。此设置适用于整个群集:
PLANNEDCONCURRENCY { num‑queries | AUTO }
-
num‑queries:整数值 ≥ 1,指定并发执行查询的首选数量。在可能的情况下,查询资源预算被限制为允许此级别的并发执行。
-
AUTO
(默认值):值将在查询运行时自动计算。Vertica 将此参数设置为这两个计算中的较低值,但绝不会小于 4:-
逻辑核心数
-
内存除以 2GB
-
对于不同节点上逻辑核数不同的群集,
AUTO
可以在每个节点上应用不同的方法。分布式查询的运行方式类似于最低的有效计划并发性能。单节点查询以发起方的计划并发性能运行。提示
请仅在评估一段时间的性能后再更改此参数。-
-
PRIORITY
指定此池中的查询在争用
GENERAL
池中资源时的优先级:PRIORITY { integer | HOLD }
-
integer:一个负整数或正整数值。数字越大,表示优先级越高:
-
HOLD
:将优先级设置为-999
。此池中的查询将排队,直到达到[QUEUETIMEOUT](#QUEUETIMEOUT)
为止。
默认值: 0
-
-
QUEUETIMEOUT
指定请求在被拒绝之前可以等待池资源多长时间:
QUEUETIMEOUT { integer | NONE }
-
integer:最长等待时间(以秒为单位)
-
NONE
:没有最长等待时间,请求可以无限排队。
默认值: 300 秒
-
-
RUNTIMECAP
通过设置池中的查询可以执行的最大时间,可以防止查询失控。如果查询超出此设置,它会尝试级联到辅助池。
RUNTIMECAP { 'interval' | NONE }
-
interval:1 分钟或 100 秒的间隔;不应超过 1 年。
-
NONE
(默认值):在此池中运行的查询没有时间限制。要以天为单位指定一个值,请提供整数值。要提供小于一天的值,请以
hours:minutes:seconds
格式提供间隔。例如,值为1:30:00
时,则等于 90 分钟。如果用户或会话也具有
RUNTIMECAP
,则会应用较短的限制。
-
-
RUNTIMEPRIORITY
确定资源管理器应如何将运行时资源(CPU、I/O 带宽)的优先级分配给已在此资源池中运行的查询:
RUNTIMEPRIORITY { HIGH | MEDIUM | LOW }
默认值:
MEDIUM
-
RUNTIMEPRIORITYTHRESHOLD
以秒为单位指定一个时间限制,在资源管理器为其分配资源池
RUNTIMEPRIORITY
之前,必须完成一个查询。所有查询从HIGH
优先级开始运行。如果查询的持续时间超过了此阈值,它将分配到资源池的RUNTIMEPRIORITY
。RUNTIMEPRIORITYTHRESHOLD seconds
默认值:
2
SINGLEINITIATOR
默认情况下,已设置为 false 以实现向后兼容性。切勿更改此设置。
特权
超级用户
示例
以下示例显示如何通过将优先级设置为 5 来更改资源池 ceo_pool。
=> ALTER RESOURCE POOL ceo_pool PRIORITY 5;
以下示例显示如何为 ceo_pool 指定一个辅助资源池。
=> CREATE RESOURCE POOL second_pool;
=> ALTER RESOURCE POOL ceo_pool CASCADE TO second_pool;
以下 Eon 模式示例将 dashboard
辅助子群集的内置 TM
资源池的 MAXMEMORYSIZE 和 MEMORYSIZE 减小到 0%。将这些设置更改为 0 会阻止子群集运行
Tuple Mover
合并操作。
=> ALTER RESOURCE POOL TM FOR SUBCLUSTER dashboard MEMORYSIZE '0%'
MAXMEMORYSIZE '0%';
有关详细信息,请参阅调整 Tuple Mover 池设置。
另请参阅
20 - ALTER ROLE
重命名现有角色。
注意
不能使用 ALTER ROLE 重命名通过 LDAPLink 服务添加到 Vertica 数据库的角色。语法
ALTER ROLE name RENAME TO new‑name
参数
- name
- 要重命名的角色。
- new‑name
- 角色的新名称。
特权
超级用户
示例
=> ALTER ROLE applicationadministrator RENAME TO appadmin;
ALTER ROLE
另请参阅
21 - ALTER ROUTING RULE
更改现有负载均衡策略路由规则。
语法
ALTER ROUTING RULE rule_name {
RENAME TO new_name |
SET ROUTE TO 'cidr_range'|
SET GROUP TO group_name
}
参数
-
rule_name
- 要更改的现有路由规则的名称。
RENAME TO new_name
- 将路由规则的名称更改为 new_name。
-
SET ROUTE TO 'cidr_range'
- CIDR 格式的 IPv4 或 IPv6 地址范围。更改此规则适用的客户端连接的地址范围。
-
SET GROUP TO group_name
- 更改用于处理与此规则匹配的连接的负载均衡组。
示例
此示例将更改名为 etl_rule 的路由规则,以便其使用名为 etl_rule 的负载均衡组来处理 IP 地址范围 10.20.100.0 到 10.20.100.255 内的传入连接。
=> ALTER ROUTING RULE etl_rule SET GROUP TO etl_group;
ALTER ROUTING RULE
=> ALTER ROUTING RULE etl_rule SET ROUTE TO '10.20.100.0/24';
ALTER ROUTING RULE
=> \x
Expanded display is on.
=> SELECT * FROM routing_rules WHERE NAME = 'etl_rule';
-[ RECORD 1 ]----+---------------
name | etl_rule
source_address | 10.20.100.0/24
destination_name | etl_group
另请参阅
22 - ALTER SCHEMA
通过以下方式之一更改一个或多个架构:
-
通过在架构中创建的表启用或禁用架构权限的继承。
-
将架构所有权重新分配给另一个用户。
-
更改架构磁盘配额。
-
重命名一个或多个架构。
语法
ALTER SCHEMA [database.]schema
DEFAULT {INCLUDE | EXCLUDE} SCHEMA PRIVILEGES
| OWNER TO user-name [CASCADE]
| DISK_QUOTA { value | SET NULL }
您可以在单个操作中重命名多个架构:
ALTER SCHEMA [database.]schema[,...] RENAME TO new-schema-name[,...]
参数
- 数据库
- 包含架构的数据库的名称。如果指定,则必须是当前数据库。
- 架构
- 要修改的架构的名称。
DEFAULT {INCLUDE | EXCLUDE} SCHEMA PRIVILEGES
指定是否启用或禁用指定架构中新表的默认权限继承:
-
EXCLUDE SCHEMA PRIVILEGES
(默认值):禁用架构的权限继承。 -
INCLUDE SCHEMA PRIVILEGES
:指定为指定架构中的表授予的权限与为架构授予的权限相同。此选项对架构中的现有表没有影响。
另请参阅 启用架构继承。
-
OWNER TO
- 将架构所有权重新分配给指定用户:
OWNER TO user-name [CASCADE]
默认情况下,重新分配的架构中对象的所有权保持不变。要将架构对象的所有权重新分配给新架构所有者,请使用 CASCADE 对 OWNER TO 子句进行限定。有关详细信息,请参阅下面的级联架构所有权。
DISK_QUOTA
- 以下几项之一:
-
一个字符串,整数后跟支持的单位:K、M、G 或 T。如果新值小于当前使用量,操作将成功,但在使用量降至新配额以下之前,将无法使用更多磁盘空间。
-
SET NULL,用于移除配额。
有关详细信息,请参阅磁盘配额。
-
RENAME TO
- 重命名一个或多个架构:
RENAME TO new-schema-name[,...]
需要满足以下要求:
-
新架构名称符合标识符中描述的约定。此外,该名称在数据库中所有序列、表、投影、视图、模型和架构的名称中必须是唯一的。
-
如果指定多个要重命名的架构,则源列表和目标列表必须具有相同数量的名称。
当心
重命名视图引用的架构将导致视图失败,除非创建另一个架构来替换它。 -
特权
以下几项之一:
-
超级用户
-
架构所有者
级联架构所有权
默认情况下,ALTER SCHEMA...OWNER TO 不会影响目标架构中对象的所有权或授予给这些对象的权限。如果使用 CASCADE 对 OWNER TO 子句进行限定,Vertica 将对目标架构中的对象执行以下操作:
-
将先前架构所有者所拥有的对象所有权转移给新的所有者。
-
撤销上一个架构所有者授予的所有对象权限。
如果由非超级用户发出,ALTER SCHEMA...OWNER TO CASCADE 会忽略属于其他用户的所有对象,并就其无法更改的对象返回通知。例如:
-
架构
ms
归用户mayday
所有,其包含两个表:ms.t1
归 mayday 所有,ms.t2
归用户joe
所有:=> \dt List of tables Schema | Name | Kind | Owner | Comment ----------------+-----------------------+-------+---------+--------- ms | t1 | table | mayday | ms | t2 | table | joe |
-
用户
mayday
使用 CASCADE 将架构ms
的所有权转移给用户dbadmin
。返回时,ALTER SCHEMA 报告它无法转移归用户joe
所有的表ms.t2
及其投影的所有权:=> \c - mayday You are now connected as user "mayday". => ALTER SCHEMA ms OWNER TO dbadmin CASCADE; NOTICE 3583: Insufficient privileges on ms.t2 NOTICE 3583: Insufficient privileges on ms.t2_b0 NOTICE 3583: Insufficient privileges on ms.t2_b1 ALTER SCHEMA => \c You are now connected as user "dbadmin". => \dt List of tables Schema | Name | Kind | Owner | Comment ----------------+-----------------------+-------+---------+--------- ms | t1 | table | dbadmin | ms | t2 | table | joe |
-
用户
dbadmin
再次使用 CASCADE 将架构ms
的所有权转移给用户pat
。这次,因为dbadmin
是超级用户,所以 ALTER SCHEMA 可以将所有ms
表的所有权转移给用户pat
=> ALTER SCHEMA ms OWNER TO pat CASCADE; ALTER SCHEMA => \dt List of tables Schema | Name | Kind | Owner | Comment ----------------+-----------------------+-------+---------+--------- ms | t1 | table | pat | ms | t2 | table | pat |
交换架构
重命名架构可用于交换架构而无需实际移动数据。为便于交换,请输入一个不存在的、临时占位符架构。例如,以下 ALTER SCHEMA
语句使用临时架构 temps 来帮助架构 S1 与架构 S2 进行交换。在此示例中,S1 被重命名为 temps。然后 S2 被重命名为 S1。最后,temps 被重命名为 S2。
=> ALTER SCHEMA S1, S2, temps RENAME TO temps, S1, S2;
示例
以下示例将架构 S1
和 S2
分别重命名为 S3
和 S4
:
=> ALTER SCHEMA S1, S2 RENAME TO S3, S4;
此示例将新表 t2
的默认行为设置为自动继承架构的权限:
=> ALTER SCHEMA s1 DEFAULT INCLUDE SCHEMA PRIVILEGES;
=> CREATE TABLE s1.t2 (i, int);
此示例将新表的默认行为设置为不自动继承架构的权限:
=> ALTER SCHEMA s1 DEFAULT EXCLUDE SCHEMA PRIVILEGES;
另请参阅
23 - ALTER SEQUENCE
通过以下两种方式更改命名序列:
-
设置控制序列行为的参数,例如,序列起始值以及其最小值和最大值的范围。这些更改仅在您启动新的数据库会话时生效。
-
设置序列名称、架构或所有权。这些更改会立即生效。
语法
更改序列行为:
ALTER SEQUENCE [[database.]schema.]sequence
[ INCREMENT [ BY ] integer ]
[ MINVALUE integer | NO MINVALUE ]
[ MAXVALUE integer | NO MAXVALUE ]
[ RESTART [ WITH ] integer ]
[ CACHE integer | NO CACHE ]
[ CYCLE | NO CYCLE ]
更改序列名称、架构或所有权:
ALTER SEQUENCE [schema.]sequence-name {
RENAME TO seq-name
| SET SCHEMA schema-name]
| OWNER TO owner-name
}
参数
- 架构
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。如果未指定架构,系统将在默认架构中创建表。
- 序列
- 要更改的序列的名称。
-
INCREMENT [BY] integer
一个正整数或负整数,指定每次调用 NEXTVAL 时序列的增减数量,默认设置为 1。
注意
将此参数设置为 integer 时,可确保列值始终至少增加 integer。但是,列值的增量有时可能会超过 integer,但如果您还设置了NO CACHE
参数则除外。-
MINVALUE integer
NO MINVALUE
(默认值) - 修改序列可以生成的最小值。如果更改了此值且当前值超出了范围,增量大于零时当前值将更改为最小值,增量小于零时当前值将更改为最大值。
-
MAXVALUE integer
NO MAXVALUE
(默认值) - 修改序列的最大值。如果更改了此值且当前值超出了范围,增量大于零时当前值将更改为最小值,增量小于零时当前值将更改为最大值。
- RESTART [WITH] integer
- 将序列的当前值更改为 integer。下一次调用
NEXTVAL
将返回 integer。 CACHE
integerNO CACHE
(默认值)- 指定预先分配和存储在内存中的序列号数量,以提高访问速度。Vertica 为每个会话设置缓存,并将其分布到所有节点。默认情况下,序列缓存设置为 250,000。
有关详细信息,请参阅分发命名序列。
CYCLE
NO CYCLE
(默认值)- 指定序列是否可以在达到其最小值或最大值时回绕:
-
CYCLE
:序列按如下方式进行回绕:-
当递增序列达到其上限时,会被重置为其最小值。
-
当递减序列达到其下限时,会被重置为其最大值。
-
-
NO CYCLE
(默认值):在序列达到其最大值或最小值后,调用 NEXTVAL 会返回错误。
-
-
RENAME TO seq‑name
- 重命名当前架构中的序列,其中 seq‑name 符合标识符中描述的约定。 同一架构中的序列、表、投影、视图和模型中也必须是唯一的。
-
SET SCHEMA schema‑name
- 将序列移至架构 schema-name。
-
OWNER TO owner‑name
- 将当前序列所有者重新分配给指定所有者。
特权
非超级用户:对架构的 USAGE 权限,为以下之一:
-
序列所有者
-
对序列的 ALTER 权限
对于某些操作,非超级用户必须具备以下架构权限:
示例
请参阅更改序列。
另请参阅
CREATE SEQUENCE
24 - ALTER SUBCLUSTER
更改子群集的配置。您可以使用此语句重命名子群集或将其设为 默认子群集。
语法
ALTER SUBCLUSTER subcluster‑name {
RENAME TO new-name |
SET DEFAULT
}
参数
-
subcluster‑name
- 要更改的子群集的名称。
-
RENAME TO new‑name
- 将子群集的名称更改为 new-name。
-
SET DEFAULT
- 将子群集设为默认子群集。将新节点添加到数据库时,如果未指定要包含这些节点的子群集,Vertica 会将这些节点添加到默认子群集中。每次只能设置一个默认子群集。先前作为默认子群集的子群集将变为非默认子群集。
特权
超级用户示例
此示例将 analytics_cluster 设为默认子群集:
=> SELECT DISTINCT subcluster_name FROM SUBCLUSTERS WHERE is_default = true;
subcluster_name
--------------------
default_subcluster
(1 row)
=> ALTER SUBCLUSTER analytics_cluster SET DEFAULT;
ALTER SUBCLUSTER
=> SELECT DISTINCT subcluster_name FROM SUBCLUSTERS WHERE is_default = true;
subcluster_name
-------------------
analytics_cluster
(1 row)
此示例将 default_subcluster 重命名为 load_subcluster:
=> ALTER SUBCLUSTER default_subcluster RENAME TO load_subcluster;
ALTER SUBCLUSTER
=> SELECT DISTINCT subcluster_name FROM subclusters;
subcluster_name
-------------------
load_subcluster
analytics_cluster
(2 rows)
另请参阅
25 - ALTER SESSION
ALTER SESSION 为当前会话设置和清除会话级别的配置参数值。要识别会话级别参数,请查询系统表 CONFIGURATION_PARAMETERS。
语法
ALTER SESSION {
SET [PARAMETER] parameter‑name=value[,...]
| CLEAR { [PARAMETER] parameter‑name[,...] | PARAMETER ALL }
| SET UDPARAMETER [ FOR libname ] key=value[,...]
| CLEAR UDPARAMETER { [ FOR libname ] key[,...] | ALL }
}
参数
SET [PARAMETER]
- 将一个或多个配置参数设置为指定值。
CLEAR [PARAMETER]
- 清除在当前会话中设置的更改的指定配置参数。
CLEAR PARAMETER ALL
- 清除在当前会话中设置的更改的所有会话级别配置参数。
-
SET UDPARAMETER
- 设置一个或多个用户定义的会话参数
(key=value
),以与 UDx 结合使用。键值大小限制如下:-
从客户端设置:128 个字符
-
从 UDx 端设置:无限制
可以通过包含子句
FOR libname
将 SET 操作的范围限制为单个库。例如:=> ALTER SESSION SET UDPARAMETER FOR securelib username='alice';
如果指定一个库,则只有该库可以访问参数的值。使用此限制来保护包含敏感数据(例如凭据)的参数。
-
CLEAR UDPARAMETER
- 清除通过以下选项之一指定的用户定义参数:
-
[FOR libname] key[,...]
:清除 key 指定的参数,(可选)这些参数的范围被限制为库 libname。 -
ALL
:清除当前会话中的所有用户定义参数。
-
特权
无
示例
设置和清除参数
-
强制所有支持隔离模式的 UDx 在隔离模式下运行,即使其定义指定了
NOT FENCED
也是如此:=> ALTER SESSION SET ForceUDxFencedMode = 1; ALTER SESSION
-
在会话级别清除
ForceUDxFencedMode
。其值将被重置为其默认值0
:=> ALTER SESSION CLEAR ForceUDxFencedMode; ALTER SESSION => SELECT parameter_name, current_value, default_value FROM configuration_parameters WHERE parameter_name = 'ForceUDxFencedMode'; parameter_name | current_value | default_value --------------------+---------------+--------------- ForceUDxFencedMode | 0 | 0 (1 row)
-
清除在此会话中设置的更改的所有会话级别配置参数:
=> ALTER SESSION CLEAR PARAMETER ALL; ALTER SESSION
设置和清除用户定义的参数
-
将库
MyLibrary
中的用户定义参数RowCount
的值设置为 25。=> ALTER SESSION SET UDPARAMETER FOR MyLibrary RowCount = 25; ALTER SESSION
-
清除会话级别的
RowCount
:=> ALTER SESSION CLEAR UDPARAMETER FOR MyLibrary RowCount; ALTER SESSION
26 - ALTER SUBNET
重命名现有子网。
语法
ALTER SUBNET subnet‑name RENAME TO new‑subnet‑name
参数
- subnet‑name
- 现有子网的名称。
- new‑subnet‑name
- 子网的新名称。
特权
超级用户
示例
=> ALTER SUBNET mysubnet RENAME TO myNewSubnet;
27 - ALTER TABLE
修改现有表的元数据。所有更改都将自动提交。
语法
ALTER TABLE [[database.]schema.]table {
ADD COLUMN [ IF NOT EXISTS ] column datatype
[ column‑constraint ]
[ ENCODING encoding‑type ]
[ PROJECTIONS (projections-list) | ALL PROJECTIONS ]
| ADD table‑constraint
| ALTER COLUMN column {
ENCODING encoding-type PROJECTIONS (projection-list)
| { SET | DROP } expression }
| ALTER CONSTRAINT constraint‑name { ENABLED | DISABLED }
| DISK_QUOTA { value | SET NULL }
| DROP CONSTRAINT constraint‑name [ CASCADE | RESTRICT ]
| DROP [ COLUMN ] [ IF EXISTS ] column [ CASCADE | RESTRICT ]
| FORCE OUTER integer
| { INCLUDE | EXCLUDE | MATERIALIZE } [ SCHEMA ] PRIVILEGES
| OWNER TO owner
| partition‑clause [ REORGANIZE ]
| REMOVE PARTITIONING
| RENAME [ COLUMN ] name TO new‑name
| RENAME TO new-table-name[,...]
| REORGANIZE
| SET {
ActivePartitionCount { count | DEFAULT }
| IMMUTABLE ROWS
| MERGEOUT { 1 | 0 }
| SCHEMA schema
}
注意
多个 ALTER TABLE 子句不能与同一语句中的其他子句一起指定(请参阅下面的 Exclusive ALTER TABLE 子句)。否则,ALTER TABLE 支持多个以逗号分隔的子句。例如,下面的 ALTER TABLE 语句通过以下两种方式更改 my_table
表:将所有权重新分配给 Joe
;在 UNIQUE b
列上设置 约束:
=> ALTER TABLE my_table OWNER TO Joe,
ADD CONSTRAINT unique_b UNIQUE (b) ENABLED;
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
表
- 要更改的表。
-
ADD COLUMN
- 向表中添加一列,默认情况下会将该列添加到所有超投影中:
ADD COLUMN [IF NOT EXISTS] column datatype [ NULL | NOT NULL ] [ ENCODING encoding‑type] [ PROJECTIONS (projections-list) | ALL PROJECTIONS]
对复杂类型列的限制也适用于通过 ADD COLUMN 添加的列。
如果指定的名称下面已经存在列,则可选的 IF NOT EXISTS 子句会生成一条信息性消息。如果您忽略此选项且列存在,Vertica 会生成 ROLLBACK 错误消息。
您可以使用以下选项之一限定新的列定义:
-
column‑constraint 指定一个列约束,如下所示:
{NULL | NOT NULL} | [ DEFAULT default‑expr ] [ SET USING using‑expr ] } | DEFAULT USING exp}
-
ENCODING 指定列的编码类型。默认设置为 AUTO。
-
PROJECTIONS 将新列添加到此表的一个或多个现有投影中,指定为投影基本名称的逗号分隔列表。Vertica 将该列添加到每个投影的所有伙伴实例。投影列表不能包含具有预聚合数据的投影,例如实时聚合投影;否则,Vertica 将回退 ALTER TABLE 语句。
-
ALL PROJECTIONS 将该列添加到此表的所有投影(不包括具有预聚合数据的投影)中。
-
-
ADD table‑constraint
- 将约束添加到一个没有任何关联投影的表。
-
ALTER COLUMN
- 您可以通过以下两种方式之一更改现有列:
-
在一列上为该表的一个或多个投影设置编码:
ENCODING encoding-type PROJECTIONS (projections-list)
其中 projections-list 是以逗号分隔的投影列表,这些投影将使用新编码进行更新。可以通过以下两种方式指定每个投影:
-
投影基本名称:更新所有共享此基本名称的投影。
-
投影名称:更新指定的投影。如果投影被分段,则所做的更改将传播到所有伙伴实例。
如果其中一个投影不包含目标列,Vertica 将返回一个回退错误。
有关详细信息,请参阅投影列编码。
-
-
设置或删除一列标量数据(包括原始数组)的设置:
SET { DEFAULT expression | USING expression | DEFAULT USING expression | NOT NULL | DATA TYPE datatype }
DROP { DEFAULT | SET USING | DEFAULT USING | NOT NULL }
如果列所属的复杂类型既不是标量类型也不是标量类型数组,则无法更改其数据类型。存在一个例外:在外部表中,您可以将基元列类型更改为复杂类型。
设置 DEFAULT 或 SET USING 表达式对现有列值没有影响。要使用列的 DEFAULT 或 SET USING 表达式刷新列,请按如下方式对其进行更新:
-
SET USING 列:对该表调用 REFRESH_COLUMNS。
-
DEFAULT 列:按如下方式更新该列:
UPDATE table-name SET column-name=DEFAULT;
-
使用 DEFAULT 或 SET USING 更改列会增加磁盘使用率,如果违反表或架构磁盘配额,这可能会导致操作失败。
-
-
ALTER CONSTRAINT
- 指定是否强制执行主键、唯一键和检查约束:
ALTER CONSTRAINT constraint‑name {ENABLED | DISABLED}
DISK_QUOTA
- 以下几项之一:
-
一个字符串,整数后跟支持的单位:K、M、G 或 T。如果新值小于当前使用量,操作将成功,但在使用量降至新配额以下之前,将无法使用更多磁盘空间。
-
SET NULL,用于移除配额。
有关详细信息,请参阅磁盘配额。
-
-
DROP CONSTRAINT
- 从表中删除指定的表约束:
DROP CONSTRAINT constraint-name [CASCADE | RESTRICT]
您可以使用以下选项之一限定 DROP CONSTRAINT:
-
CASCADE:删除其他表中的约束和所有依赖项。
-
RESTRICT:如果存在依赖对象,则不删除约束。与默认行为相同。
删除表约束对引用该表的视图没有影响。
-
-
DROP [COLUMN]
- 删除表中的指定列以及该列的 ROS 容器:
DROP [COLUMN] [IF EXISTS] column [CASCADE | RESTRICT]
您可以使用以下选项之一限定 DROP COLUMN:
-
如果列不存在,IF EXISTS 会生成一条信息性消息。如果您忽略此选项且列不存在,Vertica 会生成 ROLLBACK 错误消息。
-
如果列具有依赖项,则需要 CASCADE。
-
RESTRICT 仅删除给定表中的列。
列所在的表不能是不可变表。
请参阅删除表列。
-
-
FORCE OUTER integer
- 指定是否将表作为内部或外部输入联接到另一个表。有关详细信息,请参阅控制联接输入。
{INCLUDE | EXCLUDE | MATERIALIZE} [SCHEMA] PRIVILEGES
- 指定在默认情况下继承此表的架构权限:
-
EXCLUDE PRIVILEGES(默认)禁止从架构继承权限。
-
INCLUDE PRIVILEGES 将针对表架构授予的相同权限授予视图。
-
MATERIALIZE PRIVILEGES 将授权复制到表并在表上创建一个 GRANT 对象。这将禁用表上的权限继承标志,让您可以:
-
在表级别授予更具体的权限。
-
使用架构级权限作为模板。
-
将表移动到不同的架构。
-
更改架构权限而不影响表。
注意
如果在数据库级别禁用继承的权限,架构权限仍然可以实体化。 -
另请参阅 设置表和视图的权限继承。
-
-
OWNER TO owner
- 更改表所有者。
-
partition‑clause [REORGANIZE]
- 对外部表无效,通过 PARTITION BY 子句对表数据存储进行逻辑划分:
PARTITION BY partition‑expression [ GROUP BY group‑expression ] [ SET ACTIVEPARTITIONCOUNT integer ]
有关详细信息,请参阅分区子句。
如果您使用 REORGANIZE 限定分区子句,并且在以前没有为表指定分区,则 Vertica Tuple Mover 会立即实现分区子句。如果在以前为表指定了分区,则 Tuple Mover 会评估 ROS 存储容器,并根据需要重新组织这些容器,使其符合新的分区子句。
REMOVE PARTITIONING
- 指定要从表定义中移除分区。 Tuple Mover 随后从 ROS 容器中移除现有分区。
-
RENAME [COLUMN]
- 重命名表中的指定列。列所在的表不能是不可变表。
-
RENAME TO
- 重命名一个或多个表:
RENAME TO new‑table‑name[,...]
需要满足以下要求:
-
重命名的表必须与原始表在同一架构中。
-
新的表名 符合标识符中描述的约定。 同一架构中的序列、表、投影、视图和模型中也必须是唯一的。
-
如果指定多个要重命名的表,则源列表和目标列表必须具有相同数量的名称。
-
-
REORGANIZE
- 仅对分区表有效,调用
Tuple Mover,以根据需要重新组织 ROS 存储容器,使其符合表的当前分区子句。ALTER TABLE...REORGANIZE 和 Vertica 元函数PARTITION_TABLE的运行方式相同。
REORGANIZE 也可以限定一个新的分区子句。
SET
- 更改表设置,为以下几项之一:
-
ActivePartitionCount {count | DEFAULT },仅对分区表有效,指定该表有多少个分区处于活动状态,为以下几项之一:
-
count:无符号整数,取代配置参数 ActivePartitionCount。
-
DEFAULT:移除表级活动分区计数。该表从配置参数 ActivePartitionCount 中获取其活动分区计数。
有关用法的详细信息,请参阅活动和非活动分区。
-
-
IMMUTABLE ROWS 通过阻止 DML 操作(如 UPDATE 和 DELETE)来防止更改表行值。表的不可变性一旦设置便无法恢复。
-
MERGEOUT { 1 | 0 } 指定是允许还是禁止合并用来合并此表的投影数据的 ROS 容器。默认情况下,会针对所有表启用合并 (1)。
-
SCHEMA schema-name 将表从其当前架构移动到 schema-name。Vertica 自动将锚定到源表的所有投影移动到目标架构。它还将所有 IDENTITY 和 AUTO_INCREMENT 列移动到目标架构。有关详细信息,请参阅 将表移动到另一个架构
-
特权
非超级用户:对架构的 USAGE 权限,为以下之一:
-
表所有者
-
ALTER 权限
非超级用户还必须具有 SELECT 权限才能启用或禁用 约束强制执行或移除分区。
对于某些操作,非超级用户必须具备以下架构权限:
-
要重命名表:CREATE、USAGE
-
要将表移动到另一个架构:对源架构具有 USAGE 权限,对目标架构具有 CREATE 权限
复杂类型的限制
原生表中使用的复杂类型除了其参考页面上列出的个别类型的限制外,还有一些限制:
-
原生表必须至少有一个基本类型或原生数组(基本类型的一维数组)的列。如果一个 Flex 表有真实的列,它也必须至少有一个满足这个限制的列。
-
复杂类型列不能在 ORDER BY 或 PARTITION BY 子句中使用,也不能用作 FILLER 列。
-
复杂类型列不能有 约束。
-
返回复杂类型的表达式不能用作投影列,并且投影不能按复杂类型的列进行分段或排序。
-
具有复杂类型列的表不能使用 DEFAULT 和 SET USING。
独占 ALTER TABLE 子句
以下 ALTER TABLE 子句不能与其他 ALTER TABLE 子句结合使用:
-
ADD COLUMN
-
DROP COLUMN
-
RENAME COLUMN
-
SET SCHEMA
-
RENAME [TO]
节点关闭限制
仅限企业模式
当一个或多个数据库群集节点关闭时,不支持以下 ALTER TABLE 操作:
-
ALTER COLUMN ...ADD table‑constraint
-
ALTER COLUMN ...SET DATA TYPE
-
ALTER COLUMN ...{ SET DEFAULT | DROP DEFAULT }
-
ALTER COLUMN ...{ SET USING | DROP SET USING }
-
ALTER CONSTRAINT
-
DROP COLUMN
-
DROP CONSTRAINT
预聚合投影的限制
您不能修改实时聚合或 Top-K 投影中包含的锚定表列的元数据。您也不能删除这些列。要进行这些更改,您必须首先删除与之关联的所有实时聚合和 Top-K 投影。
外部表的限制
并不是所有 ALTER TABLE 选项都适用于外部表。例如,您不能向外部表添加列,但可以重命名该表:
=> ALTER TABLE mytable RENAME TO mytable2;
ALTER TABLE
锁定的表
如果操作无法在目标表上获取 O lock,Vertica 将尝试关闭该表上运行的任何内部 tuple mover 会话。如果成功,则可以继续操作。在用户会话中运行的显式 Tuple Mover 操作不会关闭。如果显式 Tuple Mover 操作在表上运行,则该操作仅在 Tuple Mover 操作完成后继续。
另请参阅
27.1 - Table-constraint
为表元数据添加约束。您可以使用
CREATE TABLE
指定表约束,或使用
ALTER TABLE
将约束添加到现有表。有关详细信息,请参阅设置约束。
注意
向视图中所引用的表添加约束不会对视图产生影响。语法
[ CONSTRAINT constraint-name ]
{
... PRIMARY KEY (column[,... ]) [ ENABLED | DISABLED ]
... | FOREIGN KEY (column[,... ] ) REFERENCES table [ (column[,...]) ]
... | UNIQUE (column[,...]) [ ENABLED | DISABLED ]
... | CHECK (expression) [ ENABLED | DISABLED ]
}
参数
-
CONSTRAINT constraint‑name
- 为约束分配名称。Vertica 建议对所有约束进行命名。
PRIMARY KEY
- 定义一个或多个
NOT NULL
列作为主键,如下所示:PRIMARY KEY (column[,...]) [ ENABLED | DISABLED]
可以使用关键字
ENABLED
或DISABLED
来限定此子句。请参阅下面的强制执行约束。如果您没有命名主键约束,Vertica 会分配名称
C_PRIMARY
。 FOREIGN KEY
- 添加引用完整性约束,以将一个或多个列定义为外键,如下所示:
FOREIGN KEY (column[,... ]) REFERENCES table [(column[,... ])]
如果省略了 column,Vertica 将引用 table 中的主键。
如果您没有命名外键约束,Vertica 会分配名称
C_FOREIGN
。重要
添加外键约束需要以下权限(除了 ALTER TABLE 也需要的权限外):
-
对引用表的 REFERENCES 权限
-
对引用表架构的 USAGE 权限
-
UNIQUE
- 指定一个列或一组列中的数据对于所有表行都是唯一的,如下所示:
UNIQUE (column[,...]) [ENABLED | DISABLED]
可以使用关键字
ENABLED
或DISABLED
来限定此子句。请参阅下面的强制执行约束。如果您没有命名唯一约束,Vertica 会分配名称
C_UNIQUE
。 CHECK
- 指定检查条件,即一个返回布尔值的表达式,如下所示:
CHECK (expression) [ENABLED | DISABLED]
可以使用关键字
ENABLED
或DISABLED
来限定此子句。请参阅下面的强制执行约束。如果您没有命名检查约束,Vertica 会分配名称
C_CHECK
。
权限
非超级用户:表所有者,或以下权限:
-
对架构的 USAGE 权限
-
对表的 ALTER 权限
-
对表的 SELECT 权限,用于在表上启用或禁用约束实施
强制执行约束
表可以使用关键字 ENABLED
或 DISABLED
指定 Vertica 是否自动强制执行主键、唯一键或检查约束。如果省略了 ENABLED
或 DISABLED
,Vertica 会通过检查相应的配置参数来确定是否自动启用约束:
-
EnableNewPrimaryKeysByDefault
-
EnableNewUniqueKeysByDefault
-
EnableNewCheckConstraintsByDefault
有关详细信息,请参阅约束强制执行。
示例
以下示例将使用主键约束创建一个表 (t01
)。
CREATE TABLE t01 (id int CONSTRAINT sampleconstraint PRIMARY KEY);
CREATE TABLE
此示例没有使用约束创建相同表,然后添加约束 ALTER TABLE ADD CONSTRAINT
CREATE TABLE t01 (id int);
CREATE TABLE
ALTER TABLE t01 ADD CONSTRAINT sampleconstraint PRIMARY KEY(id);
WARNING 2623: Column "id" definition changed to NOT NULL
ALTER TABLE
以下示例创建一个包含两列的表 (addapk
),向表中添加第三列,然后在第三列上添加主键约束。
=> CREATE TABLE addapk (col1 INT, col2 INT);
CREATE TABLE
=> ALTER TABLE addapk ADD COLUMN col3 INT;
ALTER TABLE
=> ALTER TABLE addapk ADD CONSTRAINT col3constraint PRIMARY KEY (col3) ENABLED;
WARNING 2623: Column "col3" definition changed to NOT NULL
ALTER TABLE
使用示例表 addapk
,检查是否启用了主键约束(is_enabled
为 t
)。
=> SELECT constraint_name, column_name, constraint_type, is_enabled FROM PRIMARY_KEYS WHERE table_name IN ('addapk');
constraint_name | column_name | constraint_type | is_enabled
-----------------+-------------+-----------------+------------
col3constraint | col3 | p | t
(1 row)
此示例使用 ALTER TABLE ALTER CONSTRAINT
禁用约束。
=> ALTER TABLE addapk ALTER CONSTRAINT col3constraint DISABLED;
检查主键现在是否已禁用(is_enabled
为 f
)。
=> SELECT constraint_name, column_name, constraint_type, is_enabled FROM PRIMARY_KEYS WHERE table_name IN ('addapk');
constraint_name | column_name | constraint_type | is_enabled
-----------------+-------------+-----------------+------------
col3constraint | col3 | p | f
(1 row)
27.2 - 投影列编码
创建表及其投影后,可以调用 ALTER TABLE...ALTER COLUMN 来设置或更改一个或多个投影中现有列的编码类型。例如:
ALTER TABLE store.store_dimension ALTER COLUMN store_region
ENCODING rle PROJECTIONS (store.store_dimension_p1_b0, store.store_dimension_p2);
在此示例中,ALTER TABLE 语句指定对两个投影的 store_region
列设置 RLE 编码: store_dimension_p1_b0
和 store_dimension_p2
。PROJECTIONS
列表分别通过投影名称和基本名称引用这两个投影。可以通过任意一种方式引用投影;在这两种情况下,更改都会传播到投影的所有伙伴实例并相应地存储在其 DDL 中:
=> select export_objects('','store.store_dimension');
export_objects
------------------------------------------------------------------
CREATE TABLE store.store_dimension
(
store_key int NOT NULL,
store_name varchar(64),
store_number int,
store_address varchar(256),
store_city varchar(64),
store_state char(2),
store_region varchar(64)
);
CREATE PROJECTION store.store_dimension_p1
(
store_key,
store_name,
store_number,
store_address,
store_city,
store_state,
store_region ENCODING RLE
)
AS
SELECT store_dimension.store_key,
store_dimension.store_name,
store_dimension.store_number,
store_dimension.store_address,
store_dimension.store_city,
store_dimension.store_state,
store_dimension.store_region
FROM store.store_dimension
ORDER BY store_dimension.store_key
SEGMENTED BY hash(store_dimension.store_key) ALL NODES KSAFE 1;
CREATE PROJECTION store.store_dimension_p2
(
store_key,
store_name,
store_number,
store_address,
store_city,
store_state,
store_region ENCODING RLE
)
AS
SELECT ...
重要
添加或更改列的编码类型时,不会立即影响现有的投影数据。Vertica 仅将编码应用于新加载的数据以及合并上的现有数据。28 - ALTER TLS CONFIGURATION
更改指定的 TLS CONFIGURATION 对象。有关现有 TLS CONFIGURATION 对象的信息,请查询 TLS_CONFIGURATIONS。
语法
ALTER TLS CONFIGURATION tls_config_name {
[ CERTIFICATE { NULL | cert_name }
[ ADD CA CERTIFICATES ca_cert_name [,...] ]
[ REMOVE CA CERTIFICATES ca_cert_name [,...] ]
[ CIPHER SUITES { '' | 'openssl_cipher [,...]' } ]
[ TLSMODE 'tlsmode' ]
[ OWNER TO user_name ]
}
参数
-
tls_config_name
- 要更改的 TLS CONFIGURATION 对象。
NULL
- 从 TLS 配置中移除非 CA 证书。
-
cert_name
- 使用 CREATE CERTIFICATE 创建的证书。
您必须拥有证书的使用权限(来自 证书 的所有权或 对其密钥的使用,如果有的话)将其添加到 TLS 配置。
-
ca_cert_name
- 使用 CREATE CERTIFICATE 创建的 CA 证书。
您必须拥有证书的使用权限(来自 证书 的所有权或 对其密钥的使用,如果有的话)将其添加到 TLS 配置。
-
openssl_cipher
- 要使用的密码套件的逗号分隔列表,而不是默认的密码套件集。为该参数提供空字符串会清除备用密码套件列表,并指示指定的 TLS CONFIGURATION 使用默认密码套件集。
要查看启用的密码套件,请使用 LIST_ENABLED_CIPHERS。
- tlsmode
- Vertica 如何建立 TLS 连接并处理证书(以下几项之一,按安全性升序排列):
-
DISABLE
:禁用 TLS。此参数的所有其他选项都启用 TLS。 -
ENABLE
:启用 TLS。Vertica 不检查客户端证书。 -
TRY_VERIFY
:如果出现以下任一情况,则建立 TLS 连接:-
另一台主机出示有效证书
-
另一台主机不提供证书
如果其他主机提供无效证书,则连接将使用纯文本。
-
-
VERIFY_CA
:如果 Vertica 验证其他主机的证书来自受信任的 CA,则连接成功。如果其他主机不提供证书,则连接使用纯文本。 -
VERIFY_FULL
:如果 Vertica 验证其他主机的证书来自受信任的 CA,并且证书的cn
(通用名称)或subjectAltName
属性与其他主机的主机名或 IP 地址匹配,则连接成功。请注意,对于客户端证书,
cn
将用于用户名,因此subjectAltName
必须与其他主机的主机名或 IP 地址匹配。
VERIFY_FULL
不受客户端-服务器 TLS 和 HTTPS(分别为参数 ServerTLSConfig 和 HttpsTLSConfig)支持,其行为类似于VERIFY_CA
。注意
Vertica 和另一方中,哪个充当客户端,哪个充当服务器,这取决于连接类型。更具体地说,设置为参数的 TLS 配置会将 Vertica 视为客户端,将另一方(在本示例中为 LDAP 服务器)视为服务器:
对于所有其他连接类型,Vertica 是服务器,另一方是客户端:
-
InternodeTLSConfig(其他 Vertica 节点既是客户端又是服务器)
-
特权
非超级用户: 对 TLS CONFIGURATION 的 ALTER 权限。
示例
要配置客户端-服务器 TLS,请参阅配置客户端-服务器 TLS。
要为 LDAP Link 服务及其试运行函数配置 TLS,请参阅 LDAP Link 的 TLS。
要为 LDAP 身份验证记录配置 TLS,请参阅 LDAP 身份验证的 TLS。
要从 LDAPLink TLS 配置中移除所有证书和 CA 证书:
=> SELECT * FROM tls_configurations WHERE name='LDAPLink';
name | owner | certificate | ca_certificate | cipher_suites | mode
----------+---------+-------------+----------------+---------------+---------
LDAPLink | dbadmin | server_cert | ca | | DISABLE
LDAPLink | dbadmin | server_cert | ica | | DISABLE
(2 rows)
=> ALTER TLS CONFIGURATION LDAPLink CERTIFICATE NULL REMOVE CA CERTIFICATES ca, ica;
ALTER TLS CONFIGURATION
=> SELECT * FROM tls_configurations WHERE name='LDAPLink';
name | owner | certificate | ca_certificate | cipher_suites | mode
----------+---------+-------------+----------------+---------------+---------
LDAPLink | dbadmin | | | | DISABLE
(3 rows)
要为客户端-服务器 TLS 使用一组备用密码套件:
=> ALTER TLS CONFIGURATION server CIPHER SUITES
'DHE-PSK-AES256-CBC-SHA384,
DHE-PSK-AES128-GCM-SHA256,
PSK-AES128-CBC-SHA256';
ALTER TLS CONFIGURATION
=> SELECT name, cipher_suites FROM tls_configurations WHERE name='server';
name | cipher_suites
server | DHE-PSK-AES256-CBC-SHA384,DHE-PSK-AES128-GCM-SHA256,PSK-AES128-CBC-SHA256
(1 row)
29 - ALTER USER
更改用户帐户参数和用户级别配置参数。
语法
ALTER USER user‑name {
account‑parameter value[,...]
| SET [PARAMETER] cfg‑parameter=value[,...]
| CLEAR [PARAMETER] cfg‑parameter[,...]
}
参数
-
user‑name
- 用户名。包含特殊字符的名称必须加上双引号。要强制区分大小写,请使用双引号。
有关名称要求的详细信息,请参阅创建数据库名称和密码。
-
account‑parameter value
- 指定用户帐户设置(见下文)。
注意
对用户帐户的更改仅适用于当前会话,以及该用户启动的所有后续会话。 SET [PARAMETER]
- 设置指定的配置参数。新设置仅适用于当前会话,以及该用户启动的所有后续会话。并发用户会话不受新设置的影响,除非它们调用元函数 RESET_SESSION。
CLEAR [PARAMETER]
- 将指定的配置参数重置为其默认值。
重要
SET | CLEAR PARAMETER 只能指定用户级别配置参数,否则 Vertica 将返回错误。有关详细信息,请参阅下文的设置用户级别配置参数。用户帐户参数
以逗号分隔列表的形式指定一个或多个用户帐户参数及其设置:
account‑parameter value[,...]
重要
对于使用 LDAPLink 服务添加到 Vertica 数据库的用户,以下用户帐户参数无效:
-
IDENTIFIED BY
-
PROFILE
-
SECURITY ALGORITHM
参数 |
设置 |
|||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ACCOUNT |
锁定或解锁用户对数据库的访问,可以用以下操作之一:
提示要自动锁定帐户,可使用 CREATE PROFILE 设置登录尝试失败的最大次数。 |
|||||||||||||||||||||||
DEFAULT ROLE |
指定哪些角色是此用户的默认角色,设置为以下之一:
当用户登录时,会自动激活默认角色。此参数指定的角色将取代之前分配的任何角色。 注意
|
|||||||||||||||||||||||
GRACEPERIOD |
指定用户查询可以被任何会话套接字拦截多长时间,可以是以下值之一:
有关详细信息,请参阅处理会话套接字阻止。 |
|||||||||||||||||||||||
IDENTIFIED BY |
更改用户密码:
|
特权
非超级用户可以在自己的用户帐户上更改以下选项:
-
IDENTIFIED BY
-
RESOURCE POOL
-
SEARCH_PATH
-
SECURITY_ALGORITHM
将另一个用户的默认资源池更改为 PUBLIC 架构之外的资源池时,用户必须至少通过以下途径之一获得资源池的 USAGE 权限:
设置用户级别配置参数
SET | CLEAR PARAMETER 只能指定用户级别配置参数,否则 Vertica 将返回错误。只有超级用户可以设置和清除用户级别参数,除非它们在会话级也受支持。
要获取用户级别参数的名称,请查询系统表 CONFIGURATION_PARAMETERS。例如:
=> SELECT parameter_name, allowed_levels FROM configuration_parameters
WHERE allowed_levels ilike '%USER%' AND parameter_name ilike '%depot%' ORDER BY parameter_name;
parameter_name | allowed_levels
-----------------------------+-------------------------
BackgroundDepotWarming | SESSION, USER, DATABASE
DepotOperationsForQuery | SESSION, USER, DATABASE
EnableDepotWarmingFromPeers | SESSION, USER, DATABASE
UseDepotForReads | SESSION, USER, DATABASE
UseDepotForWrites | SESSION, USER, DATABASE
(5 rows)
以下示例为两个用户 Yvonne 和 Ahmed 设置用户级别配置参数 UseDepotForWrites:
=> SHOW USER Yvonne PARAMETER ALL;
user | parameter | setting
--------+-------------------------+---------
Yvonne | DepotOperationsForQuery | Fetches
(1 row)
=> ALTER USER Yvonne SET PARAMETER UseDepotForWrites = 0;
ALTER USER
=> SHOW USER Yvonne PARAMETER ALL;
user | parameter | setting
--------+-------------------------+---------
Yvonne | DepotOperationsForQuery | Fetches
Yvonne | UseDepotForWrites | 0
(2 rows)
=> ALTER USER Ahmed SET PARAMETER DepotOperationsForQuery = 'Fetches';
ALTER USER
=> SHOW USER ALL PARAMETER ALL;
user | parameter | setting
--------+-------------------------+---------
Ahmed | DepotOperationsForQuery | Fetches
Yvonne | DepotOperationsForQuery | Fetches
Yvonne | UseDepotForWrites | 0
(3 rows)
示例
设置用户密码
=> CREATE USER user1;
=> ALTER USER user1 IDENTIFIED BY 'newpassword';
设置用户的安全算法和密码
此示例将用户的安全算法和密码分别设置为 SHA-512
和 newpassword
。执行 ALTER USER
语句时,Vertica 会使用 SHA-512 算法对密码进行哈希处理,并保存哈希:
=> CREATE USER user1;
=> ALTER USER user1 SECURITY_ALGORITHM 'SHA512' IDENTIFIED BY 'newpassword'
为用户分配默认角色
此示例使用户的已分配角色成为用户的默认角色。用户登录时会自动设置(启用)默认角色:
=> CREATE USER user1;
CREATE USER
=> GRANT role1, role2, role3 to user1;
=> ALTER USER user1 DEFAULT ROLE ALL;
您可以将 ALL 与 EXCEPT 配对以排除某些角色:
=> CREATE USER user2;
CREATE USER
=> GRANT role1, role2, role3 to user2;
=> ALTER USER user2 DEFAULT ROLE ALL EXCEPT role1;
另请参阅
30 - ALTER VIEW
修改现有 视图的元数据。更改将自动提交。
语法
一般用途:
ALTER VIEW [[database.]schema.]view {
| OWNER TO owner
| SET SCHEMA schema
| { INCLUDE | EXCLUDE | MATERIALIZE } [ SCHEMA ] PRIVILEGES
}
重命名视图:
ALTER VIEW [[database.]schema.]view[,...] RENAME TO new-view-name[,...]
参数
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。- 视图
- 要更改的视图。
-
SET SCHEMA schema
- 将视图从一个架构移动到另一个架构。
-
OWNER TO owner
- 更改视图所有者。
重要
新的视图所有者还应对视图引用的对象具有 SELECT 权限;否则该用户将无法访问视图。 -
{ INCLUDE | EXCLUDE | MATERIALIZE } [SCHEMA] PRIVILEGES
- 指定此视图的架构权限的默认继承:
-
EXCLUDE [SCHEMA] PRIVILEGES
(默认)禁止从架构继承权限。 -
INCLUDE [SCHEMA] PRIVILEGES
将授予视图架构的相同权限授予视图。 -
MATERIALIZE
:将授权复制到视图并在视图上创建一个 GRANT 对象。这将禁用视图上继承的权限标志,让您可以:-
在视图级别授予更具体的权限
-
使用架构级权限作为模板
-
将视图移动到不同的架构
-
更改架构权限而不影响视图
注意
如果在数据库级别禁用继承的权限,架构权限仍然可以实体化。 -
另请参阅 设置表和视图的权限继承。
-
RENAME TO
- 重命名一个或多个视图:
RENAME TO new‑view‑name[,...]
需要满足以下要求:
-
新的视图名称 符合标识符中描述的约定。 同一架构中的序列、表、投影、视图和模型中也必须是唯一的。
-
如果指定多个要重命名的视图,源列表和目标列表必须具有相同数量的名称。
-
重命名一个视图需要对包含该视图的架构具有
USAGE
和CREATE
权限。
-
特权
非超级用户:对架构的 USAGE 权限,为以下之一:
-
视图所有者
-
对视图的 ALTER 权限
对于某些操作,非超级用户必须具备以下架构权限:
示例
将视图 view1
重命名为 view2
:
=> CREATE VIEW view1 AS SELECT * FROM t;
CREATE VIEW
=> ALTER VIEW view1 RENAME TO view2;
ALTER VIEW