创建队列。

语法

可使用 CREATE QUEUE 定义新队列:

CREATE QUEUE name QUEUE TABLE queue_table_name [ ( { option_name option_value} [, ... ] ) ]

其中 option_name 和对应的 option_value 可以是:

TYPE [normal_queue | exception_queue]
RETRIES [INTEGER]
RETRYDELAY [DOUBLE PRECISION]
RETENTION [DOUBLE PRECISION]

说明

CREATE QUEUE 命令允许数据库超级用户或具有系统定义的 aq_administrator_role 特权的任何用户,在当前数据库中创建新队列。

如果队列名称是 schema 限定的,则在指定的 schema 中创建队列。如果 CREATE QUEUE 命令中不包含 schema,则在当前 schema 中创建队列。只能在队列表所在的 schema 中创建队列。队列名称必须唯一,与同一 schema 中其他任何队列的名称均不相同。

说明
  • PolarDB PostgreSQL版(兼容Oracle)包括 CREATE QUEUE SQL 命令的额外语法(Oracle 未提供)。可以将该语法与 DBMS_AQADM 联合使用。
  • 可使用 DROP QUEUE 删除队列。

参数

参数说明
name要创建的队列的名称(可能是 schema 限定的)。
queue_table_name与该队列关联的队列表的名称。
option_name option_value将与新队列关联的任何选项的名称,以及该选项对应的值。如果对 CREATE QUEUE 的调用包含重复的选项名称,则服务器将返回错误。支持以下值:
  • TYPE:指定 normal_queue 以表示队列为正常队列,或指定 exception_queue 以表示队列为异常队列。异常队列只接受出队操作。
  • RETRIES:INTEGER 值,指定尝试从队列中删除消息的最大次数。
  • RETRYDELAY:DOUBLE PRECISION 值,指定服务器在重试消息之前将等待的 ROLLBACK 后的秒数。
  • RETENTION:DOUBLE PRECISION 值,指定消息在出队之后在队列表中将保存的秒数。

示例

以下命令创建名为 work_order 的队列,该队列与名为 work_order_table 的队列表关联:

CREATE QUEUE work_order QUEUE TABLE work_order_table (RETRIES 5, RETRYDELAY 2);

服务器将允许尝试 5 次从队列中删除消息,且两次尝试之间强制实施 2 秒重试延迟。