GBASE 8C——SQL参考6 sql语法(13)

  1. NOTIFY

功能描述

生成一个通知。

语法格式

NOTIFY channel [ , payload ]

参数说明

  1. channel:要发信号的通道的名称,可以为任意标识符;
  2. payload:要通过通知进行沟通的“载荷”字符串,必须是一个简单的字符串,默认情况下,该字符串不能超过8000字节。

注意事项

NOTIFY队列用来保持已发送未被监听处理的通知信息,如果该队列被占满(默认8GB),调用NOTIFY的事务将在提交时报错。

已经执行了NOTIFY的事务不能为两阶段提交做准备。

也可以使用函数pg_notify(text, text)发送通知,该函数第一个参数为通道名称,第二个参数为载荷。

范例

LISTEN virtual;

LISTEN

NOTIFY virtual;

NOTIFY

Asynchronous notification "virtual" received from server process with PID 2302.

NOTIFY virtual, 'This is the payload';

NOTIFY

Asynchronous notification "virtual" with payload "This is the payload" received from server process with PID 2302.

LISTEN foo;

LISTEN

SELECT pg_notify('fo' || 'o', 'pay' || 'load');

 pg_notify

-----------

(1 row)

Asynchronous notification "foo" with payload "payload" received from server process with PID 2302.

语法兼容

在SQL标准中没有NOTIFY语句。

相关语法

LISTEN, UNLISTEN

  1. PAUSE CLUSTER

功能描述

暂停数据库集群。

语法格式

PAUSE CLUSTER

注意事项

暂停命令会组织任何新事物开始并等待现有事物完成后返回。现有的会话仍连接到CN节点,只是新事物将不会执行。

暂停命令用于数据库维护、重启DN节点和手动故障转移等情况。在暂停状态下应用程序不会收到报错,除非连接超时。

暂停结束可以执行UNPAUSE CLUSTER命令。

范例

PAUSE CLUSTER;

PAUSE CLUSTER

语法兼容

在SQL标准中没有PAUSE CLUSTER语句。

  1. PREPARE

功能描述

创建一个预备语句。

语法格式

PREPARE name [ ( data_type [, ...] ) ] AS statement

参数说明

  1. name:指定预备语句的名字,它必须在该会话中是唯一的;
  2. data_type:参数的数据类型;
  3. statement:是SELECT INSERT、UPDATE、DELETE或VALUES语句之一。

注意事项

要检查PostgreSQL为一个预备语句使用的查询计划,可以使用EXPLAIN,例如EXPLAIN EXECUTE。

可以通过查询pg_prepared_statements系统视图来看到会话中所有可用的预备语句。

范例

PREPARE insert_customer(int,varchar(200),date,varchar(50)) AS INSERT INTO customer VALUES($1,$2,$3,$4);

PREPARE

EXECUTE insert_customer(11, '马超','20200618',15974236);

INSERT 0 1

语法兼容

SQL标准包括一个PREPARE语句,但是它只用于嵌入式SQL。

相关语法

DEALLOCATE, EXECUTE

  1. PREPARE TRANSACTION

功能描述

为当前事务做两阶段提交的准备。

语法格式

PREPARE TRANSACTION transaction_id

参数说明

  1. transaction_id:待提交事务的标识符,用于后面在COMMIT PREPARED或ROLLBACK PREPARED的时候标识这个事务。该标识符必须是一个小于200字节的字符串,且不能和任何当前预备事务已经使用了的标识符同名。

注意事项

事务功能由数据库自动维护,不应显式使用事务功能。

该命令必须在事务中使用。

所有当前可用的准备好事务被列在pg_prepared_xacts系统视图中。

语法兼容

PREPARE TRANSACTION是一种 PostgreSQL扩展。

相关语法

COMMIT PREPARED, ROLLBACK PREPARED

  1. REASSIGN OWNED

功能描述

修改数据库对象的属主。

REASSIGN OWNED要求系统将所有old_roles拥有的数据库对象的属主更改为new_role。

语法格式

REASSIGN OWNED BY { old_role | CURRENT_USER | SESSION_USER } [, ...]

               TO { new_role | CURRENT_USER | SESSION_USER }

参数说明

  1. old_role:旧属主的角色名;
  2. new_role:将要成为这些对象属主的新角色的名字。

注意事项

REASSIGN OWNED常用于在删除角色之前的准备工作。

执行REASSIGN OWNED需要有原角色和目标角色上的权限。

语法兼容

REASSIGN OWNED命令是一种 PostgreSQL扩展。

相关语法

DROP OWNED, DROP ROLE, ALTER DATABASE

  1. REFRESH MATERIALIZED VIEW

功能描述

替换一个物化视图的内容。

语法格式

REFRESH MATERIALIZED VIEW [ CONCURRENTLY ] name

    [ WITH [ NO ] DATA ]

参数说明

  1. CONCURRENTLY:对物化视图的刷新不阻塞在该物化视图上的并发选择;
  2. name:要刷新的物化视图的名称,可以被模式修饰。

注意事项

范例

REFRESH MATERIALIZED VIEW mv_customer;

REFRESH MATERIALIZED VIEW

语法兼容

REFRESH MATERIALIZED VIEW是一种 PostgreSQL扩展。

相关语法

CREATE MATERIALIZED VIEW, ALTER MATERIALIZED VIEW, DROP MATERIALIZED VIEW

  1. REINDEX

功能描述

重建索引。

语法格式

REINDEX [ ( VERBOSE ) ] { INDEX | TABLE | SCHEMA | DATABASE | SYSTEM } name

参数说明

  1. INDEX:重新建立指定的索引;
  2. TABLE:重新建立指定表的所有索引,如果表有从属的"TOAST"表,则这个表也会重建索引;
  3. SCHEMA:重新建立指定架构的所有索引,如果模式的表有从属的"TOAST"表,则这个表也会被重新索引,共享目录上的索引也会被处理,这种情况的REINDEX不能在事务内执行;
  4. DATABASE:重建当前数据库里的所有索引,这种情况的REINDEX不能在事务内执行;
  5. SYSTEM:在当前数据库上重建所有系统表上的索引,不会处理在用户表上的索引,这种情况的REINDEX不能在事务内执行;
  6. name:需要重建索引的索引、表、数据库的名称,表和索引可以被模式修饰;
  7. VERBOSE:在每个索引被重建时打印进度报告。

注意事项

在以下几种情况下需要使用REINDEX重建索引:

  1. 索引崩溃,并且不再包含有效的数据。
  2. 索引变得“臃肿”,包含大量的空页或接近空页。
  3. 为索引更改了存储参数(例如填充因子),并且希望这个更改完全生效。
  4. 使用CONCURRENTLY选项创建索引失败,留下了一个“非法”索引。

范例

REINDEX INDEX customer_idx;

REINDEX

语法兼容

在 SQL 标准中没有REINDEX命令。

  1. RESET

功能描述

将指定的运行时参数恢复为缺省值。

语法格式

RESET configuration_parameter

RESET ALL

参数说明

  1. configuration_parameter:运行时参数的名称,可以使用SHOW ALL命令查看运行时参数;
  2. ALL:所有运行时参数。

注意事项

RESET的事务性行为和SET相同:它的影响将会被事务回滚撤销。

范例

RESET timezone;

RESET

语法兼容

ESET是一种 PostgreSQL扩展。

相关语法

SET, SHOW

  1. REVOKE

功能描述

用于撤销一个或多个角色的权限。

语法格式

REVOKE [ GRANT OPTION FOR ]

    { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }

    [, ...] | ALL [ PRIVILEGES ] }

    ON { [ TABLE ] table_name [, ...]

         | ALL TABLES IN SCHEMA schema_name [, ...] }

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]

    { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )

    [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }

    ON [ TABLE ] table_name [, ...]

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]

    { { USAGE | SELECT | UPDATE }

    [, ...] | ALL [ PRIVILEGES ] }

    ON { SEQUENCE sequence_name [, ...]

         | ALL SEQUENCES IN SCHEMA schema_name [, ...] }

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]

    { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }

    ON DATABASE database_name [, ...]

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]

    { USAGE | ALL [ PRIVILEGES ] }

    ON DOMAIN domain_name [, ...]

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]

    { USAGE | ALL [ PRIVILEGES ] }

    ON FOREIGN DATA WRAPPER fdw_name [, ...]

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]

    { USAGE | ALL [ PRIVILEGES ] }

    ON FOREIGN SERVER server_name [, ...]

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]

    { EXECUTE | ALL [ PRIVILEGES ] }

    ON { FUNCTION function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...]

         | ALL FUNCTIONS IN SCHEMA schema_name [, ...] }

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]

    { USAGE | ALL [ PRIVILEGES ] }

    ON LANGUAGE lang_name [, ...]

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]

    { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }

    ON LARGE OBJECT loid [, ...]

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]

    { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }

    ON SCHEMA schema_name [, ...]

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]

    { CREATE | ALL [ PRIVILEGES ] }

    ON TABLESPACE tablespace_name [, ...]

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]

    { USAGE | ALL [ PRIVILEGES ] }

    ON TYPE type_name [, ...]

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ]

REVOKE [ ADMIN OPTION FOR ]

    role_name [, ...] FROM role_name [, ...]

    [ CASCADE | RESTRICT ]

参数说明

权限类别和参数说明,请参见GRANT

注意事项

关键字PUBLIC表示一个隐式定义的拥有所有角色的组。

任何特定角色拥有的特权包括直接授予该角色的特权、从该角色作为其成员的角色中得到的权限以及授予给PUBLIC的权限。因此,从PUBLIC收回SELECT特权并不一定会意味着所有角色都会失去在该对象上的SELECT特权,那些直接被授予的或者通过另一个角色被授予的角色仍然会拥有它。类似地,从一个用户收回SELECT后,如果PUBLIC仍有SELECT权限,该用户还是可以使用SELECT。

指定GRANT OPTION FOR时,只撤销对该权限授权的权力,而不撤销该权限本身。

如用户A拥有某个表的UPDATE权限,及WITH GRANT OPTION选项,同时A把这个权限赋予了用户B,则用户B持有的权限称为依赖性权限。当用户A持有的权限或者授权选项被撤销时,依赖性权限仍然存在,但如果声明了CASCADE,则所有依赖性权限都被撤销。

一个用户只能撤销由它自己直接赋予的权限。例如,如果用户A被指定授权(WITHADMIN OPTION)选项,且把一个权限赋予了用户B,然后用户B又赋予了用户C,则用户A不能直接将C的权限撤销。但是,用户A可以撤销用户B的授权选项,并且使用CASCADE。这样,用户C的权限就会自动被撤销。另外一个例子:如果A和B都赋予了C同样的权限,则A可以撤销他自己的授权选项,但是不能撤销B的,因此C仍然拥有该权限。

如果执行REVOKE的角色持有的权限是通过多层成员关系获得的,则具体是哪个包含的角色执行的该命令是不确定的。在这种场合下,最好的方法是使用SET ROLE成为特定角色,然后执行REVOKE,否则可能导致删除了不想删除的权限,或者是任何权限都没有删除。

范例

REVOKE INSERT ON g_c1 FROM PUBLIC;

REVOKE

语法兼容

该命令部分兼容SQL。

相关语法

GRANT

  1. ROLLBACK

功能描述

回滚当前事务并取消当前事务中的所有更新。

语法格式

ROLLBACK [ WORK | TRANSACTION ]

参数说明

  1. WORK | TRANSACTION:可选关键字,除了增加可读性,没有任何其他作用。

注意事项

如果不在一个事务内部发出ROLLBACK不会有问题,但是将抛出一个警告信息。

范例

BEGIN;

BEGIN

ROLLBACK;

ROLLBACK

语法兼容

SQL 标准只指定了ROLLBACK和ROLLBACK WORK两种形式。除此之外,这个命令完全符合标准。

相关语法

BEGIN, COMMIT, END, ROLLBACK TO SAVEPOINT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值