SET
设置服务器配置参数的值。使用 SET 命令仅覆盖当前会话或事务持续时间的设置。
使用 RESET 命令将参数还原为其默认值。
您可以通过多种方式更改服务器配置参数。有关更多信息,请参阅 修改服务器配置。
语法
SET { [ SESSION | LOCAL ] { SEED | parameter_name } { TO | = } { value | 'value' | DEFAULT } | SEED TO value }
以下语句将设置会话上下文变量的值。
SET { [ SESSION | LOCAL ] variable_name { TO | = } { value | 'value' }
参数
- SESSION
-
指定设置对当前会话有效。默认值。
- variable_name
-
指定为会话设置的上下文变量的名称。
命名约定是一个用点分隔的、包含两个部分的名称,例如 identifier.identifier。只允许使用一个点分隔符。使用遵循 Amazon Redshift 的标准标识符规则的标识符。有关更多信息,请参阅名称和标识符。不允许使用分隔标识符。
- LOCAL
-
指定设置对当前事务有效。
- SEED TO value
-
设置由 RANDOM 函数用于生成随机数的内部种子。
SET SEED 采用介于 0 和 1 之间的数值,并将此数乘以 (231-1) 以用于 RANDOM 函数 函数。如果在多次调用 RANDOM 之前使用 SET SEED,则 RANDOM 会按可预测的顺序生成数字。
- parameter_name
-
要设置的参数的名称。有关参数的信息,请参阅修改服务器配置。
- 值
-
新的参数值。使用单引号将值设置为特定字符串。如果使用 SET SEED,则此参数包含 SEED 值。
- DEFAULT
-
将参数设置为默认值。
示例
更改当前会话的参数
以下示例设置日期样式:
set datestyle to 'SQL,DMY';
设置工作负载管理的查询组
如果查询组在队列定义中作为集群的 WLM 配置的一部分列出,则可将 QUERY_GROUP 参数设置为列出的查询组名称。后续查询将分配给关联的查询队列。QUERY_GROUP 设置在会话的持续时间内或遇到 RESET QUERY_GROUP 命令之前保持有效。
此示例将两个查询作为查询组“priority”的一部分运行,然后重置查询组。
set query_group to 'priority'; select tbl, count(*)from stv_blocklist; select query, elapsed, substring from svl_qlog order by query desc limit 5; reset query_group;
有关更多信息,请参阅 实施工作负载管理。
更改会话的默认身份命名空间
数据库用户可以设置 default_identity_namespace
。此示例说明如何使用 SET SESSION
来覆盖当前会话持续时间的设置,然后显示新的身份提供者值。当您将身份提供者与 Redshift 和 IAM Identity Center 结合使用时,最常使用此方法。有关将身份提供者与 Redshift 结合使用的更多信息,请参阅将 Redshift 与 IAM Identity Center 连接,为用户提供单点登录体验。
SET SESSION default_identity_namespace = 'MYCO'; SHOW default_identity_namespace;
运行命令后,您可以运行 GRANT 语句或 CREATE 语句,如下所示:
GRANT SELECT ON TABLE mytable TO alice; GRANT UPDATE ON TABLE mytable TO salesrole; CREATE USER bob password 'md50c983d1a624280812631c5389e60d48c';
在这种情况下,设置默认身份命名空间的效果等同于为每个身份添加命名空间前缀。在本例中,alice
替换为 MYCO:alice
。有关与 IAM Identity Center 的 Redshift 配置相关的设置的更多信息,请参阅 ALTER SYSTEM 和 ALTER IDENTITY PROVIDER。
设置查询组的标签
QUERY_GROUP 参数为在同一个会话中 SET 命令之后执行的一个或多个查询定义标签。反过来,在执行查询并可将其用于约束从 STL_QUERY 和 STV_INFLIGHT 系统表以及 SVL_QLOG 视图返回的结果时,将记录此标签。
show query_group; query_group ------------- unset (1 row) set query_group to '6 p.m.'; show query_group; query_group ------------- 6 p.m. (1 row) select * from sales where salesid=500; salesid | listid | sellerid | buyerid | eventid | dateid | ... ---------+--------+----------+---------+---------+--------+----- 500 | 504 | 3858 | 2123 | 5871 | 2052 | ... (1 row) reset query_group; select query, trim(label) querygroup, pid, trim(querytxt) sql from stl_query where label ='6 p.m.'; query | querygroup | pid | sql -------+------------+-------+---------------------------------------- 57 | 6 p.m. | 30711 | select * from sales where salesid=500; (1 row)
查询组标签是一个非常有用的机制,可用于隔离作为脚本一部分运行的单个查询或查询组。您不需要通过查询 ID 来标识和跟踪查询;而可以通过查询的标签来跟踪查询。
设置用于生成随机数的种子值
以下示例将 SEED 选项与 SET 结合使用,使 RANDOM 函数按可预测的顺序生成数字。
首先,返回三个 RANDOM 整数,而不先设置 SEED 值:
select cast (random() * 100 as int); int4 ------ 6 (1 row) select cast (random() * 100 as int); int4 ------ 68 (1 row) select cast (random() * 100 as int); int4 ------ 56 (1 row)
现在,将 SEED 值设置为 .25
,并返回 3 个以上的 RANDOM 数字:
set seed to .25; select cast (random() * 100 as int); int4 ------ 21 (1 row) select cast (random() * 100 as int); int4 ------ 79 (1 row) select cast (random() * 100 as int); int4 ------ 12 (1 row)
最后,将 SEED 值重置为 .25
,并验证 RANDOM 是否返回与前三个调用相同的结果:
set seed to .25; select cast (random() * 100 as int); int4 ------ 21 (1 row) select cast (random() * 100 as int); int4 ------ 79 (1 row) select cast (random() * 100 as int); int4 ------ 12 (1 row)
以下示例设置自定义上下文变量。
SET app_context.user_id TO 123; SET app_context.user_id TO 'sample_variable_value';