云服务器内容精选

  • 基于样例的拓展 本章的场景样例可以结合第一章介绍的各模块代码样例进行修改和拓展.以straigh场景的osc为例,设定初始位置时,除了使用st坐标系(odr_point,即osc1.0中的LanePosition)还可以使用xyz坐标系(xyz_point,即osc1.0中的WorldPosition)来替代: st坐标系(odr_point)写法: Ego_InitPosition_LaneId: string = ['-1', '-2'] Ego_InitPosition_s: length = [0m..30m] Ego_Odr: odr_point = map.create_odr_point(road_id: '10', lane_id: Ego_InitPosition_LaneId, s: Ego_InitPosition_s, t: 0.0m) Ego_InitPosition: pose_3d with: keep(it.odr_point == Ego_Odr) 对应xyz坐标系(xyz_point)写法,其中y值-1.5m和-4.5m分别对应车道宽度为3m时的'-1'和'-2'车道的中心位置: y: length = [-1.5m, -4.5m] x: length = [0m..30m] Ego_xyz: xyz_point = map.create_xyz_point(x: x, y: y, z: 0.0m) Ego_InitPosition: pose_3d with: keep(it.xyz_point == Ego_xyz) 以上对等替换仅存在于odr_point的road_id固定的情形,当road_id(仿真器A中的TrackId)是一个可泛化的值时,起点可以出现在多条道路上,对应多段x和y值的组合区间,无法使用一个xyz_point直接对等泛化.此时可以使用多个动态场景来实现同等的泛化,例如: 假设地图上存在多条road,且对odr_point的road_id进行了泛化: Ego_InitPosition_Road_id: string = ['10', '1'] Ego_InitPosition_LaneId: string = ['-1', '-2'] Ego_InitPosition_s: length = [0m..30m] Ego_Odr: odr_point = map.create_odr_point(road_id: Ego_InitPosition_Road_id, lane_id: Ego_InitPosition_LaneId, s: Ego_InitPosition_s, t: 0.0m) Ego_InitPosition: pose_3d with: keep(it.odr_point == Ego_Odr) 可以在两个动态场景文件中分别使用一组xyz_point来替代,例如: 第一组对应road_id为'10'的情况(同前例): y: length = [-1.5m, -4.5m] x: length = [0m..30m] Ego_xyz: xyz_point = map.create_xyz_point(x: x, y: y, z: 0.0m) Ego_InitPosition: pose_3d with: keep(it.xyz_point == Ego_xyz) 第二组对应road_id为'1'的情况,该道路与road_id为'10'的道路垂直,x值的101.5m和104.5m分别对应车道宽度为3m时的'-1'和'-2'车道的中心位置: y: length = [-40m..-10m] x: length = [101.5m, 104.5m] Ego_xyz: xyz_point = map.create_xyz_point(x: x, y: y, z: 0.0m) Ego_InitPosition: pose_3d with: keep(it.xyz_point == Ego_xyz) 父主题: 种子地图的逻辑场景样例(仿真器A)
  • 示例 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 26 27 28 29 30 31 32 33 34 35 36 --创建表customer_demographics_t1。 gaussdb=# CREATE TABLE customer_demographics_t1 ( CD_DEMO_SK INTEGER NOT NULL, CD_GENDER CHAR(1) , CD_MARITAL_STATUS CHAR(1) , CD_EDUCATION_STATUS CHAR(20) , CD_PURCHASE_ESTIMATE INTEGER , CD_CREDIT_RATING CHAR(10) , CD_DEP_COUNT INTEGER , CD_DEP_EMPLOYED_COUNT INTEGER , CD_DEP_COLLEGE_COUNT INTEGER ) DISTRIBUTE BY HASH (CD_DEMO_SK); --插入记录。 gaussdb=# INSERT INTO customer_demographics_t1 VALUES(1920801,'M', 'U', 'DOCTOR DEGREE', 200, 'GOOD', 1, 0,0); --开启事务。 gaussdb=# START TRANSACTION; --更新字段值。把cd_education_status字段值更新为Unknown。 gaussdb=# UPDATE customer_demographics_t1 SET cd_education_status= 'Unknown'; --终止事务,上面所执行的更新会被撤销掉。 gaussdb=# ABORT; --查询数据。发现cd_education_status字段的值未被修改成Unknown。 gaussdb=# SELECT * FROM customer_demographics_t1 WHERE cd_demo_sk = 1920801; cd_demo_sk | cd_gender | cd_marital_status | cd_education_status | cd_purchase_estimate | cd_credit_rating | cd_dep_count | cd_dep_employed_count | cd_dep_college_count ------------+-----------+-------------------+----------------------+----------------------+------------------+--------------+-----------------------+---------------------- 1920801 | M | U | DOCTOR DEGREE | 200 | GOOD | 1 | 0 | 0 (1 row) --删除表。 gaussdb=# DROP TABLE customer_demographics_t1;
  • 参数说明 function_name 要修改的函数名称。 取值范围:已存在的函数名。 argmode 标识该参数是输入、输出参数。 取值范围: IN:声明入参。 OUT:声明出参。 INOUT:声明出入参。 VARIADIC:声明数组类型的参数。 argname 参数名称。 取值范围:字符串,符合标识符命名规范。 argtype 参数类型。 取值范围:有效的类型,请参考数据类型。 CALLED ON NULL INPUT 表明该函数的某些参数是NULL的时候可以按照正常的方式调用。缺省时与指定此参数的作用相同。 RETURNS NULL ON NULL INPUT STRICT STRICT用于指定如果函数的某个参数是NULL,此函数总是返回NULL。如果声明了这个参数,则如果存在NULL参数时不会执行该函数,而只是自动假设一个NULL结果。 RETURNS NULL ON NULL INPUT和STRICT的功能相同。 IMMUTABLE 表示该函数在给出同样的参数值时总是返回同样的结果。 STABLE 表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。 VOLATILE 表示该函数值可以在一次表扫描内改变,不会做任何优化。 SHIPPABLE NOT SHIPPABLE 表示该函数是否可以下推到DN上执行。 对于IMMUTABLE类型的函数,函数始终可以下推到DN上执行。 对于STABLE/VOLATILE类型的函数,仅当函数的属性是SHIPPABLE的时候,函数可以下推到DN执行。 LEAKPROOF 表示该函数没有副作用,指出参数只包括返回值。LEAKPROOF只能由系统管理员设置。 EXTERNAL (可选)目的是和SQL兼容,这个特性适合于所有函数,而不仅是外部函数 SECURITY INVOKER AUTHID CURRENT_USER 表明该函数将以调用它的用户的权限执行。缺省时与指定此参数的作用相同。 SECURITY INVOKER和AUTHID CURRENT_USER的功能相同。 SECURITY DEFINER AUTHID DEFINER 声明该函数将以创建它的用户的权限执行。 AUTHID DEFINER和SECURITY DEFINER的功能相同。 COST execution_cost 用来估计函数的执行成本。 execution_cost以cpu_operator_cost为单位。 取值范围:正数。 ROWS result_rows 估计函数返回的行数。用于函数返回的是一个集合。 取值范围:正数,默认值是1000行。 configuration_parameter value 把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。 取值范围:字符串。 DEFAULT OFF RESET 用户指定的值:需要满足修改参数的取值限制。 FROM CURRENT 取当前会话中的值设置为configuration_parameter的值。 new_name 函数的新名称。要修改函数的所属模式,必须拥有新模式的CREATE权限。 取值范围:字符串,符合标识符命名规范。 new_owner 函数的新所有者。要修改函数的所有者,新所有者必须拥有该函数所属模式的CREATE权限。需要注意注意的是:仅有初始化用户才可以将函数的owner设置为初始化用户。 取值范围:已存在的用户角色。 new_schema 函数的新模式。 取值范围:已存在的模式。
  • 示例 修改函数示例: --创建函数。 gaussdb=# CREATE OR REPLACE FUNCTION test_func(a int) RETURN int IS proc_var int; BEGIN proc_var := a; return 1; END; / --将函数test_func(a int)的名称修改为test_func_tk(a int)。 gaussdb=# ALTER FUNCTION test_func(a int) RENAME TO test_func_tk; --创建jim用户。 gaussdb=# CREATE USER jim PASSWORD '********'; --新建模式test。 gaussdb=# CREATE SCHEMA test; --将函数的所有者改为jim。 gaussdb=# ALTER FUNCTION test_func_tk(a int) OWNER TO jim; --将函数模式改为test。 gaussdb=# ALTER FUNCTION test_func_tk(a int) SET SCHEMA test; --删除函数。 gaussdb=# DROP FUNCTION test.test_func_tk(a int); --删除jim用户。 gaussdb=# DROP USER jim; --删除SCHEMA。 gaussdb=# DROP SCHEMA test;
  • 语法格式 修改自定义函数的附加参数。 1 2 ALTER FUNCTION function_name ( [ { [ argname ] [ argmode ] argtype} [, ...] ] ) action [ ... ] [ RESTRICT ]; 其中附加参数action子句语法为: 1 2 3 4 5 6 7 8 9 10 11 {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT} | {IMMUTABLE | STABLE | VOLATILE} | {SHIPPABLE | NOT SHIPPABLE} | {NOT FENCED | FENCED} | [ NOT ] LEAKPROOF | { [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER } | AUTHID { DEFINER | CURRENT_USER } | COST execution_cost | ROWS result_rows | SET configuration_parameter { { TO | = } { value | DEFAULT }| FROM CURRENT} | RESET {configuration_parameter | ALL} 修改自定义函数的名称。 1 2 ALTER FUNCTION function_name ( [ { [ argname ] [ argmode ] argtype} [, ...] ] ) RENAME TO new_name; 修改自定义函数的所有者。 1 2 ALTER FUNCTION function_name ( [ { [ argname ] [ argmode ] argtype} [, ...] ] ) OWNER TO new_owner; 修改自定义函数的模式。 1 2 ALTER FUNCTION function_name ( [ { [ argname ] [ argmode ] argtype} [, ...] ] ) SET SCHEMA new_schema;
  • 注意事项 只有函数的所有者或者被授予了函数ALTER权限的用户才能执行ALTER FUNCTION命令,系统管理员默认拥有该权限。针对所要修改属性的不同,对其还有以下权限约束: 如果函数中涉及对临时表相关的操作,则无法使用ALTER FUNCTION。 修改函数的所有者或修改函数的模式,当前用户必须是该函数的所有者或者系统管理员,且该用户是新所有者角色的成员。 只有系统管理员和初始化用户可以将function的schema修改成public。
  • 注意事项 只有SERVER的所有者或者被授予了SERVER的ALTER权限的用户才可以执行ALTER SERVER命令,系统管理员默认拥有该权限。但要修改SERVER的所有者,当前用户必须是该SERVER的所有者或者系统管理员,且该用户是新所有者角色的成员。 OPTIONS中的敏感字段(如password、secret_access_key)在使用多层引号时,语义和不带引号的场景是不同的,因此不会被识别为敏感字段进行脱敏。
  • 示例 --创建my_server。 gaussdb=# CREATE SERVER my_server FOREIGN DATA WRAPPER log_fdw; --修改外部服务的名称。 gaussdb=# ALTER SERVER my_server RENAME TO my_server_1; --删除my_server_1。 gaussdb=# DROP SERVER my_server_1;
  • 语法格式 修改外部服务的参数。 ALTER SERVER server_name [ VERSION 'new_version' ] [ OPTIONS ( {[ ADD | SET | DROP ] option ['value']} [, ... ] ) ]; 在OPTIONS选项里,ADD、SET和DROP指定要执行的操作,未指定时默认为ADD操作。option和value为对应操作的参数。 修改外部服务的所有者。 1 2 ALTER SERVER server_name OWNER TO new_owner; 修改外部服务的名称。 ALTER SERVER server_name RENAME TO new_name;
  • 参数说明 server_name 所修改的server的名称。 new_version 修改后server的新版本名称。 OPTIONS 更改该服务器的选项。ADD、SET和 DROP指定要执行的动作。如果没有显式地指定操作, 将会假定为ADD。选项名称必须唯一,名称和值也会使用该服务器的外部数据包装器库进行验证。 除了libpq支持的连接参数外,还额外提供以下参数: fdw_startup_cost 执行一个外表扫描时的启动耗时估算。这个值通常包含建立连接、远端对请求的分析和生成计划的耗时。默认值为100。取值范围为大于0的实数。 fdw_tuple_cost 在远端服务器上对每一个元组进行扫描时的额外消耗。这个值通常表示数据在server间传输的额外消耗。默认值为0.01。取值范围为大于0的实数。 new_name 修改后server的新名称。
  • 参数说明 policy_name 审计策略名称,需要唯一,不可重复。 取值范围:字符串,要符合标识符命名规范。 resource_label_name 资源标签名称。 DDL 指的是针对数据库执行如下操作时进行审计,目前支持:CREATE、ALTER、DROP、ANALYZE、COMMENT、GRANT、REVOKE、SET、SHOW。 DML 指的是针对数据库执行如下操作时进行审计,目前支持:SELECT、COPY、DEALLOCATE、DELETE、EXECUTE、INSERT、PREPARE、REINDEX、TRUNCATE、UPDATE。 ALL 指的是上述DDL或DML中支持的所有对数据库的操作。当形式为{ DDL | ALL }时,ALL指所有DDL操作;当形式为{ DML | ALL }时,ALL指所有DML操作。 filter_type 指定审计策略的过滤信息,过滤类型包括:IP、ROLES、APP。 filter_value 指具体过滤信息内容。 policy_comments 用于记录策略相关的描述信息。 ENABLE|DISABLE 可以打开或关闭统一审计策略。
  • 示例 添加/删除审计策略中的操作类型。 --创建一个对数据库执行CREATE的审计策略adt1。 gaussdb=# CREATE AUDIT POLICY adt1 PRIVILEGES CREATE; --添加adt1审计策略中的DROP。 gaussdb=# ALTER AUDIT POLICY adt1 ADD PRIVILEGES (DROP); --删除adt1审计策略中的DROP。 gaussdb=# ALTER AUDIT POLICY adt1 REMOVE PRIVILEGES (DROP); 修改审计策略的注释信息。 --修改adt1审计策略的注释信息为adt1_comments。 gaussdb=# ALTER AUDIT POLICY adt1 COMMENTS 'adt1_comments'; 修改审计策略的过滤信息。 --创建bob_audit用户。 gaussdb=# CREATE USER bob_audit PASSWORD '********'; --修改adt1审计策略的过滤用户为bob_audit。 gaussdb=# ALTER AUDIT POLICY adt1 MODIFY (FILTER ON (ROLES(bob_audit))); --删除bob_audit用户。 gaussdb=# DROP USER bob_audit; 删除审计策略的过滤条件。 --删除adt1审计策略的过滤条件。 gaussdb=# ALTER AUDIT POLICY adt1 DROP FILTER; 关闭审计策略。 --关闭adt1审计策略。 gaussdb=# ALTER AUDIT POLICY adt1 DISABLE; --删除adt1审计策略。 gaussdb=# DROP AUDIT POLICY adt1;
  • 语法格式 添加/删除审计策略中的操作类型。 ALTER AUDIT POLICY [ IF EXISTS ] policy_name { ADD | REMOVE } { privilege_audit_clause | access_audit_clause }; 修改审计策略中的过滤条件。 ALTER AUDIT POLICY [ IF EXISTS ] policy_name MODIFY ( filter_group_clause ); 将审计策略中的过滤条件删除。 ALTER AUDIT POLICY [ IF EXISTS ] policy_name DROP FILTER; 修改审计策略描述。 ALTER AUDIT POLICY [ IF EXISTS ] policy_name COMMENTS policy_comments; 打开或者关闭审计策略。 ALTER AUDIT POLICY [ IF EXISTS ] policy_name { ENABLE | DISABLE }; privilege_audit_clause: 审计策略中具体的DDL操作类型及目标资源标签。 1 PRIVILEGES ({ DDL | ALL } [ ON LABEL ( resource_label_name [, ... ] ) ]) access_audit_clause: 审计策略中具体的DML操作类型及目标资源标签。 AC CES S ({ DML | ALL } [ ON LABEL ( resource_label_name [, ... ] ) ]) filter_group_clause: 审计策略中的过滤条件。 1 FILTER ON { filter_type ( filter_value [, ... ] ) } [, ... ]
  • 参数说明 function_name 要修改的函数名称。 取值范围:已存在的函数名。 argmode 标识该参数是输入、输出参数。 取值范围: IN:声明入参。 OUT:声明出参。 INOUT:声明出入参。 VARIADIC:声明数组类型的参数。 argname 参数名称。 取值范围:字符串,符合标识符命名规范。 argtype 函数参数的类型。 取值范围:有效的类型,请参考数据类型 CALLED ON NULL INPUT 表明该函数的某些参数是NULL的时候可以按照正常的方式调用。缺省时与指定此参数的作用相同。 RETURNS NULL ON NULL INPUT STRICT STRICT用于指定如果函数的某个参数是NULL,此函数总是返回NULL。如果声明了这个参数,则如果存在NULL参数时不会执行该函数,而只是自动假设一个NULL结果。 RETURNS NULL ON NULL INPUT和STRICT的功能相同。 IMMUTABLE 表示该函数在给出同样的参数值时总是返回同样的结果。 STABLE 表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。 VOLATILE 表示该函数值可以在一次表扫描内改变,不会做任何优化。 LEAKPROOF 表示该函数没有副作用,指出参数只包括返回值。LEAKPROOF只能由系统管理员设置。 EXTERNAL (可选)目的是和SQL兼容,这个特性适合于所有函数,而不仅是外部函数。 SECURITY INVOKER AUTHID CURRENT_USER 表明该函数将以调用它的用户的权限执行。缺省时与指定此参数的作用相同。 SECURITY INVOKER和AUTHID CURRENT_USER的功能相同。 SECURITY DEFINER AUTHID DEFINER 声明该函数将以创建它的用户的权限执行。 AUTHID DEFINER和SECURITY DEFINER的功能相同。 COST execution_cost 用来估计函数的执行成本。 execution_cost以cpu_operator_cost为单位。 取值范围:正数。 ROWS result_rows 估计函数返回的行数。用于函数返回的是一个集合。 取值范围:正数,默认值是1000行。 configuration_parameter value 把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。 取值范围:字符串。 DEFAULT OFF RESET 用户指定的值:需要满足修改参数的取值限制。 FROM CURRENT 取当前会话中的值设置为configuration_parameter的值。 new_name 函数的新名称。要修改函数的所属模式,必须拥有新模式的CREATE权限。 取值范围:字符串,符合标识符命名规范。 new_owner 函数的新所有者。要修改函数的所有者,新所有者必须拥有该函数所属模式的CREATE权限。需要注意注意的是:仅有初始化用户才可以将函数的owner设置为初始化用户。 取值范围:已存在的用户角色。 new_schema 函数的新模式。 取值范围:已存在的模式。
  • 示例 修改函数示例: --开启依赖功能。 gaussdb=# SET behavior_compat_options ='plpgsql_dependency'; --创建函数。 gaussdb=# CREATE OR REPLACE FUNCTION test_func(a int) RETURN int IS proc_var int; BEGIN proc_var := a; return 1; END; / --将函数test_func(a int)的名称修改为test_func_tk(a int)。 gaussdb=# ALTER FUNCTION test_func(a int) RENAME TO test_func_tk; --创建jim用户。 gaussdb=# CREATE USER jim PASSWORD '********'; --将函数的所有者改为jim。 gaussdb=# ALTER FUNCTION test_func_tk(a int) OWNER TO jim; --新建模式test。 gaussdb=# CREATE SCHEMA test; --将函数模式改为test。 gaussdb=# ALTER FUNCTION test_func_tk(a int) SET SCHEMA test; 重编译函数译示例: --用函数名重编译函数。 gaussdb=# ALTER FUNCTION test.test_func_tk COMPILE; --用函数带类型签名重编译存储过程。 gaussdb=# ALTER FUNCTION test.test_func_tk(a int) COMPILE; --删除函数。 gaussdb=# DROP FUNCTION test.test_func_tk(a int); --删除jim用户。 gaussdb=# DROP USER jim; --删除SCHEMA。 gaussdb=# DROP SCHEMA test;