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 操作

ENABLE | DISABLE
指示在表级别启用还是禁用访问策略。
COPY TO TABLE tablename
将现有访问策略复制到指定的表。复制的访问策略包括启用/禁用和 GRANT TRUSTED 状态。

需要满足以下要求:

  • 复制列访问策略:

    • 目标表必须包含相同名称和兼容数据类型的列。

    • 目标列不得包含访问策略。

  • 复制行访问策略:目标表不得包含访问策略。

特权

修改访问策略

非超级用户:表的所有权

复制访问策略

非超级用户:源表和目标表的所有权

示例

请参阅 管理访问策略

另请参阅

CREATE ACCESS POLICY

2 - 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
要修改的现有容错组名称。
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
为此函数定义的参数的逗号分隔列表。如果无列表,请指定一个空列表。
OWNER TO new‑owner
将函数所有权转移给其他用户。
RENAME TO new‑name
重命名此函数。
SET SCHEMA new‑schema
将函数移动到其他架构。

特权

非超级用户:对架构的 USAGE 权限,为以下之一:

  • 函数所有者

  • 对函数的 ALTER 权限

对于某些操作,非超级用户还必须具备以下架构权限:

另请参阅

CREATE AGGREGATE FUNCTION

6.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
为此函数定义的参数的逗号分隔列表。如果无列表,请指定一个空列表。
OWNER TO new‑owner
将函数所有权转移给其他用户。
RENAME TO new‑name
重命名此函数。
SET FENCED { true | false }
指定是否为此函数启用隔离模式
SET SCHEMA new‑schema
将函数移动到其他架构。

权限

非超级用户:对架构的 USAGE 权限,为以下之一:

  • 函数所有者

  • 对函数的 ALTER 权限

对于某些操作,非超级用户还必须具备以下架构权限:

另请参阅

CREATE ANALYTIC FUNCTION

6.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
为此函数定义的参数的逗号分隔列表。如果无列表,请指定一个空列表。
OWNER TO new‑owner
将函数所有权转移给其他用户。
RENAME TO new‑name
重命名此函数。
SET FENCED { true | false }
指定是否为此函数启用隔离模式
SET SCHEMA new‑schema
将函数移动到其他架构。

权限

非超级用户:对架构的 USAGE 权限,为以下之一:

  • 函数所有者

  • 对函数的 ALTER 权限

对于某些操作,非超级用户还必须具备以下架构权限:

另请参阅

CREATE FILTER

6.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
为此函数定义的参数的逗号分隔列表。如果无列表,请指定一个空列表。
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
为此函数定义的参数的逗号分隔列表。如果无列表,请指定一个空列表。
OWNER TO new‑owner
将函数所有权转移给其他用户。
RENAME TO new‑name
重命名此函数。
SET FENCED { true | false }
指定是否为此函数启用隔离模式
SET SCHEMA new‑schema
将函数移动到其他架构。

权限

非超级用户:对架构的 USAGE 权限,为以下之一:

  • 函数所有者

  • 对函数的 ALTER 权限

对于某些操作,非超级用户还必须具备以下架构权限:

另请参阅

CREATE PARSER

6.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
为此函数定义的参数的逗号分隔列表。如果无列表,请指定一个空列表。
OWNER TO new‑owner
将函数所有权转移给其他用户。
RENAME TO new‑name
重命名此函数。
SET FENCED { true | false }
指定是否为此函数启用隔离模式
SET SCHEMA new‑schema
将函数移动到其他架构。

权限

非超级用户:对架构的 USAGE 权限,为以下之一:

  • 函数所有者

  • 对函数的 ALTER 权限

对于某些操作,非超级用户还必须具备以下架构权限:

另请参阅

CREATE SOURCE

6.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
为此函数定义的参数的逗号分隔列表。如果无列表,请指定一个空列表。
OWNER TO new‑owner
将函数所有权转移给其他用户。
RENAME TO new‑name
重命名此函数。
SET FENCED { true | false }
指定是否为此函数启用隔离模式
SET SCHEMA new‑schema
将函数移动到其他架构。

权限

非超级用户:对架构的 USAGE 权限,为以下之一:

  • 函数所有者

  • 对函数的 ALTER 权限

对于某些操作,非超级用户还必须具备以下架构权限:

另请参阅

CREATE TRANSFORM FUNCTION

7 - 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 相同。

当前库和替换库必须使用同一种语言编写。

语法

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 软件包必须本地安装在每个节点上,包括外部依赖项。

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';

示例

此示例显示了如何使用新文件更新名为 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 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:该节点仅为计算目的而保留。执行节点不包含段或数据。

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

更新现有通知程序。

语法

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 捆绑包时,都必须重复此步骤。

  1. 在设置 TLSMODE、证书和 CA 捆绑包时,使用 CREATE 或 ALTER 以禁用通知程序。

    => ALTER NOTIFIER encrypted_notifier
        DISABLE
        TLSMODE 'verify-ca'
        CA BUNDLE ca_bundle2;
    
  2. 更改通知程序并为 SASL_SSL 设置适合的 rdkafka 适配器参数。

    => ALTER NOTIFIER encrypted_notifier PARAMETERS
      'sasl.username=user;sasl.password=password;sasl.mechanism=PLAIN;security.protocol=SASL_SSL';
    
  3. 启用通知程序。

    => 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

超级用户

RENAMESCHEMA 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 权限以及以下锚表权限之一:

示例

=> 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 ]

参数

特权

超级用户

配置文件设置和客户端身份验证

以下配置文件设置会影响客户端身份验证方法,例如 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
资源池的名称。内置池名称不能用于用户定义的池。
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 资源,则此查询无效。

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 上执行。

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%:百分比 此池的 MAXMEMORYSIZE

  • integer{K|M|G|T}:以千字节、兆字节、千兆字节或太字节为单位的内存量,最大为 MAXMEMORYSIZE

  • NONE (默认值):无限制;池可以从 GENERAL 池中借用任意数量的可用内存,其限制由以下设置: MAXMEMORYSIZE

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:一个负整数或正整数值。数字越大,表示优先级越高:

    • 用户定义的池: ‑100100

    • 内置池 SYSQUERYRECOVERY TM‑110110

  • 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 资源池的 MAXMEMORYSIZEMEMORYSIZE 减小到 0%。将这些设置更改为 0 会阻止子群集运行 Tuple Mover 合并操作。

=> ALTER RESOURCE POOL TM FOR SUBCLUSTER dashboard MEMORYSIZE '0%'
   MAXMEMORYSIZE '0%';

有关详细信息,请参阅调整 Tuple Mover 池设置

另请参阅

20 - ALTER ROLE

重命名现有角色

语法

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]

默认情况下,重新分配的架构中对象的所有权保持不变。要将架构对象的所有权重新分配给新架构所有者,请使用 CASCADEOWNER TO 子句进行限定。有关详细信息,请参阅下面的级联架构所有权

DISK_QUOTA
以下几项之一:
  • 一个字符串,整数后跟支持的单位:K、M、G 或 T。如果新值小于当前使用量,操作将成功,但在使用量降至新配额以下之前,将无法使用更多磁盘空间。

  • SET NULL,用于移除配额。

有关详细信息,请参阅磁盘配额

RENAME TO
重命名一个或多个架构:
RENAME TO new-schema-name[,...]

需要满足以下要求:

  • 新架构名称符合标识符中描述的约定。此外,该名称在数据库中所有序列、表、投影、视图、模型和架构的名称中必须是唯一的。

  • 如果指定多个要重命名的架构,则源列表和目标列表必须具有相同数量的名称。

特权

以下几项之一:

  • 超级用户

  • 架构所有者

级联架构所有权

默认情况下,ALTER SCHEMA...OWNER TO 不会影响目标架构中对象的所有权或授予给这些对象的权限。如果使用 CASCADEOWNER TO 子句进行限定,Vertica 将对目标架构中的对象执行以下操作:

  • 将先前架构所有者所拥有的对象所有权转移给新的所有者。

  • 撤销上一个架构所有者授予的所有对象权限。

如果由非超级用户发出,ALTER SCHEMA...OWNER TO CASCADE 会忽略属于其他用户的所有对象,并就其无法更改的对象返回通知。例如:

  1. 架构 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     |
    
  2. 用户 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     |
    
  3. 用户 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;

示例

以下示例将架构 S1S2 分别重命名为 S3S4

=> 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。

MINVALUE integer
NO MINVALUE (默认值)
修改序列可以生成的最小值。如果更改了此值且当前值超出了范围,增量大于零时当前值将更改为最小值,增量小于零时当前值将更改为最大值。
MAXVALUE integer
NO MAXVALUE (默认值)
修改序列的最大值。如果更改了此值且当前值超出了范围,增量大于零时当前值将更改为最小值,增量小于零时当前值将更改为最大值。
RESTART [WITH] integer
将序列的当前值更改为 integer。下一次调用 NEXTVAL 将返回 integer
CACHEinteger
NO 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 
}

参数

[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
    }
    

    如果列所属的复杂类型既不是标量类型也不是标量类型数组,则无法更改其数据类型。存在一个例外:在外部表中,您可以将基元列类型更改为复杂类型。

    设置 DEFAULTSET USING 表达式对现有列值没有影响。要使用列的 DEFAULTSET USING 表达式刷新列,请按如下方式对其进行更新:

    • SET USING 列:对该表调用 REFRESH_COLUMNS

    • DEFAULT 列:按如下方式更新该列:

      UPDATE table-name SET column-name=DEFAULT;
      

使用 DEFAULTSET 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 自动将锚定到源表的所有投影移动到目标架构。它还将所有 IDENTITYAUTO_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]

可以使用关键字 ENABLEDDISABLED 来限定此子句。请参阅下面的强制执行约束

如果您没有命名主键约束,Vertica 会分配名称 C_PRIMARY

FOREIGN KEY
添加引用完整性约束,以将一个或多个列定义为外键,如下所示:
FOREIGN KEY (column[,... ]) REFERENCES table [(column[,... ])]

如果省略了 column,Vertica 将引用 table 中的主键。

如果您没有命名外键约束,Vertica 会分配名称 C_FOREIGN

UNIQUE
指定一个列或一组列中的数据对于所有表行都是唯一的,如下所示:
UNIQUE (column[,...]) [ENABLED | DISABLED]

可以使用关键字 ENABLEDDISABLED 来限定此子句。请参阅下面的强制执行约束

如果您没有命名唯一约束,Vertica 会分配名称 C_UNIQUE

CHECK
指定检查条件,即一个返回布尔值的表达式,如下所示:
CHECK (expression) [ENABLED | DISABLED]

可以使用关键字 ENABLEDDISABLED 来限定此子句。请参阅下面的强制执行约束

如果您没有命名检查约束,Vertica 会分配名称 C_CHECK

权限

非超级用户:表所有者,或以下权限:

  • 对架构的 USAGE 权限

  • 对表的 ALTER 权限

  • 对表的 SELECT 权限,用于在表上启用或禁用约束实施

强制执行约束

表可以使用关键字 ENABLEDDISABLED 指定 Vertica 是否自动强制执行主键、唯一键或检查约束。如果省略了 ENABLEDDISABLED,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_b0store_dimension_p2PROJECTIONS 列表分别通过投影名称和基本名称引用这两个投影。可以通过任意一种方式引用投影;在这两种情况下,更改都会传播到投影的所有伙伴实例并相应地存储在其 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 ...

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

特权

非超级用户: 对 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]
将指定的配置参数重置为其默认值。

用户帐户参数

以逗号分隔列表的形式指定一个或多个用户帐户参数及其设置:

account‑parameter value[,...]

参数

设置

ACCOUNT

锁定或解锁用户对数据库的访问,可以用以下操作之一:

  • UNLOCK (默认值)

  • LOCK 可使新用户无法登录,在为不需要直接访问权限的用户创建帐户时十分有用。

DEFAULT ROLE

指定哪些角色是此用户的默认角色,设置为以下之一:

  • NONE (默认值):删除所有默认角色。

  • ALL:将所有用户角色设置为默认值。

当用户登录时,会自动激活默认角色。此参数指定的角色将取代之前分配的任何角色。

GRACEPERIOD

指定用户查询可以被任何会话套接字拦截多长时间,可以是以下值之一:

  • NONE (默认值):移除先前对会话查询设置的任何宽限期。

  • 'interval':将当前会话查询的最长宽限期指定为间隔,最长 20 天。

有关详细信息,请参阅处理会话套接字阻止

IDENTIFIED BY

更改用户密码:

IDENTIFIED BY '[new-password]'

['hashed-password' SALT 'hash-salt'] [REPLACE 'current-password']

  • new-password:Vertica 随后将进行哈希处理以用于内部存储的 ASCII 密码。如果为空字符串,则该用户无需密码即可访问数据库。

  • hashed-password: 经过预哈希处理的密码及其关联的十六进制字符串 hash-salt。以这种方式设置密码会绕过所有密码复杂性要求

  • REPLACE:对于必须提供当前密码的非超级用户来说,为必需选项。非超级用户只能更改自己的密码。

有关详细信息,请参阅“密码指导原则”和“创建数据库名称和密码”。

IDLESESSIONTIMEOUT

系统在断开空闲会话之前所等待的时间长度,可以为以下值之一:

  • NONE (默认值):未对此用户设置限制。如果省略此参数,则不会对此用户设置限制。

  • 'interval':一个时间间隔值,最长为一年。

有关详细信息,请参阅管理客户端连接

MAXCONNECTIONS

设置用户可以与服务器建立的最大连接数,可以为以下值之一:

  • NONE (默认值):没有设置限制。如果省略此参数,则用户可以在数据库群集中拥有无限数量的连接。

  • integer ON DATABASE:设置为 integer,跨数据库群集的最大连接数。

  • integer ON NODE:设置为 integer,到每个节点的最大连接数。

有关详细信息,请参阅管理客户端连接

MEMORYCAP

设置可以为用户请求分配的内存量,可以为下之值一:

  • NONE (默认值):没有限制

  • 一个字符串值,用于指定内存限制,为以下几项之一:

    • ' int%' 将最大值表示为资源管理器可用总内存的百分比到,其中 int 是 0 到 100 之间的整数值。例如:

      MEMORYCAP '40%'

    • 'int{K|M|G|T}' 表示内存分配(以千字节、兆字节、千兆字节或太字节为单位)。例如:

      MEMORYCAP '10G'

PASSWORD EXPIRE

强制用户密码立即到期。用户必须在下次登录时更改密码。

PROFILE

分配一个配置文件来控制此用户的密码要求,可以为以下值之一:

  • DEFAULT (默认值):将默认数据库配置文件分配给该用户。

  • profile-name:该配置文件由 CREATE PROFILE 定义。

RENAME TO

为用户分配新的用户名。分配给用户的所有权限保持不变。

RESOURCE POOL 将默认资源池文件分配给该用户。还必须对用户授予此池的权限,除非该池的权限设置为 PUBLIC
RUNTIMECAP

设置此用户的查询可以执行多长时间,可以为以下值之一:

  • NONE (默认值):未对此用户设置限制。如果省略此参数,则不会对此用户设置限制。

  • 'interval':一个时间间隔值,最长为一年。

查询的运行时限制可以在三个级别设置:用户的运行时限制、用户的资源池和会话设置。有关详细信息,请参阅为查询设置运行时限制

SEARCH_PATH

指定用户默认搜索路径,此路径会指示 Vertica 在哪个架构中搜索引用的未限定表和 UDF,可以是以下值之一:

  • DEFAULT (默认值):按如下方式设置搜索路径:

    "$user", public, v_catalog, v_monitor, v_internal
    
  • 以逗号分隔的架构列表。

有关详细信息,请参阅设置搜索路径

SECURITY_ALGORITHM 'algorithm'

设置哈希身份验证的用户级别安全算法,其中 algorithm 为以下之一:

  • NONE (默认值):使用系统级别参数, SecurityAlgorithm

  • SHA512

  • MD5

当您更改 SECURITY_ALGORITHM 值时,用户密码将会过期,因此必须重置密码。

TEMPSPACECAP

设置用户请求可用的临时文件存储量,可以为下之值一:

  • NONE (默认值):没有限制

  • 指定存储限制的字符串值,可以为下之值一:

    • int% 将最大值表示为资源管理器可用的临时总存储的百分比,其中 int 为 0 至 100 之间的整数值。例如:

      TEMPSPACECAP '40%'

    • int{K|M|G|T} 以 KB、MB、GB 或 TB 表示存储分配。例如:

      TEMPSPACECAP '10G'

特权

非超级用户可以在自己的用户帐户上更改以下选项:

  • 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-512newpassword。执行 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
更改视图所有者。
{ INCLUDE | EXCLUDE | MATERIALIZE } [SCHEMA] PRIVILEGES
指定此视图的架构权限的默认继承:
  • EXCLUDE [SCHEMA] PRIVILEGES (默认)禁止从架构继承权限。

  • INCLUDE [SCHEMA] PRIVILEGES 将授予视图架构的相同权限授予视图。

  • MATERIALIZE:将授权复制到视图并在视图上创建一个 GRANT 对象。这将禁用视图上继承的权限标志,让您可以:

    • 在视图级别授予更具体的权限

    • 使用架构级权限作为模板

    • 将视图移动到不同的架构

    • 更改架构权限而不影响视图

另请参阅 设置表和视图的权限继承

RENAME TO
重命名一个或多个视图:
RENAME TO new‑view‑name[,...]

需要满足以下要求:

  • 新的视图名称 符合标识符中描述的约定。 同一架构中的序列、表、投影、视图和模型中也必须是唯一的。

  • 如果指定多个要重命名的视图,源列表和目标列表必须具有相同数量的名称。

  • 重命名一个视图需要对包含该视图的架构具有 USAGECREATE 权限。

特权

非超级用户:对架构的 USAGE 权限,为以下之一:

  • 视图所有者

  • 对视图的 ALTER 权限

对于某些操作,非超级用户必须具备以下架构权限:

示例

将视图 view1 重命名为 view2

=> CREATE VIEW view1 AS SELECT * FROM t;
CREATE VIEW
=> ALTER VIEW view1 RENAME TO view2;
ALTER VIEW