PolarDB PostgreSQL版(兼容Oracle)包含 ALTER QUEUE SQL 命令的额外语法(Oracle 未提供)。此语法可与 DBMS_AQADM 包关联使用。

说明

ALTER QUEUE允许具有 aq_administrator_role 特权的用户修改队列的属性。此命令有四种形式。

更改队列的名称

此命令的第一种形式可更改队列的名称。语法如下

ALTER QUEUE queue_name RENAME TO new_name
表 1. 参数信息
参数说明
queue_name现有队列的名称(可能是 schema 限定的)。
RENAME TO包含 RENAME TO 子句和队列的新名称可重命名队列。
new_name队列的新名称。

修改队列的属性

ALTER QUEUE 命令的第二种形式可修改队列的属性:

ALTER QUEUE queue_name SET [ ( { option_name option_value  } [,SET option_name
表 2. 参数信息
参数说明
queue_name现有队列的名称(可能是 schema 限定的)。

包含 SET 子句和 option_name/option_value 对可修改队列的属性:

option_name option_value

要与新队列关联的一个或多个选项的名称和相应的选项值。如果您提供重复的选项名,服务器将返回错误。

  • 如果 option_name 为 retries,请提供一个表示可以尝试取消排队的次数的整数。
  • 如果option_name 为 retrydelay,请提供以秒为单位表示延迟的双精度值。
  • 如果 option_name 为 retention,请提供以秒为单位表示保留时间的双精度值。

启用或禁用排队和/或取消排队

使用 ALTER QUEUE 命令的第三种形式可在特定队列上启用或禁用排队和/或取消排队:

ALTER QUEUE queue_name ACCESS { START | STOP } [ FOR { enqueue | dequeue } ] [ NOWAIT ]
表 3. 参数信息
参数说明
queue_name现有队列的名称(可能是 schema 限定的)。
ACCESS包含 ACCESS 关键字可在特定队列上启用或禁用排队和/或取消排队。
START | STOP使用 START 和 STOP 关键字可指示所需的队列状态。
FOR enqueue|dequeue使用 FOR 子句可指示是否指明指定队列上的排队或取消排队活动的状态。
NOWAIT包含 NOWAIT 关键字可指定服务器在更改队列状态之前不应等待未完成事务的完成。NOWAIT 关键字只能在指定 ACCESS 值 STOP 时使用。如果 NOWAIT 与 ACCESS 值 START 一起指定,则服务器将返回错误。

回调特定队列的ADD或DROP详细信息

将第四种形式用于特定队列的 ADD 或 DROP 回调详细信息。

ALTER QUEUE queue_name { ADD | DROP } CALL TO location_name [ WITH callback_option ]
参数说明
queue_name现有队列的名称(可能是 schema 限定的)。
ADD | DROP包含 ADD 或 DROP 关键字可允许添加或删除队列的回调详细信息。
location_namelocation_name 指定回调存储过程的名称。
callback_optioncallback_option 可以是 context;在包含此子句时,指定 RAW 值。

示例

以下示例将队列的名称从 work_queue_east 更改为 work_order:

ALTER QUEUE work_queue_east RENAME TO work_order;

以下示例修改一个名为 work_order 的队列,并将重试次数设置为 100,将重试之间的延迟设置为 2 秒,并将队列保留取消排队的消息的时间长度设置为 10 秒:

ALTER QUEUE work_order SET (retries 100, retrydelay 2, retention 10);

以下命令在名为 work_order 的队列中启用排队和取消排队:

ALTER QUEUE work_order ACCESS START;
ALTER QUEUE work_order ACCESS START FOR enqueue;
ALTER QUEUE work_order ACCESS START FOR dequeue;

以下命令在名为 work_order 的队列中禁用排队和取消排队:

ALTER QUEUE work_order ACCESS STOP NOWAIT;
ALTER QUEUE work_order ACCESS STOP FOR enqueue;
ALTER QUEUE work_order ACCESS STOP FOR dequeue;