华为云用户手册

  • 接口类型 表1 接口类型说明 请求方法 POST 访问URI 用户在应用中配置的批量接收状态报告地址。 通信协议 HTTPS/HTTP 回调接口使用HTTPS协议时,服务端需支持TLS1.2,加密套件需支持 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384中的一种或多种。
  • 注意事项 短信发送成功后,平台收到状态报告,会实时推送状态报告给用户,最迟不超过72小时。 平台推送汇聚后的状态报告,状态报告存在一定时延。 短信平台批量推送状态报告,单次最多推送50条。 若“statusCallback”字段已设置,则优先使用该字段的取值作为短信状态报告的回调地址。 若“statusCallback”字段未设置,则使用应用中配置的批量接收状态报告地址。 若“statusCallback”字段未设置且未在应用端配置批量接收状态报告地址,则用户无法接收短信平台主动发送的状态报告。
  • 请求示例 POST /batchReport HTTP/1.1 Host: 205.145.111.168:9330 Content-Type: application/JSON;charset=UTF-8 Connection: close Pooltype: approxy Ompsid: 7f540777fe4b40dfb3c21d10f48781e3 TerminalIP: ****** TrcModule: AP UserTrace: application TraceHandle: DMZ_818405 {"statusReportList":[{"sequence":"1","total":"1","updateTime":"2023-04-18T07:26:00Z","source":"2","smsMsgId":"f6dcba15-ced9-45f7-9f5e-af82328c5253_1188602","status":"DELIVRD"},{"sequence":"1","total":"1","updateTime":"2023-04-18T07:26:00Z","source":"2","smsMsgId":"f6dcba15-ced9-45f7-9f5e-af82328c5253_123456","status":"DELIVRD"}]}
  • 请求消息体 请求消息体通常以结构化格式发出,与请求消息头中Content-type对应,传递除请求消息头之外的内容。若请求消息体中参数支持中文,则中文字符必须为UTF-8编码。 每个接口的请求消息体内容不同,也并不是每个接口都需要有请求消息体(或者说消息体为空),GET、DELETE操作类型的接口就不需要消息体,消息体具体内容需要根据具体接口而定。 对于获取用户Token接口,您可以从接口的请求部分看到所需的请求参数及参数说明。将消息体加入后的请求如下所示,加粗的斜体字段需要根据实际值填写,其中username为用户名,********为用户的登录密码,domainname为用户所属的账号名称,xxxxxxxxxxxxxxxxxx为project的名称,如“cn-north-1”,获取方法请参见获取账号、用户、项目的名称和ID。 scope参数定义了Token的作用域,上面示例中获取的Token仅能访问project下的资源。您还可以设置Token作用域为某个账号下所有资源或账号的某个project下的资源,详细定义请参见获取用户Token。 POST https://iam.cn-north-1.myhuaweicloud.com/v3/auth/tokens Content-Type: application/json { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", "password": "********", "domain": { "name": "domainname" } } } }, "scope": { "project": { "name": "xxxxxxxxxxxxxxxxxx" } } } } 请求需要的内容已具备齐全,您可以使用curl、Postman或直接编写代码等方式发送请求调用API。对于获取用户Token接口,返回的响应消息头中“x-subject-token”就是需要获取的用户Token。获取Token后,您可以使用Token认证调用其他API。
  • 请求URI 请求URI由如下部分组成。 {URI-scheme} :// {Endpoint} / {resource-path} ? {query-String} 请求URI包含在请求消息头中,大多数语言或框架都要求您从请求消息中单独传递,所以需要单独强调。 表1 URI中的参数说明 参数 描述 URI-scheme 表示用于传输请求的协议,当前所有API均采用HTTPS协议。 Endpoint 指定承载REST服务端点的服务器域名或IP,不同服务不同区域的Endpoint不同,您可以从地区和终端节点获取。 消息&短信服务可用的Endpoint请参见获取终端节点。 resource-path 资源路径,即API访问路径。从具体API的URI模块获取,例如“获取用户Token”API的resource-path为“/v3/auth/tokens”。 query-String 查询参数,是可选部分,并不是每个API都有查询参数。查询参数前面需要带一个“?”,形式为“参数名=参数取值”,例如“?limit=10”,表示查询不超过10条数据。 例如:您需要获取IAM在“华北-北京一”区域的Token,则需使用“华北-北京一”区域的Endpoint(iam.cn-north-1.myhuaweicloud.com),并在获取用户Token的URI部分找到resource-path(/v3/auth/tokens),拼接起来如下所示。 https://iam.cn-north-1.myhuaweicloud.com/v3/auth/tokens 图1 URI示意图 为查看方便,在每个具体API的URI部分,只给出resource-path部分,并将请求方法写在一起。这是因为URI-scheme都是HTTPS,同一个服务的Endpoint在同一个区域也相同,所以简洁起见将这两部分省略。
  • 请求方法 HTTP请求方法(也称为操作或动词),请求方法会告知服务您正在请求什么类型的操作。 表2 HTTP方法 方法 说明 GET 请求服务器返回指定资源。 PUT 请求服务器更新指定资源。 POST 请求服务器新增资源或执行特殊操作。 DELETE 请求服务器删除指定资源,如删除对象等。 HEAD 请求服务器资源头部。 PATCH 请求服务器更新资源的部分内容。 当资源不存在的时候,PATCH可能会去创建一个新的资源。 在获取用户Token的URI部分,您可以看到其请求方法为“POST”,则其请求为: POST https://iam.cn-north-1.myhuaweicloud.com/v3/auth/tokens
  • 请求消息头 附加请求头字段,如指定的URI和HTTP方法所要求的字段。例如定义消息体类型的请求头“Content-Type”,请求鉴权信息等。 如下公共消息头需要添加到请求中。 Content-Type:消息体的类型(格式),必选,默认取值为“application/json”,有其他取值时会在具体接口中专门说明。 X-Auth-Token:用户Token,可选,当使用Token方式认证时,必须填充该字段。用户Token也就是调用获取用户Token接口的响应值,该接口是唯一不需要认证的接口。 对于获取用户Token接口,由于不需要认证,所以只添加“Content-Type”即可,添加消息头后的请求如下所示。 POST https://iam.cn-north-1.myhuaweicloud.com/v3/auth/tokens Content-Type: application/json
  • 获取账号、用户、项目的名称和ID 从控制台获取账号名、账号ID、用户名、用户ID、项目名称、项目ID 在华为云首页右上角,单击“控制台”。 在右上角的用户名中选择“我的凭证”。 图1 进入我的凭证 在“我的凭证”界面,API凭证页签中,查看账号名、账号ID、用户名、用户ID、项目名称、项目ID。 图2 查看账号名、账号ID、用户名、用户ID、项目名称、项目ID 调用API获取用户ID、项目ID 获取用户ID请参考:管理员查询IAM用户列表。 获取项目ID请参考:查询指定条件下的项目列表。 父主题: 获取调用信息
  • 示例 为一个INSERT语句创建一个预备语句,然后执行它: 1 2 PREPARE insert_reason(integer,character(16),character(100)) AS INSERT INTO tpcds.reason_t1 VALUES($1,$2,$3); EXECUTE insert_reason(52, 'AAAAAAAADDAAAAAA', 'reason 52');
  • 示例 使用ANALYZE语句更新表customer_info统计信息: 1 ANALYZE customer_info; 使用ANALYZE VERBOSE语句更新表customer_info统计信息,并输出表的相关信息: 1 2 3 4 5 ANALYZE VERBOSE customer_info; INFO: analyzing "cstore.pg_delta_3394584009"(cn_5002 pid=53078) INFO: analyzing "public.customer_info"(cn_5002 pid=53078) INFO: analyzing "public.customer_info" inheritance tree(cn_5002 pid=53078) ANALYZE
  • 语法格式 收集表的统计信息。 1 2 { ANALYZE | ANALYSE } [ VERBOSE ] [ table_name [ ( column_name [, ...] ) ] ]; 收集分区表的统计信息。 1 2 3 { ANALYZE | ANALYSE } [ VERBOSE ] [ table_name [ ( column_name [, ...] ) ] ] PARTITION ( patrition_name ) ; 普通分区表目前支持针对某个分区的统计信息的语法,但功能上不支持针对某个分区的统计信息收集。对指定分区执行ANALYZE,会有相应的WARNING提示。 收集外表的统计信息。 1 2 { ANALYZE | ANALYSE } [ VERBOSE ] { foreign_table_name | FOREIGN TABLES };
  • 功能描述 用于收集有关数据库中表内容的统计信息,统计结果存储在系统表PG_STATISTIC下。执行计划生成器会使用这些统计数据,以确定最有效的执行计划。 如果没有指定参数,ANALYZE会分析当前数据库中的每个表和分区表。同时也可以通过指定table_name、column和partition_name参数把分析限定在特定的表、列或分区表中。 能够执行ANALYZE特定表的用户,包括表的所有者、表所在数据库的所有者、通过GRANT被授予该表上ANALYZE权限的用户或者被授予了gs_role_analyze_any角色的用户以及有SYSADMIN属性的用户。 在百分比采样收集统计信息时,用户需要被授予ANALYZE和SELECT权限。 ANALYZE|ANALYSE VERIFY用于检测数据库中普通表(行存表、列存表)的数据文件是否损坏,目前此命令暂不支持HDFS表。
  • 参数说明 VERBOSE 启用显示进度信息。 如果指定了VERBOSE,ANALYZE发出进度信息,表明目前正在处理的表。各种有关表的统计信息也会打印出来。 table_name 需要分析的特定表的表名(可能会带模式名),如果省略,将对数据库中的所有表(非外部表)进行分析。 对于ANALYZE收集统计信息,目前仅支持行存表、列存表、HDFS表、ORC格式的OBS外表、CARBONDATA格式的OBS外表、协同分析的外表。 取值范围:已有的表名。 column_name,column_1_name,column_2_name 需要分析特定列的列名,默认为所有列。 取值范围:已有的列名。 partition_name 如果table为分区表,在关键字PARTITION后面指定分区名partition_name表示分析该分区表的统计信息。目前语法上支持分区表做ANALYZE,但功能实现上暂不支持对指定分区统计信息的分析。 取值范围:表的某一个分区名。 foreign_table_name 需要分析的特定外表的表名(可能会带模式名),该表的数据存放于HDFS分布式文件系统中。 取值范围:已有的表名。 FOREIGN TABLES 分析所有当前用户权限下,数据位于HDFS分布式文件系统中的HDFS外表。 index_name 需要分析的特定索引表的表名(可能会带模式名)。 取值范围:已有的表名。 FAST|COMPLETE 对于行存表,FAST模式下主要对于行存表的CRC和page header进行校验,如果校验失败则会告警; 而COMPLETE模式下,则主要对行存表的指针、tuple进行解析校验。 对于列存表,FAST模式下主要对于列存表的CRC和magic进行校验,如果校验失败则会告警;而COMPLETE模式下,则主要对列存表的CU进行解析校验。 CASCADE CASCADE模式下会对当前表的所有索引进行检测处理。
  • 注意事项 仅8.1.1及以上集群版本支持在匿名块、事务块、函数或存储过程内对单表进行ANALYZE操作。 对于ANALYZE全库,库中各表的ANALYZE处于不同的事务中,所以不支持在匿名块、事务块、函数或存储过程内对全库执行ANALYZE。 统计信息的回滚操作不支持PG_CLASS中相关字段的回滚。 ANALYZE VERIFY操作处理的大多为异常场景检测需要使用RELEASE版本。ANALYZE VERIFY场景不触发远程读,因此远程读参数不生效。对于关键系统表出现错误被系统检测出页面损坏时,将直接报错不再继续检测。
  • XMLSERIALIZE ( { DOCUMENT | CONTENT } value AS type 描述:从XML类型的值生成一个字符串。 返回值类型:type,可以是character,character varying或text(或其别名) 示例: 1 2 3 4 5 SELECT xmlserialize(content 'good' AS CHAR(10)); xmlserialize -------------- good (1 row)
  • 示例 建立一个hdfs_server,其中hdfs_fdw为数据库中存在的foreign data wrapper: 1 2 3 4 5 CREATE SERVER hdfs_server FOREIGN DATA WRAPPER HDFS_FDW OPTIONS (address '10.10.0.100:25000,10.10.0.101:25000', hdfscfgpath '/opt/hadoop_client/HDFS/hadoop/etc/hadoop', type 'HDFS' ) ; 建立一个obs_server,其中dfs_fdw为数据库中存在的foreign data wrapper: 1 2 3 4 5 6 CREATE SERVER obs_server FOREIGN DATA WRAPPER DFS_FDW OPTIONS ( address 'obs.xxx.xxx.com', access_key 'xxxxxxxxx', secret_access_key 'yyyyyyyyyyyyy', type 'obs' ); 建立一个dli_server,其中dfs_fdw为数据库中存在的foreign data wrapper: 1 2 3 4 5 6 7 8 9 CREATE SERVER dli_server FOREIGN DATA WRAPPER DFS_FDW OPTIONS ( address 'obs.xxx.xxx.com', access_key 'xxxxxxxxx', secret_access_key 'yyyyyyyyyyyyy', type 'dli', dli_address 'dli.xxx.xxx.com', dli_access_key 'xxxxxxxxx', dli_secret_access_key 'yyyyyyyyyyyyy' ); 建立另外一个同构集群的server,其中gc_fdw为数据库中存在的foreign data wrapper: 1 2 3 4 5 6 CREATE SERVER server_remote FOREIGN DATA WRAPPER GC_FDW OPTIONS (address '10.10.0.100:25000,10.10.0.101:25000', dbname 'test', username 'test', password '{Password}' );
  • 参数说明 server_name 要创建的外部服务器的名称。服务器名称在数据库中必须唯一。 取值范围:长度必须小于等于63。 FOREIGN DATA WRAPPER fdw_name 指定外部数据封装器的名字。 取值范围:fdw_name是数据库初始化时系统创建的数据封装器,目前对于HDFS集群,fdw_name的名字可以是hdfs_fdw或者dfs_fdw,对于其他同构集群,fdw_name为gc_fdw。 OPTIONS ( { option_name ' value ' } [, ...] ) 用于指定外部服务器的各类参数,详细的参数说明如下所示: address 指定的OBS服务终端节点或HDFS集群的IP地址。 OBS:OBS服务的终端节点(Endpoint)。 HDFS:HDFS集群的元数据节点(NameNode)所在的IP地址以及端口,或者同构其他集群的CN的IP地址以及端口。 为保证HA(High Availability),HDFS NameNode经常采用主备模式。主备NameNode的地址都需要加入到address值中。GaussDB(DWS)访问HDFS服务时,会动态查找当前处于active状态的主NameNode。 若HDFS为联邦模式时,可将Router的地址都加入到address值中,GaussDB(DWS)访问HDFS服务时,会动态随机查找当前处于active状态的Router。 address option必须存在,若用于跨集群互联互通场景则只允许设置1个。 当server类型为DLI时,address为DLI服务上数据所存储的OBS address。 若HDFS为联邦模式时,即fed 'rbf',address可设置为多组IP、port,对应为HDFS Router的address。 hdfscfgpath 该参数仅支持type为HDFS时设置。 用户通过配置hdfscfgpath参数来指定HDFS配置文件路径。GaussDB(DWS)会根据配置文件路径下的HDFS配置文件指定的连接配置方式,以及安全模式,来访问HDFS集群。非安全模式连接HDFS集群时,不支持数据传输加密。 如果没有指定address选项,默认采用hdfscfgpath指定的配置文件中指定的address。 fed 表示dfs_fdw连接的是HDFS为联邦模式。 取值rbf,表示HDFS为联邦rbf方式。 该参数8.1.2及以上版本支持。 encrypt 是否对数据进行加密,该参数仅支持type为OBS时设置。默认值为off。 取值范围: on表示对数据进行加密。 off表示不对数据进行加密。 access_key OBS访问协议对应的AK值(OBS云服务界面由用户获取),创建外表时AK值会保存到数据库的元数据表中。该参数仅支持type为OBS时设置。 secret_access_key OBS访问协议对应的SK值(OBS云服务界面由用户获取),创建外表时SK值会加密保存到数据库的元数据表中。该参数仅支持type为OBS时设置。 type 表示dfs_fdw连接的类型。 取值范围: OBS表示连接的是OBS。 HDFS表示连接的是HDFS。 DLI表示连接的是DLI。 dli_address DLI服务的终端节点,即endpoint。该参数仅支持type为DLI时设置。 dli_access_key DLI访问协议对应的AK值(DLI云服务界面由用户获取),创建外表时AK值会保存到数据库的元数据表中。该参数仅支持type为DLI时设置。 dli_secret_access_key DLI访问协议对应的SK值(DLI云服务界面由用户获取),创建外表时SK值会加密保存到数据库的元数据表中。该参数仅支持type为DLI时设置。 dbname 用于协同分析、跨集群互联互通,表示将要连接的远端集群的数据库名字。 username 用于协同分析、跨集群互联互通,表示将要连接的远端集群的用户名。 password 用于协同分析、跨集群互联互通,表示将要连接的远端集群的用户名密码。 对于云下集群迁移到云上的场景,从云下集群导出的server配置中密码为密文,由于云上和云下集群加解密的密钥不同,如果直接在云上集群执行导出时的CREATE SERVER,会执行失败,报解密失败的错误。这种场景下需要将CREATE SERVER中的password手动修改成明文密码进行配置。 syncsrv 仅用于跨集群互联互通,表示数据同步过程中使用到的GDS服务,设置方式与GDS外表的location属性相同。
  • 语法格式 为当前会话设置会话用户标识符和当前用户标识符。 1 SET [ SESSION | LOCAL ] SESSION AUTHORIZATION role_name PASSWORD 'password'; 重置会话和当前用户标识符为初始认证的用户名。 1 2 {SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT | RESET SESSION AUTHORIZATION};
  • 语法格式 根据指定的名字创建模式: 1 2 CREATE SCHEMA schema_name [ AUTHORIZATION user_name ] [ WITH PERM SPACE 'space_limit'] [ schema_element [ ... ] ]; 根据用户名创建模式: 1 CREATE SCHEMA AUTHORIZATION user_name [ WITH PERM SPACE 'space_limit'] [ schema_element [ ... ] ];
  • 参数说明 schema_name 模式名字。 模式名不能和当前数据库里其他的模式重名。 模式的名字不可以“pg_”开头。 取值范围:字符串,要符合标识符的命名规范。 AUTHORIZATION user_name 指定模式的所有者。当不指定schema_name时,把user_name当作模式名,此时user_name只能是角色名。 取值范围:已存在的用户名/角色名。 WITH PERM SPACE 'space_limit' 指定模式的永久表存储空间上限。当不指定space_limit时,则不限制。 取值范围:字符串格式为正整数+单位,单位当前支持K/M/G/T/P。解析后的数值以K为单位,且范围不能够超过64比特表示的有符号整数,即1KB~9007199254740991KB。 schema_element 在模式里创建对象的SQL语句。目前仅支持CREATE TABLE、CREATE VIEW、CREATE INDEX、CREATE PARTITION、GRANT子句。 子命令所创建的对象都被AUTHORIZATION子句指定的用户所拥有。 如果当前搜索路径上的模式中存在同名对象时,需要明确指定引用对象所在的模式。可以通过命令SHOW SEARCH_PATH来查看当前搜索路径上的模式。
  • 注意事项 一个数据库可以包含一个或多个已命名的Schema,Schema又包含表及其他数据库对象,包括数据类型、函数、操作符等。同一对象名可以在不同的Schema中使用而不会引起冲突。例如,Schema1和Schema2都可以包含一个名为mytable的表。 和数据库不同,Schema不是严格分离的。用户根据其对Schema的权限,可以访问所连接数据库的Schema中的对象。进行Schema权限管理首先需要对数据库的权限控制进行了解。 不能创建以PG_为前缀的Schema名,该类Schema为数据库系统预留的。 在当前数据库中创建用户时,系统会在当前数据库中为新用户创建一个同名Schema。 只要用户对当前数据库有CREATE权限,就可以创建Schema。 系统管理员在普通用户同名Schema下创建的对象,所有者为Schema的同名用户(非系统管理员)。 通过未修饰的表名(名字中只含有表名,没有“Schema名”)引用表时,系统会通过search_path(搜索路径)来判断该表是哪个Schema下的表。pg_temp和pg_catalog始终会作为搜索路径顺序中的前两位,无论二者是否出现在search_path中,或者出现在search_path中的任何位置。search_path(搜索路径)是一个Schema名列表,在其中找到的第一个表就是目标表,如果没有找到则报错。某个表即使存在,如果它的Schema不在search_path中,依然会查找失败,在搜索路径中的第一个Schema叫做“当前Schema”。它是搜索时查询的第一个Schema,同时在没有声明Schema名时,新创建的数据库对象会默认存放在该Schema下。
  • 示例 创建一个角色role1: 1 CREATE ROLE role1 IDENTIFIED BY '{Password}'; 为用户role1创建一个同名schema,子命令创建的表films和winners的拥有者为role1: 1 2 3 4 CREATE SCHEMA AUTHORIZATION role1 CREATE TABLE films (title text, release date, awards text[]) CREATE VIEW winners AS SELECT title, release FROM films WHERE awards IS NOT NULL;
  • 语法格式 1 2 3 4 ALTER DEFAULT PRIVILEGES [ FOR { ROLE | USER } target_role [, ...] ] [ IN SCHEMA schema_name [, ...] ] abbreviated_grant_or_revoke; 其中abbreviated_grant_or_revoke子句用于指定对哪些对象进行授权或回收权限。 1 2 3 4 5 6 7 8 grant_on_tables_clause | grant_on_functions_clause | grant_on_types_clause | grant_on_sequences_clause | revoke_on_tables_clause | revoke_on_functions_clause | revoke_on_types_clause | revoke_on_sequences_clause 其中grant_on_tables_clause子句用于对表授权。 1 2 3 4 5 GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | ANALYZE | ANALYSE | VACUUM | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON TABLES TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ] 其中grant_on_functions_clause子句用于对函数授权。 1 2 3 4 GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTIONS TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ] 其中grant_on_types_clause子句用于对类型授权。 1 2 3 4 GRANT { USAGE | ALL [ PRIVILEGES ] } ON TYPES TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ] 其中grant_on_sequences_clause子句用于对序列授权。 1 2 3 4 5 GRANT { { USAGE | SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON SEQUENCES TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ] 其中revoke_on_tables_clause子句用于回收表对象的权限。 1 2 3 4 5 6 REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | ANALYZE | ANALYSE | VACUUM | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON TABLES FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT | CASCADE CONSTRAINTS ] 其中revoke_on_functions_clause子句用于回收函数的权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTIONS FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT | CASCADE CONSTRAINTS ] 其中revoke_on_types_clause子句用于回收类型的权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON TYPES FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT | CASCADE CONSTRAINTS ] 其中revoke_on_sequences_clause子句用于回收序列的权限。 1 2 3 4 5 6 REVOKE [ GRANT OPTION FOR ] { { USAGE | SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON SEQUENCES FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT | CASCADE CONSTRAINTS ]
  • 参数说明 target_role 已有角色的名称。如果省略FOR ROLE/USER,则缺省值为当前角色/用户。 target_role必须有schema_name的CREATE权限。查看角色/用户是否具有schema的CREATE权限可使用has_schema_privilege函数。 1 SELECT a.rolname, n.nspname FROM pg_authid as a, pg_namespace as n WHERE has_schema_privilege(a.oid, n.oid, 'CREATE'); 取值范围:已有角色的名称。 schema_name 现有模式的名称。如果指定了模式名,那么之后在这个模式下面创建的所有对象默认的权限都会被修改。如果IN SCHEMA被省略,那么全局权限会被修改。 取值范围:现有模式的名称。 role_name 被授予或者取消权限角色的名称。 取值范围:已存在的角色名称。 如果想删除一个被赋予了默认权限的角色,有必要恢复改变的缺省权限或者使用DROP OWNED BY来为角色脱离缺省的权限记录。
  • 示例 将创建在模式tpcds里的所有表(和视图)的SELECT权限授予每一个用户: 1 ALTER DEFAULT PRIVILEGES IN SCHEMA tpcds GRANT SELECT ON TABLES TO PUBLIC; 将tpcds下的所有表的插入权限授予用户jack: 1 ALTER DEFAULT PRIVILEGES IN SCHEMA tpcds GRANT INSERT ON TABLES TO jack; 撤销上述权限: 1 2 ALTER DEFAULT PRIVILEGES IN SCHEMA tpcds REVOKE SELECT ON TABLES FROM PUBLIC; ALTER DEFAULT PRIVILEGES IN SCHEMA tpcds REVOKE INSERT ON TABLES FROM jack; 假设有两个用户test1、test2,如果想要test2用户对test1用户未来创建的表都有查询权限可以用如下操作: 首先,把test1的schema的权限赋权给test2用户: 1 GRANT usage, create ON SCHEMA test1 TO test2; 其次,把test1用户下的表的查询权限赋值给test2用户: 1 ALTER DEFAULT PRIVILEGES FOR USER test1 IN SCHEMA test1 GRANT SELECT ON tables TO test2; 然后,test1用户创建表: 1 2 SET ROLE test1 password '{Password}'; CREATE TABLE test3( a int, b int); 最后,用test2用户去查询: 1 2 3 4 5 SET ROLE test2 password '{Password}'; SELECT * FROM test1.test3; a | b ---+--- (0 rows)
  • 注意事项 当前会话的用户必须是指定的rolename角色的成员,但系统管理员可以选择任何角色。 使用SET ROLE命令,可能会增加一个用户的权限,也可能会限制一个用户的权限。如果会话用户的角色有INHERITS属性,则自动拥有可以SET ROLE变成的角色的所有权限;在这种情况下,SET ROLE实际上是删除了所有直接赋予会话用户的权限,以及它的所属角色的权限,只剩下指定角色的权限。另一方面,如果会话用户的角色有NOINHERITS属性,SET ROLE删除直接赋予会话用户的权限,而获取指定角色的权限。
  • 注意事项 进行MERGE INTO操作的用户需要同时拥有目标表的UPDATE和INSERT权限,以及源表的SELECT权限。 不支持PREPARE。 不支持重分布过程中MERGE INTO。 不支持对包含触发器的目标表执行MERGE INTO。 对roundrobin表执行MERGE INTO时,推荐关闭GUC参数allow_concurrent_tuple_update,否则会不支持部分MERGE INTO语句。
  • 语法格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 MERGE INTO table_name [ [ AS ] alias ] USING { { table_name | view_name } | subquery } [ [ AS ] alias ] ON ( condition ) [ WHEN MATCHED THEN UPDATE SET { column_name = { expression | DEFAULT } | ( column_name [, ...] ) = ( { expression | DEFAULT } [, ...] ) } [, ...] [ WHERE condition ] ] [ WHEN NOT MATCHED THEN INSERT { DEFAULT VALUES | [ ( column_name [, ...] ) ] VALUES ( { expression | DEFAULT } [, ...] ) [, ...] [ WHERE condition ] } ];
  • 参数说明 INTO子句 指定正在更新或插入的目标表。 table_name 目标表的表名。 alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 USING子句 指定源表,源表可以为表、视图或子查询。 ON子句 关联条件,用于指定目标表和源表的关联条件。不支持更新关联条件中的字段。 WHEN MATCHED子句 当源表和目标表中数据针对关联条件可以匹配上时,选择WHEN MATCHED子句进行UPDATE操作。 不支持更新分布列。不支持更新系统表、系统列。 WHEN NOT MATCHED子句 当源表和目标表中数据针对关联条件无法匹配时,选择WHEN NOT MATCHED子句进行INSERT操作。 不支持INSERT子句中包含多个VALUES。 WHEN MATCHED和WHEN NOT MATCHED子句顺序可以交换,可以缺省其中一个,但不能同时缺省,不支持同时指定两个WHEN MATCHED或WHEN NOT MATCHED子句。 DEFAULT 用对应字段的缺省值填充该字段。 如果没有缺省值,则为NULL。 WHERE condition UPDATE子句和INSERT子句的条件,只有在条件满足时才进行更新操作,可缺省。不支持WHERE条件中引用系统列。
  • 示例 创建目标表products和源表newproducts,并插入数据: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 CREATE TABLE products ( product_id INTEGER, product_name VARCHAR2(60), category VARCHAR2(60) ); INSERT INTO products VALUES (1501, 'vivitar 35mm', 'electrncs'); INSERT INTO products VALUES (1502, 'olympus is50', 'electrncs'); INSERT INTO products VALUES (1600, 'play gym', 'toys'); INSERT INTO products VALUES (1601, 'lamaze', 'toys'); INSERT INTO products VALUES (1666, 'harry potter', 'dvd'); CREATE TABLE newproducts ( product_id INTEGER, product_name VARCHAR2(60), category VARCHAR2(60) ); INSERT INTO newproducts VALUES (1502, 'olympus camera', 'electrncs'); INSERT INTO newproducts VALUES (1601, 'lamaze', 'toys'); INSERT INTO newproducts VALUES (1666, 'harry potter', 'toys'); INSERT INTO newproducts VALUES (1700, 'wait interface', 'books'); 进行MERGE INTO操作: 1 2 3 4 5 6 7 MERGE INTO products p USING newproducts np ON (p.product_id = np.product_id) WHEN MATCHED THEN UPDATE SET p.product_name = np.product_name, p.category = np.category WHERE p.product_name != 'play gym' WHEN NOT MATCHED THEN INSERT VALUES (np.product_id, np.product_name, np.category) WHERE np.category = 'books'; 查询更新后的结果: 1 2 3 4 5 6 7 8 9 10 SELECT * FROM products ORDER BY product_id; product_id | product_name | category ------------+----------------+----------- 1501 | vivitar 35mm | electrncs 1502 | olympus camera | electrncs 1600 | play gym | toys 1601 | lamaze | toys 1666 | harry potter | toys 1700 | wait interface | books (6 rows) 删除表: 1 2 DROP TABLE products; DROP TABLE newproducts;
共100000条