NOTIFY
功能描述
生成一个通知。
语法格式
NOTIFY channel [ , payload ]
参数说明
channel:要发信号的通道的名称,可以为任意标识符;
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
PAUSE CLUSTER
功能描述
暂停数据库集群。
语法格式
PAUSE CLUSTER
注意事项
暂停命令会组织任何新事物开始并等待现有事物完成后返回。现有的会话仍连接到CN节点,只是新事物将不会执行。
暂停命令用于数据库维护、重启DN节点和手动故障转移等情况。在暂停状态下应用程序不会收到报错,除非连接超时。
暂停结束可以执行UNPAUSE CLUSTER命令。
范例
PAUSE CLUSTER;
PAUSE CLUSTER
语法兼容
在SQL标准中没有PAUSE CLUSTER语句。
PREPARE
功能描述
创建一个预备语句。
语法格式
PREPARE name [ ( data_type [, ...] ) ] AS statement
参数说明
name:指定预备语句的名字,它必须在该会话中是唯一的;
data_type:参数的数据类型;
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
PREPARE TRANSACTION
功能描述
为当前事务做两阶段提交的准备。
语法格式
PREPARE TRANSACTION transaction_id
参数说明
transaction_id:待提交事务的标识符,用于后面在COMMIT PREPARED或ROLLBACK PREPARED的时候标识这个事务。该标识符必须是一个小于200字节的字符串,且不能和任何当前预备事务已经使用了的标识符同名。
注意事项
事务功能由数据库自动维护,不应显式使用事务功能。
该命令必须在事务中使用。
所有当前可用的准备好事务被列在pg_prepared_xacts系统视图中。
语法兼容
PREPARE TRANSACTION是一种 PostgreSQL扩展。
相关语法
COMMIT PREPARED, ROLLBACK PREPARED
REASSIGN OWNED
功能描述
修改数据库对象的属主。
REASSIGN OWNED要求系统将所有old_roles拥有的数据库对象的属主更改为new_role。
语法格式
REASSIGN OWNED BY { old_role | CURRENT_USER | SESSION_USER } [, ...]
TO { new_role | CURRENT_USER | SESSION_USER }
参数说明
old_role:旧属主的角色名;
new_role:将要成为这些对象属主的新角色的名字。
注意事项
REASSIGN OWNED常用于在删除角色之前的准备工作。
执行REASSIGN OWNED需要有原角色和目标角色上的权限。
语法兼容
REASSIGN OWNED命令是一种 PostgreSQL扩展。
相关语法
DROP OWNED, DROP ROLE, ALTER DATABASE
REFRESH MATERIALIZED VIEW
功能描述
替换一个物化视图的内容。
语法格式
REFRESH MATERIALIZED VIEW [ CONCURRENTLY ] name
[ WITH [ NO ] DATA ]
参数说明
CONCURRENTLY:对物化视图的刷新不阻塞在该物化视图上的并发选择;
name:要刷新的物化视图的名称,可以被模式修饰。
注意事项
无
范例
REFRESH MATERIALIZED VIEW mv_customer;
REFRESH MATERIALIZED VIEW
语法兼容
REFRESH MATERIALIZED VIEW是一种 PostgreSQL扩展。
相关语法
CREATE MATERIALIZED VIEW, ALTER MATERIALIZED VIEW, DROP MATERIALIZED VIEW
REINDEX
功能描述
重建索引。
语法格式
REINDEX [ ( VERBOSE ) ] { INDEX | TABLE | SCHEMA | DATABASE | SYSTEM } name
参数说明
INDEX:重新建立指定的索引;
TABLE:重新建立指定表的所有索引,如果表有从属的"TOAST"表,则这个表也会重建索引;
SCHEMA:重新建立指定架构的所有索引,如果模式的表有从属的"TOAST"表,则这个表也会被重新索引,共享目录上的索引也会被处理,这种情况的REINDEX不能在事务内执行;
DATABASE:重建当前数据库里的所有索引,这种情况的REINDEX不能在事务内执行;
SYSTEM:在当前数据库上重建所有系统表上的索引,不会处理在用户表上的索引,这种情况的REINDEX不能在事务内执行;
name:需要重建索引的索引、表、数据库的名称,表和索引可以被模式修饰;
VERBOSE:在每个索引被重建时打印进度报告。
注意事项
在以下几种情况下需要使用REINDEX重建索引:
索引崩溃,并且不再包含有效的数据。
索引变得“臃肿”,包含大量的空页或接近空页。
为索引更改了存储参数(例如填充因子),并且希望这个更改完全生效。
使用CONCURRENTLY选项创建索引失败,留下了一个“非法”索引。
范例
REINDEX INDEX customer_idx;
REINDEX
语法兼容
在 SQL 标准中没有REINDEX命令。
RESET
功能描述
将指定的运行时参数恢复为缺省值。
语法格式
RESET configuration_parameter
RESET ALL
参数说明
configuration_parameter:运行时参数的名称,可以使用SHOW ALL命令查看运行时参数;
ALL:所有运行时参数。
注意事项
RESET的事务性行为和SET相同:它的影响将会被事务回滚撤销。
范例
RESET timezone;
RESET
语法兼容
ESET是一种 PostgreSQL扩展。
相关语法
SET, SHOW
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
ROLLBACK
功能描述
回滚当前事务并取消当前事务中的所有更新。
语法格式
ROLLBACK [ WORK | TRANSACTION ]
参数说明
WORK | TRANSACTION:可选关键字,除了增加可读性,没有任何其他作用。
注意事项
如果不在一个事务内部发出ROLLBACK不会有问题,但是将抛出一个警告信息。
范例
BEGIN;
BEGIN
ROLLBACK;
ROLLBACK
语法兼容
SQL 标准只指定了ROLLBACK和ROLLBACK WORK两种形式。除此之外,这个命令完全符合标准。
相关语法
BEGIN, COMMIT, END, ROLLBACK TO SAVEPOINT
————————————————
版权声明:本文为优快云博主「aisirea」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/aisirea/article/details/125979956