华为云用户手册

  • GLOBAL_WORKLOAD_SQL_COUNT GLOBAL_WORKLOAD_SQL_COUNT视图显示集群中所有Workload控制组内SQL语句执行次数的统计信息,包括SELECT、UPDATE、INSERT、DELETE语句的执行次数统计,以及DDL、DML、DCL类型语句的执行次数统计。 表1 GLOBAL_WORKLOAD_SQL_COUNT字段 名称 类型 描述 workload name Workload控制组名称。 select_count bigint SELECT数量。 update_count bigint UPDATE数量。 insert_count bigint INSERT数量。 delete_count bigint DELETE数量。 ddl_count bigint DDL数量。 dml_count bigint DML数量。 dcl_count bigint DCL数量。 父主题: 系统视图
  • GS_COLUMN_TABLE_IO_STAT GS_COLUMN_TABLE_IO_STAT视图显示当前数据库中所有列存表在当前节点上的IO情况。各统计字段为实例启动以来的累计值。 表1 GS_COLUMN_TABLE_IO_STAT字段 名称 类型 描述 schemaname name 表的命名空间。 relname name 表的名称。 heap_read bigint 堆逻辑读块数。 heap_hit bigint 堆命中块数。 idx_read bigint 索引逻辑读块数。 idx_hit bigint 索引命中块数。 cu_read bigint Compression Unit逻辑读个数。 cu_hit bigint Compression Unit命中个数。 cidx_read bigint Compression Unit Index逻辑读个数。 cidx_hit bigint Compression Unit Index命中个数。 父主题: 系统视图
  • 约束说明 创建一个新job后,该job从属于当前coordinator(即:该job仅在当前coordinator上调度和执行),其他coordinator不会调度和执行该job。所有coordinator都可以查看、修改、删除其他CN创建的job。 job只能通过dbms_job高级包提供的接口进行创建、更新、删除操作,因为高级包的接口中会考虑所有CN间job信息的同步和pg_jobs表主键的关联操作,如果通过DML语句对pg_jobs表进行增删改,会导致job信息在CN间不一致和系统表无法关联变更的混乱问题,会严重影响job内部的管理。 由于用户创建的每个任务和CN绑定,若不开启CN故障自动迁移功能,当任务运行过程中,该CN故障,则该任务的状态无法实时刷新。如果在任务未执行时CN故障,则该CN上的任务都得不到正常的调度和执行。建议开启CN故障自动迁移功能,故障CN上的作业会迁移至其他CN继续调度。 job在定时执行过程中,需要在当前job所属的CN上实时更新该job的运行状态、最近执行开始时间、最近执行结束时间、下次开始时间、失败次数(如果job执行失败)等相关参数信息到pg_jobs系统表中,并同步到其他CN,保证job信息的一致性。如果其他CN存在节点故障,那么job所属CN会同步超时重发的处理,导致job执行时间变长,但CN间同步超时失败后,原CN上pg_jobs表中job的相关信息仍然能正常更新,且job能正常执行成功。当故障CN恢复正常后,可能出现该CN上pg_jobs表中当前job的执行时间、运行状态等参数与原CN上不一致的情况,需要原CN上再次执行该job后才能保证job信息的同步。 对于并发同时有多个job到达执行时间的场景,由于会为每个job创建一个线程来执行job,由于系统内部启动每个线程的时间会有延迟,因此会导致同时并发执行的job的开始时间有延迟,每个job的延迟时间在0.1ms左右。 job中待执行SQL语句有长度限制,最长为8K。
  • 接口介绍 高级功能包DBMS_JOB支持的所有接口请参见表1。 表1 DBMS_JOB 接口名称 描述 DBMS_JOB.SUBMIT 提交一个定时任务。作业号由系统自动生成。 DBMS_JOB.ISUBMIT 提交一个定时任务。作业号由用户指定。 DBMS_JOB.REMOVE 通过作业号来删除定时任务。 DBMS_JOB.BROKEN 禁用或者启用定时任务。 DBMS_JOB.CHANGE 修改定时任务的属性,包括任务内容、下次执行时间、执行间隔。 DBMS_JOB.WHAT 修改定时任务的任务内容属性。 DBMS_JOB.NEXT_DATE 修改定时任务的下次执行时间属性。 DBMS_JOB.INTERVAL 修改定时任务的执行间隔属性。 DBMS_JOB.CHANGE_OWNER 修改定时任务的属主。 DBMS_JOB.SUBMIT 存储过程SUBMIT提交一个系统提供的定时任务。 DBMS_JOB.SUBMIT函数原型为: 1 2 3 4 5 DMBS_JOB.SUBMIT( what IN TEXT, next_date IN TIMESTAMP DEFAULT sysdate, job_interval IN TEXT DEFAULT 'null', job OUT INTEGER); 当创建一个定时任务(DBMS_JOB)时,系统默认将当前数据库和用户名与当前创建的定时任务(DBMS_JOB)绑定起来。该接口函数可以通过call或select调用,如果通过select调用,可以不填写出参。如果在存储过程中则需要用通过perform调用该接口函数。 表2 DBMS_JOB.SUBMIT接口参数说明 参数 类型 入参/出参 是否可以为空 描述 what text IN 否 要执行的SQL语句。支持一个或多个‘DML’,‘匿名块’,‘调用存储过程的语句’或3种混合的场景。 next_date timestamp IN 否 下次作业运行时间。默认值为当前系统时间(sysdate)。如果是过去时间,在提交作业时表示立即执行。 interval text IN 是 用来计算下次作业运行时间的时间表达式,可以是interval表达式,也可以是sysdate加上一个numeric值(例如:sysdate+1.0/24)。如果为空值或字符串"null"表示只执行一次,执行后JOB状态STATUS变成'd' 不再执行。 job integer OUT 否 作业号。范围为1~32767。当使用select调用dbms.submit时,该参数可以省略。 示例: 1 2 3 4 5 select DBMS_JOB.SUBMIT('call pro_xxx();', to_date('20180101','yyyymmdd'),'sysdate+1'); select DBMS_JOB.SUBMIT('call pro_xxx();', to_date('20180101','yyyymmdd'),'sysdate+1.0/24'); CALL DBMS_JOB.SUBMIT('INSERT INTO T_JOB VALUES(1); call pro_1(); call pro_2();', add_months(to_date('201701','yyyymm'),1), 'date_trunc(''day'',SYSDATE) + 1 +(8*60+30.0)/(24*60)' ,:jobid); DBMS_JOB.ISUBMIT ISUBMIT与SUBMIT语法功能相同,但其第一个参数是入参,即指定的作业号,SUBMIT最后一个参数是出参,表示系统自动生成的作业号。 示例: 1 CALL dbms_job.isubmit(101, 'insert_msg_statistic1;', sysdate, 'sysdate+3.0/24'); DBMS_JOB.REMOVE 存储过程REMOVE删除指定的定时任务。 DBMS_JOB.REMOVE函数原型为: 1 REMOVE(job IN INTEGER); 表3 DBMS_JOB.REMOVE接口参数说明 参数 类型 入参/出参 是否可以为空 描述 job integer IN 否 指定的作业号。 示例: CALL dbms_job.remove(101); DBMS_JOB.BROKEN 存储过程BROKEN禁用或者启用定时任务。 DBMS_JOB.BROKEN函数原型为: 1 2 3 4 DMBS_JOB.BROKEN( job IN INTEGER, broken IN BOOLEAN, next_date IN TIMESTAMP DEFAULT sysdate); 表4 DBMS_JOB.BROKEN接口参数说明 参数 类型 入参/出参 是否可以为空 描述 job integer IN 否 指定的作业号。 broken boolean IN 否 状态标志位,true代表禁用,false代表启用。具体true或false值更新当前job;如果为空值,则不改变原有job的状态。 next_date timestamp IN 是 下次运行时间,默认为当前系统时间。如果参数broken状态为true,则更新该参数为'4000-1-1';如果参数broken状态为false,且如果参数next_date不为空值,则更新指定job的next_date值,如果next_date为空值,则不更新next_date值。该参数可以省略,为默认值。 示例: 1 2 CALL dbms_job.broken(101, true); CALL dbms_job.broken(101, false, sysdate); DBMS_JOB.CHANGE 存储过程CHANGE修改定时任务的属性,包括任务内容、下次执行时间、执行间隔。 DBMS_JOB.CHANGE函数原型为: 1 2 3 4 5 DMBS_JOB.CHANGE( job IN INTEGER, what IN TEXT, next_date IN TIMESTAMP, interval IN TEXT); 表5 DBMS_JOB.CHANGE接口参数说明 参数 类型 入参/出参 是否可以为空 描述 job integer IN 否 指定的作业号。 what text IN 是 执行的存储过程名或者sql语句块。如果该参数为空值,则不更新指定job的what值,否则更新指定job的what值。 next_date timestamp IN 是 下次运行时间。如果该参数为空值,则不更新指定job的next_date值,否则更新指定job的next_date值。 interval text IN 是 用来计算下次作业运行时间的时间表达式。如果该参数为空值,则不更新指定job的interval值;如果该参数不为空值,会校验interval是否为有效的时间类型或interval类型,则更新指定job的interval值。如果为字符串"null"表示只执行一次,执行后JOB状态STATUS变成'd' 不再执行。 示例: 1 2 CALL dbms_job.change(101, 'call userproc();', sysdate, 'sysdate + 1.0/1440'); CALL dbms_job.change(101, 'insert into tbl_a values(sysdate);', sysdate, 'sysdate + 1.0/1440'); DBMS_JOB.WHAT 存储过程WHAT修改定时任务的任务内容属性。 DBMS_JOB.WHAT函数原型为: 1 2 3 DMBS_JOB.WHAT( job IN INTEGER, what IN TEXT); 表6 DBMS_JOB.WHAT接口参数说明 参数 类型 入参/出参 是否可以为空 描述 job integer IN 否 指定的作业号。 what text IN 否 执行的存储过程调用或者sql语句块。 当what参数是一个或多个可以执行成功的sql语句/程序块/调用存储过程时,该接口函数才能被执行成功,否则会执行失败。 若what参数为一个简单的insert、update等语句,需要在表前加模式名。 示例: 1 2 CALL dbms_job.what(101, 'call userproc();'); CALL dbms_job.what(101, 'insert into tbl_a values(sysdate);'); DBMS_JOB.NEXT_DATE 存储过程NEXT_DATE修改定时任务的下次执行时间属性。 DBMS_JOB.NEXT_DATE函数原型为: 1 2 3 DMBS_JOB.NEXT_DATE( job IN INTEGER, next_date IN TIMESTAMP); 表7 DBMS_JOB.NEXT_DATE接口参数说明 参数 类型 入参/出参 是否可以为空 描述 job integer IN 否 指定的作业号。 next_date timestamp IN 否 下次运行时间。 如果输入的next_date的值小于当前日期值,该job会立即执行一次。 示例: 1 CALL dbms_job.next_date(101, sysdate); DBMS_JOB.INTERVAL 存储过程INTERVAL修改定时任务的执行间隔属性。 DBMS_JOB.INTERVAL函数原型为: 1 2 3 DMBS_JOB.INTERVAL( job IN INTEGER, interval IN TEXT); 表8 DBMS_JOB.INTERVAL接口参数说明 参数 类型 入参/出参 是否可以为空 描述 job integer IN 否 指定的作业号。 interval text IN 是 用来计算下次作业运行时间的时间表达式。如果为空值或字符串"null"表示只执行一次,执行后JOB状态STATUS变成'd' 不再执行。interval是否为有效的时间类型或interval类型。 示例: 1 CALL dbms_job.interval(101, 'sysdate + 1.0/1440'); 对于指定job正在运行状态(即job_status为'r')时,不允许通过remove、change、next_date、what、interval等接口删除或修改job的参数信息。
  • 系统表和系统视图概述 系统表是GaussDB(DWS)存放结构元数据,是GaussDB(DWS)数据库系统运行控制信息的来源,也是数据库系统的核心组成部分。系统表包含集群安装信息以及GaussDB(DWS)上运行的各种查询和进程的信息。可以通过查询系统表来收集有关数据库的信息。 系统视图提供了查询系统表和访问数据库内部状态的方法。当用户对数据库中的一张或者多张表的某些字段的组合感兴趣,而又不想每次键入这些查询时,用户就可以定义一个视图来解决这个问题。视图与基本表不同,不是物理上实际存在的,是一个虚表。数据库中仅存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,从视图中查询出的数据也随之改变。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中用户感兴趣的数据及变化。视图每次被引用的时候都会运行一次。 三权分立下,非管理员无权查看系统表和视图。非三权分立下,系统表和系统视图要么只对管理员可见,要么对所有用户可见。若标识了需要系统管理员权限的系统表和视图,只有系统管理员可以查询。 禁止对系统表或系统视图进行增删改等操作,手动对系统表或系统视图的修改或破坏可能会导致系统信息不一致,造成系统控制异常甚至出现集群不可用。 表1 常见系统表举例 系统表名 描述 PG_AM 存储有关索引访问方法的信息。系统支持的每种索引访问方法都有一行。 PG_ATTRIBUTE 存储关于表字段的信息。 PG_AUTHID 存储有关数据库认证标识符(角色)的信息。角色把“用户”的概念包含在内。一个用户实际上就是一个rolcanlogin标志被设置的角色。任何角色(不管rolcanlogin设置与否)都能够把其他角色作为成员。 在一个集群中只有一份pg_authid,不是每个数据库有一份。需要有系统管理员权限才可以访问此系统表。 PG_CONSTRAINT 存储表上的检查约束、主键、唯一约束和外键约束。 PG_CLASS 存储数据库对象信息及其之间的关系。 PG_DATABASE 存储关于可用数据库的信息。 PG_DEPEND 记录数据库对象之间的依赖关系。这些信息允许DROP命令找出哪些其它对象必须由DROP CASCADE删除,或者是在DROP RESTRICT的情况下避免删除。 PG_PARTITION 存储数据库内所有分区表(partitioned table)、分区(table partition)、分区上toast表和分区索引(index partition)四类对象的信息。分区表索引(partitioned index)的信息不在PG_PARTITION系统表中保存。 PG_FOREIGN_TABLE 存储外部表的辅助信息。 PG_INDEX 存储索引的一部分信息,其他的信息大多数在PG_CLASS中。 PG_JOBS 存储用户创建的定时任务的任务详细信息,定时任务线程定时轮询pg_jobs系统表中的时间,当任务到期会触发任务的执行。该系统表属于Shared Relation,所有创建的job记录对所有数据库可见。 PG_LARGEOBJECT 保存那些标记着“大对象”的数据。一个大对象是使用其创建时分配的OID标识的。每个大对象都分解成足够小的小段或者“页面”以便以行的形式存储在PG_LARGEOBJECT里。每页的数据定义为LOBLKSIZE。需要有系统管理员权限才可以访问此系统表。 PG_NAMESPACE 存储命名空间,即存储schema相关的信息。 PG_PROC 存储函数或过程的信息。 表2 常见系统视图举例 系统视图名 描述 GS_CLUSTER_RESOURCE_INFO 显示所有DN资源的汇总信息。 GS_SQL_COUNT 显示数据库当前节点当前时刻执行的五类语句(SELECT、INSERT、UPDATE、DELETE、MERGE INTO)统计信息,包括执行次数和响应时间(除MERGE INTO语句外,统计其他四类语句的最大、最小、平均和总响应时间,单位为微秒),以及DDL、DML、DCL类型语句的执行次数。 PG_LOCKS 存储各打开事务所持有的锁信息。 PG_ROLES 提供访问数据库角色的相关信息。 PG_RULES 提供对查询重写规则的有用信息访问的接口。 PG_TOTAL_USER_RESOURCE_INFO 显示所有用户资源使用情况,需要使用管理员用户进行查询。此视图在参数se_workload_manager为on时才有效。 PG_USER 提供了访问数据库用户的信息。 PG_VIEWS 提供访问数据库中每个视图的有用信息。 PG_STAT_ACTIVITY 显示和当前用户查询相关的信息。若有管理员权限或预置角色权限可以显示和所有用户查询相关的信息。 PG_TABLES 提供了对数据库中每个表访问的有用信息。 PLAN_TABLE 显示用户通过执行EXPLAIN PLAN收集到的计划信息。计划信息的生命周期是session级别,session退出后相应的数据将被清除。同时不同session和不同user间的数据是相互隔离的。 父主题: 系统表和系统视图
  • GS_CLUSTER_RESOURCE_INFO GS_CLUSTER_RESOURCE_INFO视图显示的是所有DN资源的汇总信息。 表1 GS_CLUSTER_RESOURCE_INFO字段 名称 类型 描述 min_mem_util integer DN最小内存使用率。 max_mem_util integer DN最大内存使用率。 min_cpu_util integer DN最小CPU使用率。 max_cpu_util integer DN最大CPU使用率。 min_io_util integer DN最小IO使用率。 max_io_util integer DN最大IO使用率。 used_mem_rate integer 物理节点最大内存使用率。 父主题: 系统视图
  • 示例:通过本地文件导入导出数据 在使用JAVA语言基于GaussDB(DWS)进行二次开发时,可以使用CopyManager接口,通过流方式,将数据库中的数据导出到本地文件或者将本地文件导入数据库中,文件格式支持CSV、TEXT等格式。 样例程序如下,执行时需要加载GaussDB(DWS) jdbc驱动。 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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 //以下用例以gsjdbc4.jar为例,如果要使用gsjdbc200.jar,请替换驱动类名(将代码中的“org.postgresql”替换成“com.huawei.gauss200.jdbc”)与连接URL串前缀(将“jdbc:postgresql”替换为“jdbc:gaussdb”)。 import java.sql.Connection; import java.sql.DriverManager; import java.io.IOException; import java.io.FileInputStream; import java.io.FileOutputStream; import java.sql.SQLException; import org.postgresql.copy.CopyManager; import org.postgresql.core.BaseConnection; public class Copy{ public static void main(String[] args) { String urls = new String("jdbc:postgresql://10.180.155.74:8000/gaussdb"); //数据库URL String username = new String("jack"); //用户名 String password = new String("********"); //密码 String tablename = new String("migration_table"); //定义表信息 String tablename1 = new String("migration_table_1"); //定义表信息 String driver = "org.postgresql.Driver"; Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(urls, username, password); } catch (ClassNotFoundException e) { e.printStackTrace(System.out); } catch (SQLException e) { e.printStackTrace(System.out); } // 将migration_table查询结果导出到本地文件d:/data.txt try { copyToFile(conn, "d:/data.txt", "(SELECT * FROM migration_table)"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //将d:/data.txt中的数据导入到migration_table_1中。 try { copyFromFile(conn, "d:/data.txt", migration_table_1); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 将migration_table_1中的数据导出到本地文件d:/data1.txt try { copyToFile(conn, "d:/data1.txt", migration_table_1); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void copyFromFile(Connection connection, String filePath, String tableName) throws SQLException, IOException { FileInputStream fileInputStream = null; try { CopyManager copyManager = new CopyManager((BaseConnection)connection); fileInputStream = new FileInputStream(filePath); copyManager.copyIn("COPY " + tableName + " FROM STDIN", fileInputStream); } finally { if (fileInputStream != null) { try { fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void copyToFile(Connection connection, String filePath, String tableOrQuery) throws SQLException, IOException { FileOutputStream fileOutputStream = null; try { CopyManager copyManager = new CopyManager((BaseConnection)connection); fileOutputStream = new FileOutputStream(filePath); copyManager.copyOut("COPY " + tableOrQuery + " TO STDOUT", fileOutputStream); } finally { if (fileOutputStream != null) { try { fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } } 父主题: 基于JDBC开发
  • EXECUTE IMMEDIATE 语法图请参见图1。 图1 EXECUTE IMMEDIATE dynamic_select_clause::= using_clause子句的语法图参见图2。 图2 using_clause-1 对以上语法格式的解释如下: define_variable,用于指定存放单行查询结果的变量。 USING IN bind_argument,用于指定存放传递给动态SQL值的变量,即在dynamic_select_string中存在占位符时使用。 USING OUT bind_argument,用于指定存放动态SQL返回值的变量。 查询语句中,into和out不能同时存在; 占位符命名以“:”开始,后面可跟数字、字符或字符串,与USING子句的bind_argument一一对应; bind_argument只能是值、变量或表达式,不能是表名、列名、数据类型等数据库对象,即不支持使用bind_argument为动态SQL语句传递模式对象。如果存储过程需要通过声明参数传递数据库对象来构造动态SQL语句(常见于执行DDL语句时),建议采用连接运算符“||”拼接dynamic_select_clause; 动态PL/SQL块允许出现重复的占位符,即相同占位符只能与USING子句的一个bind_argument按位置对应。 示例 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 --从动态语句检索值(INTO 子句): DECLARE staff_count VARCHAR2(20); BEGIN EXECUTE IMMEDIATE 'select count(*) from staffs' INTO staff_count; dbms_output.put_line(staff_count); END; / --传递并检索值(INTO子句用在USING子句前): CREATE OR REPLACE PROCEDURE dynamic_proc AS staff_id NUMBER(6) := 200; first_name VARCHAR2(20); salary NUMBER(8,2); BEGIN EXECUTE IMMEDIATE 'select first_name, salary from staffs where staff_id = :1' INTO first_name, salary USING IN staff_id; dbms_output.put_line(first_name || ' ' || salary); END; / --调用存储过程 CALL dynamic_proc(); --删除存储过程 DROP PROCEDURE dynamic_proc;
  • OPEN FOR 动态查询语句还可以使用OPEN FOR打开动态游标来执行。 语法参见图3。 图3 open_for::= 参数说明: cursor_name:要打开的游标名。 dynamic_string:动态查询语句。 USING value:在dynamic_string中存在占位符时使用。 游标的使用请参考游标。 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 DECLARE name VARCHAR2(20); phone_number VARCHAR2(20); salary NUMBER(8,2); sqlstr VARCHAR2(1024); TYPE app_ref_cur_type IS REF CURSOR; --定义游标类型 my_cur app_ref_cur_type; --定义游标变量 BEGIN sqlstr := 'select first_name,phone_number,salary from staffs where section_id = :1'; OPEN my_cur FOR sqlstr USING '30'; --打开游标, using是可选的 FETCH my_cur INTO name, phone_number, salary; --获取数据 WHILE my_cur%FOUND LOOP dbms_output.put_line(name||'#'||phone_number||'#'||salary); FETCH my_cur INTO name, phone_number, salary; END LOOP; CLOSE my_cur; --关闭游标 END; /
  • lc_messages 参数说明:设置信息显示的语言。 可接受的值是与系统相关的;在一些系统上,这个区域范畴并不存在,不过仍然允许设置这个变量,只是不会有任何效果。同样,也有可能是所期望的语言的翻译信息不存在。在这种情况下,用户仍然能看到英文信息。 参数类型:SUSET 取值范围:字符串 使用命令locale -a查看当前系统支持的区域和相应的编码格式,并可以选择进行设置。 默认情况下,gs_initdb会根据当前的系统环境初始化此参数,通过locale命令可以查看当前的配置环境。 默认值:C
  • default_text_search_config 参数说明:设置全文检索的配置信息。 如果设置为不存在的文本搜索配置时将会报错。如果default_text_search_config对应的文本搜索配置被删除,需要重新设置default_text_search_config,否则会报设置错误。 其被文本搜索函数使用,这些函数并没有一个明确指定的配置。 当与环境相匹配的配置文件确定时,gs_initdb会选择一个与环境相对应的设置来初始化配置文件。 参数类型:USERSET 取值范围:字符串 GaussDB(DWS)支持pg_catalog.english,pg_catalog.simple两种配置。 默认值:pg_catalog.english
  • client_encoding 参数说明:设置客户端的字符编码类型。 请根据前端业务的情况确定。尽量客户端编码和服务器端编码一致,提高效率。 参数类型:USERSET 取值范围:兼容PostgreSQL所有的字符编码类型。其中UTF8表示使用数据库的字符编码类型。 使用命令locale -a查看当前系统支持的区域和相应的编码格式,并可以选择进行设置。 默认情况下,gs_initdb会根据当前的系统环境初始化此参数,通过locale命令可以查看当前的配置环境。 参数建议保持默认值,不建议通过gs_guc工具或其他方式直接在postgresql.conf文件中设置client_encoding参数,即使设置也不会生效,以保证集群内部通信编码格式一致。 默认值:UTF8 推荐值:SQL_ASCII/UTF8
  • DateStyle 参数说明:设置日期和时间值的显示格式,以及有歧义的输入值的解析规则。 这个变量包含两个独立的部分:输出格式声明(ISO、Postgres、SQL、German)和输入输出的年/月/日顺序(DMY、MDY、YMD)。这两个可以独立设置或者一起设置。关键字Euro和European等价于DMY;关键字US、NonEuro、NonEuropean等价于MDY 。 参数类型:USERSET 取值范围:字符串 默认值:ISO, MDY gs_initdb会将这个参数初始化成与lc_time一致的值。 设置建议:优先推荐使用ISO格式。Postgres、SQL和German均采用字母缩写的形式来表示时区,例如“EST、WST、CST”等。
  • IntervalStyle 参数说明:设置区间值的显示格式。 参数类型:USERSET 取值范围:枚举型 sql_standard表示产生与SQL标准规定匹配的输出。 postgres表示产生与PostgreSQL 8.4版本相匹配的输出,当DateStyle参数被设为ISO时。 postgres_verbose表示产生与PostgreSQL 8.4版本相匹配的输出,当DateStyle参数被设为non_ISO时。 iso_8601表示产生与在ISO 8601中定义的“格式与代号”相匹配的输出。 oracle表示产生于Oracle中与numtodsinterval函数相匹配的输出结果,详细请参考numtodsinterval。 IntervalStyle参数也会影响不明确的间隔输入的说明。 默认值:postgres
  • GLOBAL_WORKLOAD_TRANSACTION GLOBAL_WORKLOAD_TRANSACTION视图提供集群所有CN上WORKLOAD控制组相关的事务信息的总和。需要有系统管理员权限才可以访问。该视图仅在资源实时监控功能开启,即enable_resource_track为on时有效。 表1 GLOBAL_WORKLOAD_TRANSACTION字段 名称 类型 描述 workload name WORKLOAD控制组名称。 commit_counter bigint 各CN上提交次数总和。 rollback_counter bigint 各CN上回滚次数总和。 resp_min bigint 集群总体最小响应时间。 resp_max bigint 集群总体最大响应时间。 resp_avg bigint 各CN上平均响应时间。 resp_total bigint 各CN上响应时间总和。 父主题: 系统视图
  • 对结果进行排序 使用ORDER BY语句可以让查询结果按照期望的方式进行排序。 1 2 3 4 5 6 7 8 9 10 11 SELECT product_id,product_name,category,quantity FROM newproducts ORDER BY quantity DESC; product_id | product_name | category | quantity ------------+--------------+-------------+---------- 3577 | dumbbell | sports | 550 2344 | milklotion | skin care | 320 1666 | Frisbee | toys | 244 1210 | necklace | jewels | 200 1502 | earphones | electronics | 150 1700 | interface | books | 100 1601 | telescope | toys | 80 (7 rows)
  • 对结果进行筛选 通过WHERE语句对查询的结果进行过滤,找到想要查询的部分。 1 2 3 4 5 6 SELECT * FROM newproducts WHERE category='toys'; product_id | product_name | category | quantity ------------+--------------+----------+---------- 1601 | telescope | toys | 80 1666 | Frisbee | toys | 244 (2 rows)
  • 限制结果查询数量 如果需要查询只返回部分结果,可以使用LIMIT语句限制查询结果返回的记录数。 1 2 3 4 5 6 7 8 9 SELECT product_id,product_name,category,quantity FROM newproducts ORDER BY quantity DESC limit 5; product_id | product_name | category | quantity ------------+--------------+-------------+---------- 3577 | dumbbell | sports | 550 2344 | milklotion | skin care | 320 1666 | Frisbee | toys | 244 1210 | necklace | jewels | 200 1502 | earphones | electronics | 150 (5 rows)
  • 聚合查询 可以通过使用GROUP BY语句配合聚合函数,构建一个聚合查询来关注数据的整体情况。 1 2 3 4 5 6 7 8 9 SELECT category, string_agg(quantity,',') FROM newproducts group by category; category | string_agg -------------+------------ toys | 80,244 books | 100 sports | 550 jewels | 200 skin care | 320 electronics | 150
  • 示例 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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 --创建存储过程proc_staffs CREATE OR REPLACE PROCEDURE proc_staffs ( section NUMBER(6), salary_sum out NUMBER(8,2), staffs_count out INTEGER ) IS BEGIN SELECT sum(salary), count(*) INTO salary_sum, staffs_count FROM staffs where section_id = section; END; / --创建存储过程proc_return. CREATE OR REPLACE PROCEDURE proc_return AS v_num NUMBER(8,2); v_sum INTEGER; BEGIN proc_staffs(30, v_sum, v_num); --调用语句 dbms_output.put_line(v_sum||'#'||v_num); RETURN; --返回语句 END; / --调用存储过程proc_return. CALL proc_return(); --清除存储过程 DROP PROCEDURE proc_staffs; DROP PROCEDURE proc_return; --创建函数func_return. CREATE OR REPLACE FUNCTION func_return returns void language plpgsql AS $$ DECLARE v_num INTEGER := 1; BEGIN dbms_output.put_line(v_num); RETURN; --返回语句 END $$; -- 调用函数func_return CALL func_return(); 1 -- 清除函数 DROP FUNCTION func_return;
  • PG_TS_PARSER PG_TS_PARSER系统表包含定义文本解析器的项。解析器负责分割输入文本为词位,并且为每个词位分配标记类型。因为解析器必须通过C语言级别的函数实现,所以新解析器必须由数据库系统管理员创建。 表1 PG_TS_PARSER字段 名字 类型 引用 描述 oid oid - 行标识符(隐藏属性,必须明确选择才会显示)。 prsname name - 文本搜索解析器名称。 prsnamespace oid PG_NAMESPACE.oid 解析器所在的命名空间的OID。 prsstart regproc PG_PROC.oid 解析器的启动函数的OID。 prstoken regproc PG_PROC.oid 解析器的下一个标记函数的OID。 prsend regproc PG_PROC.oid 解析器的关闭函数的OID。 prsheadline regproc PG_PROC.oid 解析器的标题函数的OID。 prslextype regproc PG_PROC.oid 解析器的lextype函数的OID。 父主题: 系统表
  • PG_QUERYBAND_ACTION PG_QUERYBAND_ACTION视图显示query_band关联行为和次序。 表1 PG_QUERYBAND_ACTION字段 名称 类型 描述 qband text query_band键值对。 respool_id oid query_band关联资源池OID。 respool text query_band关联资源池名。 priority text query_band关联队列内优先级。 qborder integer query_band搜索次序。 父主题: 系统视图
  • 在“集群详情”页面获取集群连接地址 登录GaussDB(DWS) 管理控制台。 在左侧导航栏中,单击“集群管理”。 在集群列表中,单击指定集群的名称,打开“集群详情”页面。 在“连接信息”区域,用户可以查看并获取集群的连接地址信息,包括内网地址、公网地址等。 图2 连接地址 表1 连接信息 参数名 参数解释 内网域名 通过内部网络访问集群数据库的域名地址,对应所有的内网IP地址,即所有CN的地址。内网访问域名在创建集群时自动生成。默认命名规则为:集群名称.dws.myhuaweicloud.com。 说明: 如果集群名称不符合域名规范,默认的访问域名前缀会相应做一些调整。 单击“修改”可以修改内网访问域名。访问域名由字母、数字、中划线组成,以大小写字母开头,长度为4~63个字符。 更多信息请参见管理集群访问域名。 内网IP 通过内部网络访问集群数据库的IP地址。 说明: 内网访问IP地址在创建集群时自动生成,生成后的IP地址是固定的。 内网访问IP的数量对应的是CN节点的个数,可以通过登录任一节点连接到集群。 通过内网访问某个固定的IP,资源池会集中在一个CN上。 公网域名 通过外部网络访问集群数据库的域名地址。 更多信息请参见管理集群访问域名。 公网IP 通过外部网络访问集群数据库的IP地址。 说明: 如果创建集群时没有绑定弹性IP,“公网IP”显示为空,可以单击“编辑”为集群绑定弹性IP。 如果创建集群时绑定了弹性IP,可以单击“编辑”为集群解绑弹性IP。 初始管理员用户 创建集群时指定的数据库管理员用户。当用户第一次连接集群时,需要使用初始数据库管理员用户及其密码连接到默认数据库。 端口 通过公网或者内网访问集群数据库的端口号。端口号在创建集群时指定,它是集群监听客户端连接的端口。 默认数据库 创建集群时默认自动创建的数据库。当用户第一次连接集群时,需要连接到该默认数据库。 弹性负载均衡地址 为实现集群高可用,解决CN单点问题,集群创建后需手动绑定弹性负载均衡(ELB),连接集群时建议连接ELB地址。
  • 身份认证与访问控制 身份认证 OrgID提供的身份认证可以分为控制台和云服务两个层面。 控制台层面:OrgID与IAM打通,企业租户可以使用华为云用户名与密码登录,实现租户的认证与鉴权,未授权的不能访问。 数据业务面:租户管理员添加成员后,成员可以直接登录OrgID数据业务面,使用Huawei ID帐号认证,业务鉴权由OrgID提供。 访问控制 Token认证:通过Token认证通用请求。关于Token的详细介绍及获取方式,请参见获取IAM用户Token(使用密码)。 AK(Access Key ID)/SK(Secret Access Key)认证:通过AK/SK加密调用请求。推荐使用AK/SK认证,其安全性比Token认证要高。关于访问密钥的详细介绍及获取方式,请参见访问密钥(AK/SK)。 父主题: 安全
  • 成本分配 成本管理的基础是树立成本责任制,让各部门、各业务团队、各责任人参与进来,为各自消耗云服务产生的成本负责。企业可以通过成本分配的方式,将云上成本分组,归集到特定的团队或项目业务中,让各责任组织及时了解各自的成本情况。 华为云成本中心支持通过多种不同的方式对成本进行归集和重新分配,您可以根据需要选择合适的分配工具。 通过关联账号进行成本分配 企业主客户可以使用关联账号对子客户的成本进行归集,从而对子账号进行财务管理。详细介绍请参见通过关联账号维度查看成本分配。 通过企业项目进行成本分配 在进行成本分配之前,建议开通企业项目并做好企业项目的规划,可以根据企业的组织架构或者业务项目来划分。在购买按需计费实例时选择指定企业项目,新购云资源将按此企业项目进行成本分配。详细介绍请参见通过企业项目维度查看成本分配。 通过成本标签进行成本分配 标签是华为云为了标识云资源,按各种维度(例如用途、所有者或环境)对云资源进行分类的标记。推荐企业使用预定义标签进行成本归集,具体流程如下: 详细介绍请参见通过成本标签维度查看成本分配。 使用成本单元进行成本分配 企业可以使用成本中心的“成本单元”来拆分公共成本。公共成本是指多个部门共享的计算、网络、存储或资源包产生的云成本,或无法直接通过企业项目、成本标签分配的云成本。这些成本不能直接归属于单一所有者,因此不能直接归属到某一类别。使用拆分规则,可以在各团队或业务部门之间公平地分配这些成本。详细介绍请参见使用成本单元查看成本分配。
  • 成本优化 成本控制 企业可以在成本中心的“预算管理”页面创建精细粒度的预算来管理成本和使用量,在实际或预测超过预算阈值时,自动发送通知给指定消息接收人。企业还可以创建预算报告,定期将指定预算进展通知给指定消息接收人。 详细介绍请参见使用预测和预算来跟踪成本和使用量。 资源优化 您可以通过AOM的监控功能监控资源的使用情况,评估当前配置是否过高。例如:CPU、内存、带宽等资源的利用率。寻找节约成本的机会。也可以根据成本分析阶段的分析结果识别成本偏高的资源,然后采取针对性的优化措施。
  • 删除转储任务 参见初始化DIS客户端的操作初始化一个DIS客户端实例。 配置参数如下: 1 2 streamname = "" #已存在的通道名称 task_name="xx" task_name配置为特定的转储任务名称,则删除通道下的该转储任务。 配置好以上参数后,执行delete_dump_task_sample.py文件默认调用delete_dump_task_test方法,获取响应204删除成功。 父主题: 使用SDK(Python)
  • 新增Checkpoint 参见初始化DIS客户端的操作初始化一个DIS客户端实例。 配置参数如下: 1 2 3 4 5 streamname = "" #通道名称 appName="xx" # APP名称(APP是已存在状态) partitionId="shardId-0000000000" #分区的唯一标识符。 seqNumber="0" #序列号 metadata="" #用户消费程序端的元数据信息,元数据信息的最大长度为1000个字符 partitionId可通过查询通道详情获取,需要先传入当前设置的通道名称。 配置好以上参数,执行commitCheckpoint_sample.py文件调用commitCheckpoint_test方法,响应201表示成功。 父主题: 使用SDK(Python)
  • 删除通道 参考初始化DIS客户端的操作初始化一个DIS客户端实例,实例名称为dic。 使用DIS SDK删除指定的DIS通道。 1 2 3 4 //待删除的通道名称 String streamName = "myStream"; DeleteStreamRequest deleteStreamRequest = new DeleteStreamRequest(); deleteStreamRequest.setStreamName(streamName); 配置“DeleteStreamRequest”对象之后,通过对客户端调用deleteStream的方法删除通道。 1 dic.deleteStream(deleteStreamRequest); 父主题: 使用SDK(Java)
  • 获取数据游标 参见初始化DIS客户端的操作初始化一个DIS客户端实例。 配置参数如下: partitionId="shardId-0000000000" streamname=”dis-test1“ #已存在的通道名 5种游标设置使用参考如下: # startSeq与AT_SEQUENCE_NUMBER/AFTER_SEQUENCE_NUMBER搭配使用 r = cli.getCursor(streamname, partitionId, cursorType='AT_SEQUENCE_NUMBER', startSeq="0") # r = cli.getCursor(streamname, partitionId, cursorType='AFTER_SEQUENCE_NUMBER', startSeq="0") # timestamp与AT_TIMESTAMP搭配使用 # r = cli.getCursor(streamname, partitionId, cursorType='AT_TIMESTAMP',timestamp=1554694135190) # r = cli.getCursor(streamname, partitionId, cursorType='TRIM_HORIZON') # r = cli.getCursor(streamname, partitionId, cursorType='LATEST') 配置好以上参数,执行getCursor_sample.py文件调用getCursor_test方法,响应结果示例如下: 1 2 200 {"partition_cursor": "eyJnZXRJdGVyYXRvclBhcmFtIjp7InN0cmVhbS1uYW1lIjoiSCIsInBhcnRpdGlvbi1pZCI6InNoYXJkSWQtMDAwMDAwMDAwMCIsImN1cnNvci10eXBlIjoiQVRfU0VRVUVOQ0VfTlVNQkVSIiwic3RhcnRpbmctc2VxdWVuY2UtbnVtYmVyIjoiMCJ9LCJnZW5lcmF0ZVRpbWVzdGFtcCI6MTUzMjQyNDg4NzE1NH0"} 父主题: 使用SDK(Python)
共100000条