华为云用户手册

  • 产品质检方案相关操作 产品质检方案添加完成后,您还可以进行如表17所示的操作。 表17 产品质检方案相关操作 操作 描述 发布产品质检方案 在“产品质检方案管理”页面的“产品质检方案定义”页签,在“质检方案”下选中记录后,再在“质检方案版本”下选择“草稿”状态的记录,单击“操作”列的,发布产品质检方案。 说明: “发布”状态的产品质检方案才能被其他功能模块引用。 如果质检方案版本下所有工序都没有配置质检项,则该质检方案版本不支持发布。 激活产品质检方案 在“产品质检方案管理”页面的“产品质检方案定义”页签,在“质检方案”下选中记录后,再在“质检方案版本”下选择“是否激活”为“N”的记录,单击“激活”,激活产品质检方案。 说明: “是否激活”为“Y”的产品质检方案才能被其他功能模块引用。 编辑产品质检方案 在“产品质检方案管理”页面的“产品质检方案定义”页签,在“质检方案”下选中记录后,再在“质检方案版本”下单击“草稿”状态待编辑的记录“操作”列的,根据实际情况修改产品质检方案信息。 说明: 编辑产品质检方案支持的相关操作: 添加、编辑、删除检验分组 添加、编辑、删除检验项 添加、编辑、删除检验项结果 升版产品质检方案 在“产品质检方案管理”页面的“产品质检方案定义”页签,在“质检方案”下选中记录后,再在“质检方案版本”下单击待升级的产品质检方案记录“操作”列的,升版产品质检方案。 说明: 仅当该产品质检方案不存在“记录状态”为“草稿”的版本记录时才可以进行升版产品质检方案操作。 升版产品质检方案以后,系统生成一条“版本”取值加1、“记录状态”为“草稿”的记录,支持通过编辑产品质检方案来修改产品质检方案信息。 删除产品质检方案 在“产品质检方案管理”页面的“产品质检方案定义”页签,在“质检方案”下选中记录后,再在“质检方案版本”下单击“草稿”或“发布”状态待删除的记录“操作”列的,删除产品质检方案。 说明: 数据进行删除操作后,该数据的状态将变为“失效”。 查看产品质检方案 在“产品质检方案管理”页面的“产品质检方案定义”页签,在“质检方案”下选中记录后,再在“质检方案版本”下单击记录“操作”列的,查看产品质检方案详情。 查询产品质检方案 在“产品质检方案管理”页面的“产品质检方案定义”页签,在产品质检方案列表上方输入框输入“产品编码”、“产品版本”、“路线版本”或“方案名称”信息,选择是否“筛选最新版本”,再单击“查询”,查询产品质检方案。
  • 应用场景 RocketMQ业务迁移主要涉及以下场景: 将其他厂商的RocketMQ迁移到云上RocketMQ实例 将自建的RocketMQ迁移到云上RocketMQ实例 将云上一个RocketMQ实例迁移到云上另一个RocketMQ实例 迁移元数据时,主要提供以下两种迁移方法,请根据实际情况选择: 方法一:通过mqadmin命令导出源实例的元数据,然后在云上RocketMQ实例中创建迁移任务 方法二:导出源实例的Topic和消费组列表,然后通过脚本将Topic和消费组列表导入到云上RocketMQ实例中(适用于不支持通过mqadmin命令导出元数据的场景)
  • 前提条件 配置网络环境 分布式消息服务RocketMQ版实例分内网地址以及公网地址两种网络连接方式。如果使用公网地址,则消息生产与消费客户端需要有公网访问权限,并配置如下安全组。 表1 安全组规则 方向 协议 端口 源地址 说明 入方向 TCP 8200 0.0.0.0/0 公网访问元数据节点的端口 入方向 TCP 10100-10199 0.0.0.0/0 访问业务节点的端口 购买分布式消息服务RocketMQ版实例 具体请参考购买RocketMQ实例。 准备一台Linux系统的主机,在主机中安装Java Development Kit 1.8.111或以上版本,并完成环境变量配置。
  • 实施步骤(通过mqadmin命令导出源实例的元数据) 迁移元数据至分布式消息服务RocketMQ版实例。 获取其他厂商或自建RocketMQ实例的元数据。 登录主机,下载RocketMQ软件包。 wget https://archive.apache.org/dist/rocketmq/4.9.8/rocketmq-all-4.9.8-bin-release.zip 解压软件包。 unzip rocketmq-all-4.9.8-bin-release.zip (可选)如果RocketMQ实例开启了ACL访问控制,执行mqadmin命令时,需要鉴权。 切换到解压后的软件包目录下,在“conf/tools.yml”文件中,增加如下内容。 accessKey:******* secretKey:******* accessKey和secretKey表示在控制台“用户管理”页面,创建的用户名和密钥。 进入解压后的软件包目录下,执行以下命令,查询集群名称。 sh ./bin/mqadmin clusterList -n {nameserver地址及端口号} 例如:“nameserver地址及端口号”为“192.168.0.65:8100”。 sh ./bin/mqadmin clusterList -n 192.168.0.65:8100 执行以下命令,导出元数据。 未开启SSL的实例,执行以下命令。 sh ./bin/mqadmin exportMetadata -n {nameserver地址及端口号} -c {RocketMQ集群名称} -f {导出的元数据文件的存放路径} 例如:“nameserver地址及端口号”为“192.168.0.65:8100”,“RocketMQ集群名称”为“DmsCluster”,“导出的元数据文件的存放路径”为“/tmp/rocketmq/export”。 sh ./bin/mqadmin exportMetadata -n 192.168.0.65:8100 -c DmsCluster -f /tmp/rocketmq/export 已开启SSL的实例,执行以下命令。 JAVA_OPT=-Dtls.enable=true sh ./bin/mqadmin exportMetadata -n {nameserver地址及端口号} -c {RocketMQ集群名称} -f {导出的元数据文件的存放路径} 例如:“nameserver地址及端口号”为“192.168.0.65:8100”,“RocketMQ集群名称”为“DmsCluster”,“导出的元数据文件的存放路径”为“/tmp/rocketmq/export”。 JAVA_OPT=-Dtls.enable=true sh ./bin/mqadmin exportMetadata -n 192.168.0.65:8100 -c DmsCluster -f /tmp/rocketmq/export 在控制台迁移元数据。 登录分布式消息服务RocketMQ版控制台。 单击RocketMQ实例的名称,进入实例详情页面。 在左侧导航栏,选择“元数据迁移”,进入迁移任务列表页面。 单击“创建迁移任务”,弹出“创建迁移任务”对话框。 参考表2,设置迁移任务的参数。 表2 迁移任务参数说明 参数 说明 任务名称 您可以自定义迁移任务的名称,用于区分不同的迁移任务。 是否同名覆盖 如果开启同名覆盖,会对已有的同名元数据的配置进行修改。 例如:原实例Topic01的读队列个数为3,云上实例Topic01的读队列个数为2,开启同名覆盖后,云上实例Topic01的读队列个数变为3。 如果不开启同名覆盖,同名元数据的迁移将失败。 例如:原实例的Topic包含Topic01和Topic02,云上实例的Topic包含Topic01和Topic03,不开启同名覆盖,原实例Topic01的迁移将失败。 元数据 上传获取其他厂商或自建RocketMQ实例的元数据。 单击“确定”。 迁移完成后,在迁移任务列表页面查看“任务状态”。 当“任务状态”为“迁移完成”,表示所有元数据都已成功迁移。 当“任务状态”为“迁移失败”,表示元数据中部分或全部元数据迁移失败。单击迁移任务名称,进入迁移任务详情页,在“迁移结果”中查看迁移失败的Topic/消费组名称,以及失败原因。 迁移生产消息至分布式消息服务RocketMQ版实例。 将生产客户端的元数据连接地址改为分布式消息服务RocketMQ版实例的元数据连接地址,重启生产业务,使得生产者将新的消息发送到分布式消息服务RocketMQ版实例中。 迁移消费消息至分布式消息服务RocketMQ版实例。 待消费组中的消息消费完之后,将消费客户端的元数据连接地址改为分布式消息服务RocketMQ版实例的元数据连接地址,重启消费业务,使得消费者从分布式消息服务RocketMQ版实例中消费消息。 如果有多个RocketMQ实例需要迁移到同一个分布式消息服务RocketMQ版实例中,请依次进行迁移。
  • 与Kafka、RabbitMQ的差异 表1 功能差异 功能项 RocketMQ Kafka RabbitMQ 优先级队列 不支持 不支持 支持。建议优先级大小设置在0-10之间。 延迟队列 支持 不支持 不支持 死信队列 支持 不支持 支持 消息重试 支持 不支持 不支持 消费模式 支持客户端主动拉取和服务端推送两种方式 客户端主动拉取 支持客户端主动拉取以及服务端推送两种模式 广播消费 支持 支持 支持 消息回溯 支持 支持。Kafka支持按照offset和timestamp两种维度进行消息回溯。 不支持。RabbitMQ中消息一旦被确认消费就会被标记删除。 消息堆积 支持 支持。考虑吞吐因素,Kafka的堆积效率比RabbitMQ总体上要高。 支持 持久化 支持 支持 支持 消息追踪 支持 不支持 不支持 消息过滤 支持 支持 不支持,但可以自行封装。 多租户 支持 不支持 支持 多协议支持 兼容RocketMQ协议 只支持Kafka自定义协议。 RabbitMQ基于AMQP协议实现,同时支持MQTT、STOMP等协议。 跨语言支持 支持多语言的客户端 采用Scala和Java编写,支持多种语言的客户端。 采用Erlang编写,支持多种语言的客户端。 流量控制 待规划 支持client和user级别,通过主动设置可将流控作用于生产者或消费者。 RabbitMQ的流控基于Credit-Based算法,是内部被动触发的保护机制,作用于生产者层面。 消息顺序性 单队列(queue)内有序 支持单分区(partition)级别的顺序性。 不支持。需要单线程发送、单线程消费并且不采用延迟队列、优先级队列等一些高级功能整体配合,才能实现消息有序。 安全机制 支持SSL认证 支持SSL、SASL身份认证和读写权限控制。 支持SSL认证 事务性消息 支持 支持 支持
  • pg_has_role(role, privilege) 描述:当前用户是否有角色的权限。 参数:role可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串可取值MEMBER、USAGE,也可以用逗号分隔列出的多个权限类型。 返回类型:boolean 备注:pg_has_role检查用户是否能以特定方式访问角色。其参数类似has_table_privilege,除了public不能用做用户名。访问权限类型必须是MEMBER或USAGE的一些组合。 MEMBER表示的是角色中的直接或间接成员关系(也就是SET ROLE的权限),而USAGE表示无需通过SET ROLE也直接拥有角色的使用权限。
  • has_table_privilege(table, privilege) 描述:当前用户是否有访问表的权限。 参数:table可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串可取值SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES或TRIGGER,也可以用逗号分隔列出的多个权限类型。 返回类型:boolean 备注:has_table_privilege检查用户是否以特定方式访问表。用户可以通过名字或OID(pg_authid.oid)来指定,public表明PUBLIC伪角色,如果缺省该参数,则使用current_user。该表可以通过名字或者OID声明。如果用名字声明,则在必要时可以用模式进行修饰。如果使用文本字符串来声明权限类型,可以给权限类型添加WITH GRANT OPTION,用来测试权限是否拥有授权选项。当有多个权限类型时,拥有任何所列出的权限之一,则结果便为true。 示例: 1 2 3 4 5 6 7 8 9 10 11 SELECT has_table_privilege('tpcds.web_site', 'select'); has_table_privilege --------------------- t (1 row) SELECT has_table_privilege('dbadmin', 'tpcds.web_site', 'select,INSERT WITH GRANT OPTION '); has_table_privilege --------------------- t (1 row)
  • has_foreign_data_wrapper_privilege(fdw, privilege) 描述:当前用户是否有访问外部数据封装器的权限。 参数:fdw表示外部数据封装器,可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串必须是USAGE。 返回类型:boolean 备注:has_foreign_data_wrapper_privilege检查用户是否能以特定方式访问外部数据封装器。其参数类似has_table_privilege。访问权限类型必须是USAGE。
  • has_function_privilege(function, privilege) 描述:当前用户是否有访问函数的权限。 参数:function可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串必须是EXECUTE。 返回类型:boolean 备注:has_function_privilege检查当前用户是否能以指定方式访问指定函数。其参数类似has_table_privilege。使用文本字符而不是OID声明一个函数时,允许输入的类型和regprocedure数据类型一样(请参考对象标识符类型)。访问权限类型必须是EXECUTE。
  • has_schema_privilege(schema, privilege) 描述:当前用户是否有访问模式的权限。 参数:schema可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串可取值CREATE、USAGE,也可以用逗号分隔列出的多个权限类型。 返回类型:boolean 备注:has_schema_privilege检查用户是否能以特定方式访问指定模式。其参数类似has_table_privilege。访问权限类型必须是CREATE或USAGE的一些组合。
  • has_column_privilege(user, table, column, privilege) 描述:指定用户是否有访问列的权限。 参数:user可以通过名字(text类型)或OID来声明。table可以通过名字(text类型)或者OID来声明。column可以通过列名(text类型)或属性号(smallint类型)来声明。privilege使用文本字符串来声明,该文本字符串可取值SELECT、INSERT、UPDATE、REFERENCES,也可以用逗号分隔列出的多个权限类型。 返回类型:boolean
  • has_column_privilege(table, column, privilege) 描述:当前用户是否有访问列的权限。 参数:table可以通过名字(text类型)或者OID来声明。column可以通过列名(text类型)或属性号(smallint类型)来声明。privilege使用文本字符串来声明,该文本字符串可取值SELECT、INSERT、UPDATE、REFERENCES,也可以用逗号分隔列出的多个权限类型。 返回类型:boolean 备注:has_column_privilege检查用户是否以特定方式访问一列。其参数类似于has_table_privilege,可以通过列名或属性号添加列。想要的访问权限类型必须是SELECT、INSERT、UPDATE或REFERENCES的一些组合。 拥有表的表级别权限则隐含的拥有该表每列的列级权限。
  • has_database_privilege(database, privilege) 描述:当前用户是否有访问数据库的权限。 参数:database可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串可取值CREATE、CONNECT、TEMPORARY或TEMP,也可以用逗号分隔列出的多个权限类型。 返回类型:boolean 备注:has_database_privilege检查用户是否能以在特定方式访问数据库。其参数类似has_table_privilege。访问权限类型必须是CREATE、CONNECT、TEMPORARY或TEMP(等价于TEMPORARY)的一些组合。
  • has_foreign_data_wrapper_privilege(user, fdw, privilege) 描述:指定用户是否有访问外部数据封装器的权限。 参数:user可以通过名字(text类型)或OID来声明。fdw表示外部数据封装器,可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串必须是USAGE。 参数fdw,表示外部数据封装器,取值范围为外部数据封装器名字或ID。 返回类型:boolean
  • has_server_privilege(server, privilege) 描述:当前用户是否有访问外部服务的权限。 参数:server可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串取值必须是USAGE。 返回类型:boolean 备注:has_server_privilege检查用户是否能以指定方式访问指定外部服务器。其参数类似has_table_privilege。访问权限类型必须是USAGE。
  • has_any_column_privilege(table, privilege) 描述:当前用户是否有访问表任何列的权限。 参数:table可以通过名字(text类型)或者OID来声明。privilege使用文本字符串(text类型)来声明,该文本字符串可取值SELECT、INSERT、UPDATE、REFERENCES,也可以用逗号分隔列出的多个权限类型。 返回类型:boolean 备注:has_any_column_privilege检查用户是否以特定方式访问表的任何列。其参数可能与has_table_privilege类似,除了访问权限类型必须是SELECT、INSERT、UPDATE或REFERENCES的一些组合。 拥有表的表级别权限则隐含的拥有该表每列的列级权限,因此如果与has_table_privilege参数相同,has_any_column_privilege总是返回true。但是如果授予至少一列的列级权限也返回成功。
  • has_database_privilege(user, database, privilege) 描述:指定用户是否有访问数据库的权限。 参数:user可以通过名字(text类型)或OID来声明。database可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串可取值SELECT、INSERT、UPDATE、REFERENCES,也可以用逗号分隔列出的多个权限类型。 返回类型:boolean
  • has_any_column_privilege(user, table, privilege) 描述:指定用户是否有访问表任何列的权限。 参数:user可以通过名字(text类型)或OID来声明。table可以通过名字(text类型)或者OID来声明。privilege使用文本字符串(text类型)来声明,该文本字符串可取值SELECT、INSERT、UPDATE、REFERENCES,也可以用逗号分隔列出的多个权限类型。 返回类型:boolean
  • has_language_privilege(language, privilege) 描述:当前用户是否有访问语言的权限。 参数:language可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串必须是USAGE。 返回类型:boolean 备注:has_language_privilege检查用户是否能以特定方式访问过程语言。其参数类似has_table_privilege。访问权限类型必须是USAGE。
  • has_table_privilege(user, table, privilege) 描述:指定用户是否有访问表的权限。 参数:user可以通过名字(text类型)或OID来声明。table可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串可取值SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES或TRIGGER,也可以用逗号分隔列出的多个权限类型。 返回类型:boolean
  • 注意事项 只有表对象的属主具有创建脱敏策略的权限。 仅支持在普通表创建数据脱敏策略,不支持为系统表、HDFS表、外表、临时表、UNLOGGED表以及视图和函数对象创建脱敏策略。 不支持通过同义词向普通表对象创建脱敏策略。 表对象与脱敏策略间一一对应。一个脱敏策略是表对象所有脱敏列的集合,可以给脱敏表对象的多个列字段指定脱敏函数,且不同脱敏列对象可以采用不同的脱敏函数。 创建脱敏策略时,默认策略生效,即属性enable值为true。 具有sysadmin权限的用户,可跳过脱敏策略检查,对脱敏列数据一直具有可见性,即脱敏策略不生效。 支持通过指定角色匹配脱敏策略。
  • 示例 对指定用户创建脱敏策略。 创建用户alice和matu: 1 2 CREATE ROLE alice PASSWORD '{Password}'; CREATE ROLE matu PASSWORD '{Password}'; 用户alice创建表对象emp并插入数据: 1 2 CREATE TABLE emp(id int, name varchar(20), salary NUMERIC(10,2)); INSERT INTO emp VALUES(1, 'July', 1230.10), (2, 'David', 999.99); 用户alice为表对象emp创建脱敏策略mask_emp,字段salary对用户matu不可见: 1 CREATE REDACTION POLICY mask_emp ON emp WHEN(current_user = 'matu') ADD COLUMN salary WITH mask_full(salary); 用户alice授予用户matu表emp的SELECT权限: 1 GRANT SELECT ON emp TO matu; 切至用户matu: 1 SET ROLE matu PASSWORD '{Password}'; 查询表emp,字段salary数据已脱敏: 1 SELECT * FROM emp; 对角色创建脱敏策略。 创建角色redact_role: 1 CREATE ROLE redact_role PASSWORD '{Password}'; 将用户matu,alice加入角色redact_role: 1 GRANT redact_role to matu,alice; 管理员用户创建表对象emp1并插入数据: 1 2 CREATE TABLE emp1(id int, name varchar(20), salary NUMERIC(10,2)); INSERT INTO emp1 VALUES(3, 'Rose', 2230.20), (4, 'Jack', 899.88); 管理员用户为表对象emp1创建脱敏策略mask_emp1,使字段salary对角色redact_role不可见。 1 CREATE REDACTION POLICY mask_emp1 ON emp1 WHEN(pg_has_role(current_user, 'redact_role', 'member')) ADD COLUMN salary WITH mask_full(salary); 若不指定用户,默认为当前用户current_user: 1 CREATE REDACTION POLICY mask_emp1 ON emp1 WHEN (pg_has_role('redact_role', 'member')) ADD COLUMN salary WITH mask_full(salary); 管理员用户授予用户matu表emp1的SELECT权限: 1 GRANT SELECT ON emp1 TO matu; 切换至用户matu: 1 SET ROLE matu PASSWORD '{Password}'; 查询表emp1,字段salary数据已脱敏。 1 SELECT * FROM emp1;
  • obj_description(object_oid, catalog_name) 描述:获取一个数据库对象的注释。 返回类型:text 备注:带有两个参数的obj_description返回一个数据库对象的注释,该对象是通过其OID和其所属的系统表名字声明。比如,obj_description(123456,'pg_class')将返回OID为123456的表的注释。只带一个参数的obj_description只要求对象OID。 obj_description不能用于表字段,因为字段没有自己的OID。
  • GAUSS-00351 -- GAUSS-00360 GAUSS-00351: "index '%s' contains expressions" SQLSTATE: 42809 错误原因:CREATE TABLE ... CONSTRAINT语法中对于创建分区表创建为主键约束或唯一(UNIQUE)约束的约束属性错误的包含表达式。 解决办法:CREATE TABLE ... CONSTRAINT语法中对于创建分区表创建为主键约束或唯一(UNIQUE)约束的约束属性不允许包含表达式。 GAUSS-00352: "'%s' is a partial index" SQLSTATE: 42809 错误原因:不支持的用法。 解决办法:用合法的索引代替。 GAUSS-00353: "'%s' is a deferrable index" SQLSTATE: 42809 错误原因:不支持的用法。 解决办法:用合法的索引代替。 GAUSS-00354: "index '%s' is not a btree" SQLSTATE: 42809 错误原因:btree函数中指定的索引不是B-tree索引。 解决办法:检查指定的索引类型,使用对应的索引函数。 GAUSS-00355: "index '%s' does not have default sorting behavior" SQLSTATE: 42809 错误原因:不支持的用法。 解决办法:用合法的索引代替。 GAUSS-00357: "column '%s' named in key does not exist" SQLSTATE: 42703 错误原因:CREATE TABLE语法中使用约束子句声明的表的字段名在表中不存在。 解决办法:请检查CREATE TABLE语法中使用约束子句声明的表的字段名是否在表中存在,如果不存在需要更换继承的字段名或重新创建表。 GAUSS-00358: "column '%s' appears twice in primary key constraint" SQLSTATE: 42701 错误原因:CREATE TABLE ... CONSTRAINT语法的PRIMARY KEY子句中指定的主键约束包含的约束属性中有2个相同的主键名。 解决办法:请检查CREATE TABLE ... CONSTRAINT语法的PRIMARY KEY子句中指定的主键约束包含的约束属性中是否存在2个相同的主键名,并修改或删除其中一个主键名。 GAUSS-00359: "column '%s' appears twice in unique constraint" SQLSTATE: 42701 错误原因:CREATE TABLE ... CONSTRAINT语法的UNIQE子句中指定的主键约束包含的约束属性中有2个相同的主键名。 解决办法:请检查CREATE TABLE ... CONSTRAINT语法的UNIQE子句中指定的主键约束包含的约束属性中是否存在2个相同的主键名,并修改或删除其中一个主键名。 GAUSS-00360: "access method 'psort' does not support row store" SQLSTATE: 0A000 错误原因:对行存表通过CREATE INDEX...USING method语法中指定的访问方法创建psort索引错误。 解决办法:对行存表创建索引时指定的访问方法不能为psort类型,psort类型为列存表创建索引的访问方法,请修改索引的访问方法。 父主题: GAUSS-00301 -- GAUSS-00400
  • GAUSS-00381 -- GAUSS-00390 GAUSS-00381: "misplaced INITIALLY DEFERRED clause" SQLSTATE: 42601 错误原因:语法错误。 解决办法:修改SQL Statement。 GAUSS-00382: "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" SQLSTATE: 42601 错误原因:语法错误。 解决办法:修改SQL Statement。 GAUSS-00383: "misplaced INITIALLY IMMEDIATE clause" SQLSTATE: 42601 错误原因:语法错误。 解决办法:修改SQL Statement。 GAUSS-00384: "CREATE specifies a schema (%s) different from the one being created (%s)" SQLSTATE: 42P15 错误原因:"在CREATE SCHEMA schema_name schema_element...语法中,schema_element指示的CREATE TABLE、CREATE VIEW、CREATE INDEX、CREATE PARTITION或GRANT子句中的包含的模式名与schema_name不匹配"。 解决办法:"在CREATE SCHEMA schema_name schema_element...语法中,需要确认并修改schema_element指示的CREATE TABLE、CREATE VIEW、CREATE INDEX、CREATE PARTITION或GRANT子句中的包含的模式名与schema_name一致。" GAUSS-00385: "unsupport inherits clause for partitioned table" SQLSTATE: 42601 错误原因:语法错误。 解决办法:修改SQL Statement。 GAUSS-00386: "inherited relation '%s' is a foreign table" SQLSTATE: 42809 错误原因:不支持的用法。 解决办法:修改SQL Statement。 GAUSS-00387: "inherited relation '%s' is a partitioned table" SQLSTATE: XX000 错误原因:"CREATE TABLE table_name (...) INHERITS ( parent_table [, ... ] )语法中parent_table为分区表"。 解决办法:"请检查CREATE TABLE table_name (...) INHERITS ( parent_table [, ... ] )语法中parent_table是否为分区表,语法要求继承的parent_table不能为分区表"。 GAUSS-00388: "ON COMMIT option is not supported for partitioned table" SQLSTATE: 42601 错误原因:CREATE TABLE table_name (...) ON COMMIT语法特性对分区表不支持。 解决办法:将CREATE TABLE table_name (...) ON COMMIT语法更换为其他方式,请参考《SQL语法参考》的“CREATE ROLE”章节。 GAUSS-00389: "Typed table can't not be partitioned" SQLSTATE: 42601 错误原因:CREATE … TABLE OF type_name …语法特性该版本暂不支持。 解决办法:请将CREATE … TABLE OF type_name …语法更换为其他方式。 GAUSS-00390: "unsupported feature with temporary/unlogged table for partitioned table" SQLSTATE:42601 错误原因:CREATE TEMPORARY/UNLOGGED TABLE table_name …语法中分区表不支持TEMPORARY或UNLOGGED属性。 解决办法:CREATE TEMPORARY/UNLOGGED TABLE table_name …语法中指定为TEMPORARY或UNLOGGED属性的表不支持分区表,请修改表名为非分区表。 父主题: GAUSS-00301 -- GAUSS-00400
  • GAUSS-00781 -- GAUSS-00790 GAUSS-00781: "cannot alter data type of distribute column" SQLSTATE: 0A000 错误原因:ALTER COLUMN TYPE操作,不能修改表的分布列的类型。 解决办法:不能更改类型表的列类型,建议更改本操作。 GAUSS-00782: "cannot refer to other columns in transform expression for column store table" SQLSTATE: 0A000 错误原因:列存表不支持在类型改变时更新数据引用其它列的值。 解决办法:避免列类型修改操作,通过新建表来达到同样目的。 GAUSS-00783: "transform expression must not return a set" SQLSTATE: 42804 错误原因:ALTER COLUMN TYPE操作,转换表达式不能返回集合。 解决办法:转换表达式不能返回集合,建议更改本操作。 GAUSS-00784: "cannot use subquery in transform expression" SQLSTATE: 0A000 错误原因:ALTER COLUMN TYPE操作,转换表达式不能包含子查询。 解决办法:转换表达式不能包含子查询,建议更改本操作。 GAUSS-00785: "cannot use aggregate function in transform expression" SQLSTATE: 42803 错误原因:ALTER COLUMN TYPE操作,转换表达式不能使用聚合函数。 解决办法:转换表达式不支持聚合函数,建议更改本操作。 GAUSS-00786: "cannot use window function in transform expression" SQLSTATE: 42P20 错误原因:ALTER COLUMN TYPE操作,转换表达式不能使用window函数。 解决办法:转换表达式不支持window函数,建议更改本操作。 GAUSS-00787: "column '%s' cannot be cast automatically to type %s" SQLSTATE: 42804 错误原因:ALTER COLUMN TYPE操作,列不能自动转化为某类型。 解决办法:建议指定列转换类型。 GAUSS-00788: "type of inherited column '%s' must be changed in child tables too" SQLSTATE: 42P16 错误原因:ALTER COLUMN TYPE操作,当parent table列的类型改变时,child table列类型也要随之改变。 解决办法:建议语句中指明子表随父表的变化递归变化。 GAUSS-00789: "cannot alter data type of partitioning column '%s'" SQLSTATE: 0A000 错误原因:ALTER COLUMN TYPE操作,不能更改分区表的列类型。 解决办法:分区表不支持更改列类型,建议更改本操作。 GAUSS-00790: "cannot alter type of column '%s' twice" SQLSTATE: 0A000 错误原因:ALTER COLUMN TYPE操作,不能同时两次更改某一列类型。 解决办法:不支持同时两次更改列类型,建议更改本操作。 父主题: GAUSS-00701 -- GAUSS-00800
  • 示例 修改用户jim的登录密码: 1 ALTER USER jim IDENTIFIED BY '{password}' REPLACE '{old_password}'; 为用户jim追加CREATEROLE权限: 1 ALTER USER jim CREATEROLE; 将与用户jim关联的会话参数enable_seqscan的值设置为on, 设置成功后,在下一会话中生效: 1 ALTER USER jim SET enable_seqscan TO on; 重置jim的enable_seqscan参数: 1 ALTER USER jim RESET enable_seqscan; 锁定jim账户: 1 ALTER USER jim ACCOUNT LOCK;
  • 语法格式 修改用户的权限等信息。 1 ALTER USER user_name [ [ WITH ] option [ ... ] ]; 其中option子句为。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 { CREATEDB | NOCREATEDB } | { CREATEROLE | NOCREATEROLE } | { INHERIT | NOINHERIT } | { AUDITADMIN | NOAUDITADMIN } | { SYSADMIN | NOSYSADMIN } | { USEFT | NOUSEFT } | { LOGIN | NOLOGIN } | { REPLICATION | NOREPLICATION } | {INDEPENDENT | NOINDEPENDENT} | {VCADMIN | NOVCADMIN} | CONNECTION LIMIT connlimit | [ ENCRYPTED | UNENCRYPTED ] PASSWORD { 'password' | DISABLE } | [ ENCRYPTED | UNENCRYPTED ] IDENTIFIED BY { 'password' [ REPLACE 'old_password' ] | DISABLE } | VALID BEGIN 'timestamp' | VALID UNTIL 'timestamp' | RESOURCE POOL 'respool' | USER GROUP 'groupuser' | PERM SPACE 'spacelimit' | TEMP SPACE 'tmpspacelimit' | SPILL SPACE 'spillspacelimit' | NODE GROUP logic_cluster_name | ACCOUNT { LOCK | UNLOCK } | PGUSER | AUTHINFO 'authinfo' | PASSWORD EXPIRATION period 修改用户名。 1 2 ALTER USER user_name RENAME TO new_name; 修改与用户关联的指定会话参数值。 1 2 ALTER USER user_name SET configuration_parameter { { TO | = } { value | DEFAULT } | FROM CURRENT }; 重置与用户关联的指定会话参数值。 1 2 ALTER USER user_name RESET { configuration_parameter | ALL };
  • 参数说明 关键字PUBLIC表示一个隐式定义的拥有所有角色的组。 权限类别和参数说明,请参见GRANT的参数说明。 任何特定角色拥有的特权包括直接授予该角色的特权、从该角色作为其成员的角色中得到的权限以及授予给PUBLIC的权限。因此,从PUBLIC收回SELECT特权并不一定会意味着所有角色都会失去在该对象上的SELECT特权,那些直接被授予的或者通过另一个角色被授予的角色仍然会拥有它。类似地,从一个用户收回SELECT后,如果PUBLIC仍有SELECT权限,该用户还是可以使用SELECT。 指定GRANT OPTION FOR时,只撤销对该权限授权的权力,而不撤销该权限本身。 如用户A拥有某个表的UPDATE权限,及WITH GRANT OPTION选项,同时A把这个权限赋予了用户B,则用户B持有的权限称为依赖性权限。当用户A持有的权限或者授权选项被撤销时,依赖性权限仍然存在,但如果声明了CASCADE,则所有依赖性权限都被撤销。 一个用户只能撤销由它自己直接赋予的权限。例如,如果用户A被指定授权(WITH ADMIN OPTION)选项,且把一个权限赋予了用户B,然后用户B又赋予了用户C,则用户A不能直接将C的权限撤销。但是,用户A可以撤销用户B的授权选项,并且使用CASCADE。这样,用户C的权限就会自动被撤销。另外一个例子:如果A和B都赋予了C同样的权限,则A可以撤销他自己的授权选项,但是不能撤销B的,因此C仍然拥有该权限。 如果执行REVOKE的角色持有的权限是通过多层成员关系获得的,则具体是哪个包含的角色执行的该命令是不确定的。在这种场合下,最好的方法是使用SET ROLE成为特定角色,然后执行REVOKE,否则可能导致删除了不想删除的权限,或者是任何权限都没有删除。
  • 示例 撤销joe用户的所有权限: 1 REVOKE ALL PRIVILEGES FROM joe; 撤销指定模式上授予的权限: 1 REVOKE USAGE,CREATE ON SCHEMA tpcds FROM tpcds_manager; 撤销joe用户的CONNECT特权: 1 REVOKE CONNECT ON DATABASE mydatabase FROM joe; 从用户joe撤销角色 admins 中的成员资格: 1 REVOKE admins FROM joe; 撤销用户joe对视图 myView 具有的所有特权: 1 REVOKE ALL PRIVILEGES ON myView FROM joe; 撤销针对表customer_t1的public插入特权: 1 REVOKE INSERT ON customer_t1 FROM PUBLIC; 撤销用户joe对模式tpcds的使用权限: 1 REVOKE USAGE ON SCHEMA tpcds FROM joe; 撤销用户joe对tpcds.reason表中r_reason_sk,r_reason_id的查询权限: 1 REVOKE select (r_reason_sk, r_reason_id) ON tpcds.reason FROM joe; 撤销用户joe的函数权限: 1 REVOKE execute ON FUNCTION func_add_sql(integer, integer) FROM joe CASCADE;
共100000条