华为云用户手册

  • 初始用户 集群安装过程中自动生成的帐户称为初始用户。初始用户也是系统管理员、监控管理员、运维管理员和安全策略管理员,拥有系统的最高权限,能够执行所有的操作。如果安装时不设置初始用户名称则该帐户与进行集群安装的操作系统用户同名。如果在安装集群时不设置初始用户的密码,安装完成后密码为空,在执行其他操作前需要通过gsql客户端设置初始用户的密码。如果初始用户密码为空,则除修改密码外无法执行其他SQL操作以及升级、扩容、节点替换等操作。 初始用户会绕过所有权限检查。建议仅将此初始用户作为DBA管理用途,而非业务应用。
  • 背景信息 ANALYZE语句可收集与数据库中表内容相关的统计信息,统计结果存储在系统表PG_STATISTIC中。查询优化器会使用这些统计数据,以生成最有效的执行计划。 建议在执行了大批量插入/删除操作后,例行对表或全库执行ANALYZE语句更新统计信息。目前默认收集统计信息的采样比例是30000行(即:guc参数default_statistics_target默认设置为100),如果表的总行数超过一定行数(大于1600000),建议设置guc参数default_statistics_target为-2,即按2%收集样本估算统计信息。 对于在批处理脚本或者存储过程中生成的中间表,也需要在完成数据生成之后显式的调用ANALYZE。 对于表中多个列有相关性且查询中有同时基于这些列的条件或分组操作的情况,可尝试收集多列统计信息,以便查询优化器可以更准确地估算行数,并生成更有效的执行计划。
  • 参数说明 IF EXISTS IF EXISTS表示,如果函数存在则执行删除操作,函数不存在也不会报错,只是发出一个notice。 function_name 要删除的函数名称。 取值范围:已存在的函数名。 argmode 函数参数的模式。 argname 函数参数的名称。 argtype 函数参数的类型 CASCADE | RESTRICT CASCADE:级联删除依赖于函数的对象(比如操作符) 。 RESTRICT:如果有任何依赖对象存在,则拒绝删除该函数(缺省行为)。
  • 功能函数 hll_print(hll) 描述:打印hll的一些debug参数信息。 示例: 1 2 3 4 5 postgres=# select hll_print(hll_empty()); hll_print ----------------------------------------------------------- EMPTY, nregs=2048, nbits=5, expthresh=-1(160), sparseon=1gongne (1 row)
  • 聚合函数 hll_add_agg(hll_hashval) 描述:把哈希后的数据按照分组放到hll中。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 --准备数据 postgres=# create table t_id(id int); postgres=# insert into t_id values(generate_series(1,500)); postgres=# create table t_data(a int, c text); postgres=# insert into t_data select mod(id,2), id from t_id; --创建表并指定列为hll postgres=# create table t_a_c_hll(a int, c hll); --根据a列group by对数据分组,把各组数据加到hll中 postgres=# insert into t_a_c_hll select a, hll_add_agg(hll_hash_text(c)) from t_data group by a; --得到每组数据中hll的Distinct值 postgres=# select a, #c as cardinality from t_a_c_hll order by a; a | cardinality ---+------------------ 0 | 250.741759091658 1 | 250.741759091658 (2 rows)
  • 操作符 = 描述:比较hll或hll_hashval的值是否相等。 返回值类型:bool 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 --hll postgres=# select (hll_empty() || hll_hash_integer(1)) = (hll_empty() || hll_hash_integer(1)); column ---------- t (1 row) --hll_hashval postgres=# select hll_hash_integer(1) = hll_hash_integer(1); ?column? ---------- t (1 row)
  • PKG_SERVICE PKG_SERVICE支持的所有接口请参见表1。 表1 PKG_SERVICE 接口名称 描述 PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE 确认该CONTEXT是否已注册。 PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS 取消所有注册的CONTEXT。 PKG_SERVICE.SQL_REGISTER_CONTEXT 注册一个CONTEXT。 PKG_SERVICE.SQL_UNREGISTER_CONTEXT 取消注册该CONTEXT。 PKG_SERVICE.SQL_SET_SQL 向CONTEXT设置一条SQL语句,目前只支持SELECT。 PKG_SERVICE.SQL_RUN 在一个CONTEXT上执行设置的SQL语句。 PKG_SERVICE.SQL_NEXT_ROW 读取该CONTEXT中的下一行数据。 PKG_SERVICE.SQL_GET_VALUE 读取该CONTEXT中动态定义的列值 PKG_SERVICE.SQL_SET_RESULT_TYPE 根据类型OID动态定义该CONTEXT的一个列。 PKG_SERVICE.JOB_CANCEL 通过任务ID来删除定时任务。 PKG_SERVICE.JOB_FINISH 禁用或者启用定时任务。 PKG_SERVICE.JOB_SUBMIT 提交一个定时任务。作业号由系统自动生成或由用户指定。 PKG_SERVICE.JOB_UPDATE 修改定时任务的属性,包括任务内容、下次执行时间、执行间隔。 PKG_SERVICE.SUBMIT_ON_NODES 提交一个任务到所有节点,作业号由系统自动生成。 PKG_SERVICE.ISUBMIT_ON_NODES 提交一个任务到所有节点,作业号由用户指定 PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE 该函数用来确认一个CONTEXT是否已注册。该函数传入想查找的CONTEXT ID,如果该CONTEXT存在返回TRUE,反之返回FALSE。 PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE函数原型为: 1 2 3 4 PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE( context_id IN INTEGER ) RETURN BOOLEAN; 表2 PKG_SERVICE.SQL_IS_CONTEXT_ACTIVE接口说明 参数名称 描述 context_id 想查找的CONTEXT ID号 PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS 该函数用来取消所有CONTEXT PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS函数原型为: 1 2 3 PKG_SERVICE.SQL_CLEAN_ALL_CONTEXTS( ) RETURN VOID; PKG_SERVICE.SQL_REGISTER_CONTEXT 该函数用来打开一个CONTEXT,是后续对该CONTEXT进行各项操作的前提。该函数不传入任何参数,内部自动递增生成CONTEXT ID,并作为返回值返回给integer定义的变量。 PKG_SERVICE.SQL_REGISTER_CONTEXT函数原型为: 1 2 3 DBE_SQL.REGISTER_CONTEXT( ) RETURN INTEGER; PKG_SERVICE.SQL_UNREGISTER_CONTEXT 该函数用来关闭一个CONTEXT,是该CONTEXT中各项操作的结束。如果在存储过程结束时没有调用该函数,则该CONTEXT占用的内存仍然会保存,因此关闭CONTEXT非常重要。由于异常情况的发生会中途退出存储过程,导致CONTEXT未能关闭,因此建议存储过程中有异常处理,将该接口包含在内。 PKG_SERVICE.SQL_UNREGISTER_CONTEXT函数原型为: 1 2 3 4 PKG_SERVICE.SQL_UNREGISTER_CONTEXT( context_id IN INTEGER ) RETURN INTEGER; 表3 PKG_SERVICE.SQL_UNREGISTER_CONTEXT接口说明 参数名称 描述 context_id 打算关闭的CONTEXT ID号 PKG_SERVICE.SQL_SET_SQL 该函数用来解析给定游标的查询语句,被传入的查询语句会立即执行。目前仅支持SELECT查询语句的解析,且语句参数仅可通过text类型传递,长度不大于1G。 PKG_SERVICE.SQL_SET_SQL函数的原型为: 1 2 3 4 5 6 PKG_SERVICE.SQL_SET_SQL( context_id IN INTEGER, query_string IN TEXT, language_flag IN INTEGER ) RETURN BOOLEAN; 表4 PKG_SERVICE.SQL_SET_SQL接口说明 参数名称 描述 context_id 执行查询语句解析的CONTEXT ID query_string 执行的查询语句 language_flag 版本语言号,目前只支持1 PKG_SERVICE.SQL_RUN 该函数用来执行一个给定的CONTEXT。该函数接收一个CONTEXT ID,运行后获得的数据用于后续操作。目前仅支持SELECT查询语句的执行。 PKG_SERVICE.SQL_RUN函数的原型为: 1 2 3 4 PKG_SERVICE.SQL_RUN( context_id IN INTEGER, ) RETURN INTEGER; 表5 PKG_SERVICE.SQL_RUN接口说明 参数名称 描述 context_id 执行查询语句解析的CONTEXT ID PKG_SERVICE.SQL_NEXT_ROW 该函数返回符合查询条件的数据行数,每一次运行该接口都会获取到新的行数的集合,直到数据读取完毕获取不到新行为止。 PKG_SERVICE.SQL_NEXT_ROW函数的原型为: 1 2 3 4 PKG_SERVICE.SQL_NEXT_ROW( context_id IN INTEGER, ) RETURN INTEGER; 表6 PKG_SERVICE.SQL_NEXT_ROW接口说明 参数名称 描述 context_id 执行的CONTEXT ID PKG_SERVICE.SQL_GET_VALUE 该函数用来返回给定CONTEXT中给定位置的CONTEXT元素值,该接口访问的是PKG_SERVICE.SQL_NEXT_ROW获取的数据。 PKG_SERVICE.SQL_GET_VALUE函数的原型为: 1 2 3 4 5 6 PKG_SERVICE.SQL_GET_VALUE( context_id IN INTEGER, pos IN INTEGER, col_type IN ANYELEMENT ) RETURN ANYELEMENT; 表7 PKG_SERVICE.SQL_GET_VALUE接口说明 参数名称 描述 context_id 执行的CONTEXT ID pos 动态定义列在查询中的位置 col_type 任意类型变量,定义列的返回值类型 PKG_SERVICE.SQL_SET_RESULT_TYPE 该函数用来定义从给定CONTEXT返回的列,该接口只能应用于SELECT定义的CONTEXT中。定义的列通过查询列表的相对位置来标识,PKG_SERVICE.SQL_SET_RESULT_TYPE函数的原型为: 1 2 3 4 5 6 7 PKG_SERVICE.SQL_SET_RESULT_TYPE( context_id IN INTEGER, pos IN INTEGER, coltype_oid IN ANYELEMENT, maxsize IN INTEGER ) RETURN INTEGER; 表8 PKG_SERVICE.SQL_SET_RESULT_TYPE接口说明 参数名称 描述 context_id 执行的CONTEXT ID。 pos 动态定义列在查询中的位置。 coltype_oid 任意类型的变量,可根据变量类型得到对应类型OID。 maxsize 定义的列的长度。 PKG_SERVICE.JOB_CANCEL 存储过程CANCEL删除指定的定时任务。 PKG_SERVICE.JOB_CANCEL函数原型为: 1 2 PKG_SERVICE.JOB_CANCEL( job IN INTEGER); 表9 PKG_SERVICE.JOB_CANCEL接口参数说明 参数 类型 入参/出参 是否可以为空 描述 id integer IN 否 指定的作业号。 示例: CALL PKG_SERVICE.JOB_CANCEL(101); PKG_SERVICE.JOB_FINISH 存储过程FINISH禁用或者启用定时任务。 PKG_SERVICE.JOB_FINISH函数原型为: 1 2 3 4 PKG_SERVICE.JOB_FINISH( id IN INTEGER, broken IN BOOLEAN, next_time IN TIMESTAMP DEFAULT sysdate); 表10 PKG_SERVICE.JOB_FINISH接口参数说明 参数 类型 入参/出参 是否可以为空 描述 id integer IN 否 指定的作业号。 broken Boolean IN 否 状态标志位,true代表禁用,false代表启用。根据true或false值更新当前job;如果为空值,则不改变原有job的状态。 next_time timestamp IN 是 下次运行时间,默认为当前系统时间。如果参数broken状态为true,则更新该参数为'4000-1-1';如果参数broken状态为false,且如果参数next_time不为空值,则更新指定job的next_time值,如果next_time为空值,则不更新next_time值。该参数可以省略,为默认值。 PKG_SERVICE.JOB_SUBMIT 存储过程JOB_SUBMIT提交一个系统提供的定时任务。 PKG_SERVICE.JOB_SUBMIT函数原型为: 1 2 3 4 5 6 PKG_SERVICE.JOB_SUBMIT( id IN BIGINT DEFAULT, content IN TEXT, next_date IN TIMESTAMP DEFAULT sysdate, interval_time IN TEXT DEFAULT 'null', job OUT INTEGER); 当创建一个定时任务(JOB)时,系统默认将当前数据库和用户名与当前创建的定时任务绑定起来。该接口函数可以通过call或select调用,如果通过select调用,可以不填写出参。如果在存储过程中,则需要通过perform调用该接口函数。如果提交的sql语句任务使用到非public的schema,应该指定表或者函数的schema,或者在sql语句前添加set current_schema = xxx;语句。 表11 PKG_SERVICE.JOB_SUBMIT接口参数说明 参数 类型 入参/出参 是否可以为空 描述 id bigint IN 否 作业号。如果传入id为NULL,则内部会生成作业ID。 context text IN 否 要执行的SQL语句。支持一个或多个‘DML’,‘匿名块’,‘调用存储过程的语句’或3种混合的场景。 next_time timestamp IN 否 下次作业运行时间。默认值为当前系统时间(sysdate)。如果是过去时间,在提交作业时表示立即执行。 interval_time text IN 是 用来计算下次作业运行时间的时间表达式,可以是interval表达式,也可以是sysdate加上一个numeric值(例如:sysdate+1.0/24)。如果为空值或字符串"null"表示只执行一次,执行后JOB状态STATUS变成'd' 不再执行。 job integer OUT 否 作业号。范围为1~32767。当使用select调用pkg_service.job_submit时,该参数可以省略。 示例: 1 2 3 4 5 6 7 SELECT PKG_SERVICE.JOB_SUBMIT(NULL, 'call pro_xxx();', to_date('20180101','yyyymmdd'),'sysdate+1'); SELECT PKG_SERVICE.JOB_SUBMIT(NULL, 'call pro_xxx();', to_date('20180101','yyyymmdd'),'sysdate+1.0/24'); CALL PKG_SERVICE.JOB_SUBMIT(NULL, '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); SELECT PKG_SERVICE.JOB_SUBMIT (101, 'insert_msg_statistic1;', sysdate, 'sysdate+3.0/24'); PKG_SERVICE.JOB_UPDATE 存储过程UPDATE修改定时任务的属性,包括任务内容、下次执行时间、执行间隔。 PKG_SERVICE.JOB_UPDATE函数原型为: 1 2 3 4 5 PKG_SERVICE.JOB_UPDATE( id IN BIGINT, next_time IN TIMESTAMP, interval_time IN TEXT, content IN TEXT); 表12 PKG_SERVICE.JOB_UPDATE接口参数说明 参数 类型 入参/出参 是否可以为空 描述 id integer IN 否 指定的作业号。 next_time timestamp IN 是 下次运行时间。如果该参数为空值,则不更新指定job的next_time值,否则更新指定job的next_time值。 interval_time text IN 是 用来计算下次作业运行时间的时间表达式。如果该参数为空值,则不更新指定job的interval_time值;如果该参数不为空值,会校验interval_time是否为有效的时间类型或interval类型,则更新指定job的interval_time值。如果为字符串"null"表示只执行一次,执行后JOB状态STATUS变成'd' 不再执行。 content text IN 是 执行的存储过程名或者sql语句块。如果该参数为空值,则不更新指定job的content值,否则更新指定job的content值。 示例: 1 2 CALL PKG_SERVICE.JOB_UPDATE(101, 'call userproc();', sysdate, 'sysdate + 1.0/1440'); CALL PKG_SERVICE.JOB_UPDATE(101, 'insert into tbl_a values(sysdate);', sysdate, 'sysdate + 1.0/1440'); PKG_SERVICE.SUBMIT_ON_NODES 存储过程SUBMIT_ON_NODES创建一个所有CN/DN上的定时任务,仅sysadmin/monitor admin有此权限。 PKG_SERVICE.SUBMIT_ON_NODES函数原型为: 1 2 3 4 5 6 7 PKG_SERVICE.SUBMIT_ON_NODES( node_name IN TEXT, database IN TEXT what IN TEXT, next_date IN TIMESTAMP DEFAULT sysdate, job_interval IN TEXT DEFAULT 'null', job OUT INTEGER); 表13 PKG_SERVICE.SUBMIT_ON_NODES接口参数说明 参数 类型 入参/出参 是否可以为空 描述 node_name text IN 否 指定作业的执行节点,当前仅支持值为'ALL_NODE'(在所有节点执行)与'CCN'(在central coordinator执行)。 database text IN 否 集群作业所使用的database,节点类型为'ALL_NODE'时仅支持值为'postgres'。 what text IN 否 要执行的SQL语句。支持一个或多个‘DML’,‘匿名块’,‘调用存储过程的语句’或3种混合的场景。 nextdate timestamp IN 否 下次作业运行时间。默认值为当前系统时间(sysdate)。如果是过去时间,在提交作业时表示立即执行。 job_interval text IN 否 用来计算下次作业运行时间的时间表达式,可以是interval表达式,也可以是sysdate加上一个numeric值(例如:sysdate+1.0/24)。如果为空值或字符串"null"表示只执行一次,执行后JOB状态STATUS变成'd'不再执行。 job integer OUT 否 作业号。范围为1~32767。当使用select调用dbms.submit_on_nodes时,该参数可以省略。 示例: 1 2 select pkg_service.submit_on_nodes('ALL_NODE', 'postgres', 'select capture_view_to_json(''dbe_perf.statement'', 0);', sysdate, 'interval ''60 second'''); select pkg_service.submit_on_nodes('CCN', 'postgres', 'select capture_view_to_json(''dbe_perf.statement'', 0);', sysdate, 'interval ''60 second'''); PKG_SERVICE.ISUBMIT_ON_NODES ISUBMIT_ON_NODES与SUBMIT_ON_NODES语法功能相同,但其第一个参数是入参,即指定的作业号,SUBMIT最后一个参数是出参,表示系统自动生成的作业号。仅sysadmin/monitor admin有此权限。 PKG_SERVICE.CANCEL 描述:通过任务ID来删除定时任务。 参数:id bigint 返回值类型:void 父主题: 基础接口
  • 参数 表1 SQLConnect参数 关键字 参数说明 ConnectionHandle 连接句柄,通过SQLAllocHandle获得。 ServerName 要连接数据源的名称。 NameLength1 ServerName的长度。 UserName 数据源中数据库用户名。 NameLength2 UserName的长度。 Authentication 数据源中数据库用户密码。 NameLength3 Authentication的长度。
  • 原型 1 2 3 4 5 6 7 SQLRETURN SQLConnect(SQLHDBC ConnectionHandle, SQLCHAR *ServerName, SQLSMALLINT NameLength1, SQLCHAR *UserName, SQLSMALLINT NameLength2, SQLCHAR *Authentication, SQLSMALLINT NameLength3);
  • 统计信息函数 统计信息函数根据访问对象分为两种类型:针对某个数据库进行访问的函数,以数据库中每个表或索引的OID作为参数,标识需要报告的数据库;针对某个服务器进行访问的函数,以一个服务器进程号为参数,其范围从1到当前活跃服务器的数目。 pg_stat_get_db_conflict_tablespace(oid) 描述:由于恢复与数据库中删除的表空间发生冲突而取消的查询数。 返回值类型:bigint pg_control_group_config() 描述:在当前节点上打印cgroup配置。该函数需要sysadmin权限的用户才能够执行。 返回值类型:record pg_stat_get_db_stat_reset_time(oid) 描述:上次重置数据库统计信息的时间。首次连接到每个数据库期间初始化为系统时间。当您在数据库上调用pg_stat_reset以及针对其中的任何表或索引执行pg_stat_reset_single_table_counters时,重置时间都会更新。 返回值类型:timestamptz pg_stat_get_function_total_time(oid) 描述:该函数花费的总挂钟时间,以微秒为单位。包括花费在此函数调用上的时间。 返回值类型:bigint pg_stat_get_xact_tuples_returned(oid) 描述:当前事务中参数为表时通过顺序扫描读取的行数,或参数为索引时返回的索引条目数。 返回值类型:bigint pg_stat_get_xact_numscans(oid) 描述:当前事务中参数为表时执行的顺序扫描次数,或参数为索引时执行的索引扫描次数。 返回值类型:bigint pg_stat_get_xact_blocks_fetched(oid) 描述:当前事务中对表或索引的磁盘块获取请求数。 返回值类型:bigint pg_stat_get_xact_blocks_hit(oid) 描述:当前事务中对缓存中找到的表或索引的磁盘块获取请求数。 返回值类型:bigint pg_stat_get_xact_function_calls(oid) 描述:在当前事务中调用该函数的次数。 返回值类型:bigint pg_stat_get_xact_function_self_time(oid) 描述:在当前事务中仅花费在此功能上的时间。不包括花费在调用函数上的时间。 返回值类型:bigint pg_stat_get_xact_function_total_time(oid) 描述:当前事务中该函数所花费的总挂钟时间(以微秒为单位)。包括花费在此函数调用上的时间。 返回值类型: pg_lock_status() 描述:查询打开事务所持有的锁信息,所有用户均可执行该函数。 返回值类型:返回字段可参考PG_LOCKS视图返回字段,该视图是通过查询本函数得到的结果。 pg_stat_get_wal_senders() 描述:在主机端查询walsender信息。 返回值类型:setofrecord pg_stat_get_stream_replications() 描述:查询主备复制状态。 返回值类型:setofrecord pg_stat_get_db_numbackends(oid) 描述:处理该数据库活跃的服务器进程数目。 返回值类型:integer pg_stat_get_db_xact_commit(oid) 描述:数据库中已提交事务的数量。 返回值类型:bigint pg_stat_get_db_xact_rollback(oid) 描述:数据库中回滚事务的数量。 返回值类型:bigint pg_stat_get_db_blocks_fetched(oid) 描述:数据库中磁盘块抓取请求的总数。 返回值类型:bigint pg_stat_get_db_blocks_hit(oid) 描述:数据库在缓冲区中找到的磁盘块抓取请求的总数。 返回值类型:bigint pg_stat_get_db_tuples_returned(oid) 描述:为数据库返回的Tuple数。 返回值类型:bigint pg_stat_get_db_tuples_fetched(oid) 描述:为数据库中获取的Tuple数。 返回值类型:bigint pg_stat_get_db_tuples_inserted(oid) 描述:在数据库中插入Tuple数。 返回值类型:bigint pg_stat_get_db_tuples_updated(oid) 描述:在数据库中更新的Tuple数。 返回值类型:bigint pg_stat_get_db_tuples_deleted(oid) 描述:数据库中删除Tuple数。 返回值类型:bigint pg_stat_get_db_conflict_lock(oid) 描述:数据库中锁冲突的数量。 返回值类型:bigint pg_stat_get_db_deadlocks(oid) 描述:数据库中死锁的数量。 返回值类型:bigint pg_stat_get_numscans(oid) 描述:如果参数是一个表,则顺序扫描读取的行数目。如果参数是一个索引,则返回索引行的数目。 返回值类型:bigint pg_stat_get_role_name(oid) 描述:根据用户oid获取用户名。仅sysadmin和monitor admin用户可以访问。 返回值类型:text 示例: postgres=# select pg_stat_get_role_name(10); pg_stat_get_role_name ----------------------- aabbcc (1 row) pg_stat_get_tuples_returned(oid) 描述:如果参数是一个表,则顺序扫描读取的行数目。如果参数是一个索引,则返回的索引行的数目。 返回值类型:bigint pg_stat_get_tuples_fetched(oid) 描述:如果参数是一个表,则位图扫描抓取的行数目。如果参数是一个索引,则用简单索引扫描抓取的行数目。 返回值类型:bigint pg_stat_get_tuples_inserted(oid) 描述:插入表中行的数量。 返回值类型:bigint pg_stat_get_tuples_updated(oid) 描述:在表中已更新行的数量。 返回值类型:bigint pg_stat_get_tuples_deleted(oid) 描述:从表中删除行的数量。 返回值类型:bigint pg_stat_get_tuples_changed(oid) 描述:该表上一次analyze或autoanalyze之后插入、更新、删除行的总数量。 返回值类型:bigint pg_stat_get_tuples_hot_updated(oid) 描述:热更新的行数表。 返回值类型:bigint pg_stat_get_live_tuples(oid) 描述:活行数表。 返回值类型:bigint pg_stat_get_dead_tuples(oid) 描述:死行数表。 返回值类型:bigint pg_stat_get_blocks_fetched(oid) 描述:表或者索引的磁盘块抓取请求的数量。 返回值类型:bigint pg_stat_get_blocks_hit(oid) 描述:在缓冲区中找到的表或者索引的磁盘块请求数目。 返回值类型:bigint pg_stat_get_partition_tuples_inserted(oid) 描述:插入相应表分区中行的数量。 返回值类型:bigint pg_stat_get_partition_tuples_updated(oid) 描述:在相应表分区中已更新行的数量。 返回值类型:bigint pg_stat_get_partition_tuples_deleted(oid) 描述:从相应表分区中删除行的数量。 返回值类型:bigint pg_stat_get_partition_tuples_changed(oid) 描述:该表分区上一次analyze或autoanalyze之后插入、更新、删除行的总数量。 返回值类型:bigint pg_stat_get_partition_live_tuples(oid) 描述:活行数表分区。 返回值类型:bigint pg_stat_get_partition_dead_tuples(oid) 描述:死行数表分区。 返回值类型:bigint pg_stat_get_xact_tuples_fetched(oid) 描述:事务中扫描的tuple行数。 返回值类型:bigint pg_stat_get_xact_tuples_inserted(oid) 描述:表相关的活跃子事务中插入的tuple数。 返回值类型:bigint pg_stat_get_xact_tuples_deleted(oid) 描述:表相关的活跃子事务中删除的tuple数。 返回值类型:bigint pg_stat_get_xact_tuples_hot_updated(oid) 描述:表相关的活跃子事务中热更新的tuple数。 返回值类型:bigint pg_stat_get_xact_tuples_updated(oid) 描述:表相关的活跃子事务中更新的tuple数。 返回值类型:bigint pg_stat_get_xact_partition_tuples_inserted(oid) 描述:表分区相关的活跃子事务中插入的tuple数。 返回值类型:bigint pg_stat_get_xact_partition_tuples_deleted(oid) 描述:表分区相关的活跃子事务中删除的tuple数。 返回值类型:bigint pg_stat_get_xact_partition_tuples_hot_updated(oid) 描述:表分区相关的活跃子事务中热更新的tuple数。 返回值类型:bigint pg_stat_get_xact_partition_tuples_updated(oid) 描述:表分区相关的活跃子事务中更新的tuple数。 返回值类型:bigint pg_stat_get_last_vacuum_time(oid) 描述:用户在该表上最后一次手动启动清理或者autovacuum线程启动清理的时间。 返回值类型:timestamptz pg_stat_get_last_autovacuum_time(oid) 描述:autovacuum守护进程在该表上最后一次启动清理的时间。 返回值类型:timestamptz pg_stat_get_vacuum_count(oid) 描述:用户在该表上启动清理的次数。 返回值类型:bigint pg_stat_get_autovacuum_count(oid) 描述:autovacuum守护进程在该表上启动清理的次数。 返回值类型:bigint pg_stat_get_last_analyze_time(oid) 描述:用户在该表上最后一次手动启动分析或者autovacuum线程启动分析的时间。 返回值类型:timestamptz pg_stat_get_last_autoanalyze_time(oid) 描述:autovacuum守护进程在该表上最后一次启动分析的时间。 返回值类型:timestamptz pg_stat_get_analyze_count(oid) 描述:用户在该表上启动分析的次数。 返回值类型:bigint pg_stat_get_autoanalyze_count(oid) 描述:autovacuum守护进程在该表上启动分析的次数。 返回值类型:bigint pg_total_autovac_tuples(bool,bool) 描述:返回total autovac相关的tuple记录,如nodename,nspname,relname以及各类tuple的IUD信息,入参分别为:是否查询relation信息,是否查询local信息。 返回值类型:setofrecord pg_autovac_status(oid) 描述:返回和autovac状态相关的参数信息,如nodename,nspname,relname,analyze,vacuum设置,analyze/vacuum阈值, analyze/vacuum tuple数等。仅sysadmin可以使用该函数。 返回值类型:setofrecord pg_autovac_timeout(oid) 描述:返回某个表做autovac连续超时的次数,表信息非法或node信息异常返回NULL。 返回值类型:bigint pg_autovac_coordinator(oid) 描述:返回对某个表做autovac的coordinator名称,表信息非法或node信息异常返回NULL。 返回值类型:text pg_stat_get_last_data_changed_time(oid) 描述:insert/update/delete, exchange/truncate/drop partition在该表上最后一次操作的时间,PG_STAT_ALL_TABLES视图last_data_changed列的数据是通过该函数求值,在表数量很大的场景中,通过视图获取表数据最后修改时间的性能较差,建议直接使用该函数获取表数据的最后修改时间。 返回值类型:timestamptz pg_stat_set_last_data_changed_time(oid) 描述:手动设置该表上最后一次insert/update/delete, exchange/truncate/drop partition操作的时间。 返回值类型:void pg_backend_pid() 描述:当前会话的服务器线程的线程ID。 返回值类型:integer pg_stat_get_activity(integer) 描述:返回一个关于带有特殊PID的后台进程的记录信息,当参数为NULL时,则返回每个活动的后台进程的记录。返回结果是PG_STAT_ACTIVITY视图中的一个子集,不包含connection_info列。系统管理员和monadmin可以查看所有的数据,普通用户只能查询自己的结果。 示例: postgres=# select * from pg_stat_get_activity(139754904483584); datid | pid | sessionid | usesysid | application_name | state | query | waiting | xact_start | query_start | backend_start | state_cha nge | client_addr | client_hostname | client_port | enqueue | query_id | srespool | global_sessionid -------+-----------------+-----------------+----------+------------------+-------+----------------------------------------------+---------+------------+-------------------------------+-------------------------------+------------------ -------------+-------------+-----------------+-------------+---------+----------+----------+------------------ 16099 | 139754904483584 | 139754904483584 | 10 | coordinator2 | idle | SET SESSION AUTHORIZATION DEFAULT;RESET ALL; | f | | 2021-06-09 16:09:53.022787+08 | 2021-06-09 16:03:52.040929+08 | 2021-06-09 16:09: 53.023206+08 | ::1 | | 35210 | | 0 | unknown | 0#0#0 (1 row) 返回值类型:setofrecord pg_stat_get_activity_with_conninfo(integer) 描述:返回一个关于带有特殊PID的后台进程的记录信息,当参数为NULL时,则返回每个活动的后台进程的记录。返回结果是PG_STAT_ACTIVITY视图中的一个子集。系统管理员和monadmin可以查看所有的数据,普通用户只能查询自己的结果。 postgres=# select * from pg_stat_get_activity_with_conninfo(139754904483584); datid | pid | sessionid | usesysid | application_name | state | query | waiting | xact_start | query_start | backend_start | state_cha nge | client_addr | client_hostname | client_port | enqueue | query_id | connection_info | srespool | global_sessionid -------+-----------------+-----------------+----------+------------------+-------+----------------------------------------------+---------+------------+-------------------------------+-------------------------------+------------------ -------------+-------------+-----------------+-------------+---------+----------+-----------------+----------+------------------ 16099 | 139754904483584 | 139754904483584 | 10 | coordinator2 | idle | SET SESSION AUTHORIZATION DEFAULT;RESET ALL; | f | | 2021-06-09 16:04:52.249339+08 | 2021-06-09 16:03:52.040929+08 | 2021-06-09 16:04: 52.249734+08 | ::1 | | 35210 | | 0 | | unknown | 0:0#0 (1 row) 返回值类型:setofrecord pg_stat_get_activity_ng(integer) 描述:返回一个关于带有特殊PID的活跃后台线程记录信息,当参数为NULL时,则返回每个活跃的后台线程的记录。系统管理员和monadmin可以查看所有的数据,普通用户只能查询自己的结果。 返回值类型:setofrecord 函数返回字段说明如下: 名称 类型 描述 datid oid 数据库oid。 pid biginit 后端线程的ID。 sessionid biginit 会话的id。 node_group text 数据所属用户对应的逻辑集群。 pg_user_iostat(text) 描述:显示和当前用户执行作业正在运行时的IO负载管理相关信息。 返回值类型:record 函数返回字段说明如下: 名称 类型 描述 userid oid 用户id。 min_curr_iops int4 当前该用户io在各DN中的最小值。对于行存,以万次/s为单位;对于列存,以次/s为单位。 max_curr_iops int4 当前该用户io在各DN中的最大值。对于行存,以万次/s为单位;对于列存,以次/s为单位。 min_peak_iops int4 该用户io峰值中,各DN的最小值。对于行存,以万次/s为单位;对于列存,以次/s为单位。 max_peak_iops int4 该用户io峰值中,各DN的最大值。对于行存,以万次/s为单位;对于列存,以次/s为单位。 io_limits int4 用户指定的资源池所设置的io_limits。对于行存,以万次/s为单位;对于列存,以次/s为单位。 io_priority text 该用户所设io_priority。对于行存,以万次/s为单位;对于列存,以次/s为单位。 curr_io_limits int4 使用io_priority管控io时的实时io_limits值。 pg_stat_get_function_calls(oid) 描述:函数已被调用次数。 返回值类型:bigint pg_stat_get_function_time(oid) 描述:该函数花费的总挂钟时间,单位为微秒。包括在这个函数调用所花费的时间。 返回值类型:bigint pg_stat_get_function_self_time(oid) 描述:只有在此功能所花费的时间。函数嵌套调用其他函数所花费的时间被排除在外。 返回值类型:bigint pg_stat_get_backend_idset() 描述:设置当前活动的服务器进程数(从1到活动服务器进程的数量)。 返回值类型:setofinteger pg_stat_get_backend_pid(integer) 描述:给定的服务器线程的线程ID。 返回值类型:bigint pg_stat_get_backend_dbid(integer) 描述:给定服务器进程的数据库ID。 返回值类型:oid pg_stat_get_backend_userid(integer) 描述:给定服务器进程的用户ID,本函数仅系统管理员可调用。 返回值类型:oid pg_stat_get_backend_activity(integer) 描述:给定服务器进程的当前活动查询,仅在调用者是系统管理员或被查询会话的用户,并且打开track_activities的时候才能获得结果。 返回值类型:text pg_stat_get_backend_waiting(integer) 描述:如果给定服务器进程在等待某个锁,并且调用者是系统管理员或被查询会话的用户,并且打开track_activities的时候才返回真。 返回值类型:Boolean pg_stat_get_backend_activity_start(integer) 描述:给定服务器进程当前正在执行的查询的起始时间,仅在调用者是系统管理员或被查询会话的用户,并且打开track_activities的时候才能获得结果。 返回值类型:timestampwithtimezone pg_stat_get_backend_xact_start(integer) 描述:给定服务器进程当前正在执行的事务的开始时间,但只有当前用户是系统管理员或被查询会话的用户,并且打开track_activities的时候才能获得结果。 返回值类型:timestampwithtimezone pg_stat_get_backend_start(integer) 描述:给定服务器进程启动的时间,如果当前用户不是系统管理员或被查询的后端的用户,则返回NULL。 返回值类型:timestampwithtimezone pg_stat_get_backend_client_addr(integer) 描述:连接到给定客户端后端的IP地址。如果是通过Unix域套接字连接的则返回NULL;如果当前用户不是系统管理员或被查询会话的用户,也返回NULL。 返回值类型:inet pg_stat_get_backend_client_port(integer) 描述:连接到给定客户端后端的TCP端口。如果是通过Unix域套接字连接的则返回-1;如果当前用户不是系统管理员或被查询会话的用户,也返回NULL。 返回值类型:integer pg_stat_get_bgwriter_timed_checkpoints() 描述:后台写进程开启定时检查点的时间(因为checkpoint_timeout时间已经过期了)。 返回值类型:bigint pg_stat_get_bgwriter_requested_checkpoints() 描述:后台写进程开启基于后端请求的检查点的时间,因为已经超过了checkpoint_segments或因为已经执行了CHECKPOINT。 返回值类型:bigint pg_stat_get_bgwriter_buf_written_checkpoints() 描述:在检查点期间后台写进程写入的缓冲区数目。 返回值类型:bigint pg_stat_get_bgwriter_buf_written_clean() 描述:为日常清理脏块,后台写进程写入的缓冲区数目。 返回值类型:bigint pg_stat_get_bgwriter_maxwritten_clean() 描述:后台写进程停止清理扫描的时间,因为已经写入了更多的缓冲区(相比bgwriter_lru_maxpages参数声明的缓冲区数)。 返回值类型:bigint pg_stat_get_buf_written_backend() 描述:后端进程写入的缓冲区数,因为它们需要分配一个新的缓冲区。 返回值类型:bigint pg_stat_get_buf_alloc() 描述:分配的总缓冲区数。 返回值类型:bigint pg_stat_clear_snapshot() 描述:清理当前的统计快照。该函数仅sysadmin和monitoradmin可以执行。 返回值类型:void pg_stat_reset() 描述:为当前数据库重置统计计数器为0(需要系统管理员权限)。 返回值类型:void gs_stat_reset() 描述:将各节点上的为当前数据库重置统计计数器为0(需要系统管理员权限)。 返回值类型:void pg_stat_reset_shared(text) 描述:重置shared cluster每个节点当前数据统计计数器为0(需要系统管理员权限)。 返回值类型:void pg_stat_reset_single_table_counters(oid) 描述:为当前数据库中的一个表或索引重置统计为0(需要系统管理员权限)。 返回值类型:void pg_stat_reset_single_function_counters(oid) 描述:为当前数据库中的一个函数重置统计为0(需要系统管理员权限)。 返回值类型:void pg_stat_session_cu(int, int, int) 描述:获取当前节点所运行session的CU命中统计信息。 返回值类型:record gs_get_stat_session_cu(text, int, int, int) 描述:获取集群所有运行session的CU命中统计信息。 返回值类型:record gs_get_stat_db_cu(text, text, int, int, int) 描述:获取集群一个数据库的CU命中统计信息。 返回值类型:record pg_stat_get_cu_mem_hit(oid) 描述:获取当前节点当前数据库中一个列存表的CU内存命中次数。 返回值类型:bigint pg_stat_get_cu_hdd_sync(oid) 描述:获取当前节点当前数据库中一个列存表从磁盘同步读取CU次数。 返回值类型:bigint pg_stat_get_cu_hdd_asyn(oid) 描述:获取当前节点当前数据库中一个列存表从磁盘异步读取CU次数。 返回值类型:bigint pg_stat_get_db_cu_mem_hit(oid) 描述:获取当前节点一个数据库CU内存命中次数。 返回值类型:bigint pg_stat_get_db_cu_hdd_sync(oid) 描述:获取当前节点一个数据库从磁盘同步读取CU次数。 返回值类型:bigint pgxc_get_wlm_current_instance_info(text, int default null) 描述:在CN节点上查询集群各节点当前的资源使用情况,读取内存中还未存到GS_WLM_INSTANCE_HISTORY系统表的数据。入参分别为节点名称(可以输入ALL、C、D、实例名称)、每个节点返回的大数量。返回值为GS_WLM_INSTANCE_HISTORY。 返回值类型:setofrecord pgxc_get_wlm_history_instance_info(text, TIMESTAMP, TIMESTAMP, int default null) 描述:在CN节点上查询集群各节点历史资源使用情况,读取 GS_WLM_INSTANCE_HISTORY系统表的数据。入参分别为节点名称(可以输入 ALL、C、D、实例名称)、起始区间时间、结束区间时间和每个实例返回的大数 量。返回值为GS_WLM_INSTANCE_HISTORY。 返回值类型:setofrecord pg_stat_get_db_cu_hdd_asyn(oid) 描述:获取当前节点一个数据库从磁盘异步读取CU次数。 返回值类型:bigint pgxc_fenced_udf_process() 描述:查看UDF Master和Work进程数。 返回值类型:record fenced_udf_process() 描述:查看本地UDF Master和Work进程数。 返回值类型:record total_cpu() 描述:获取当前节点使用的cpu时间,单位是jiffies。 返回值类型:bigint total_memory() 描述:获取当前节点使用的虚拟内存大小,单位KB。 返回值类型:bigint pgxc_terminate_all_fenced_udf_process() 描述:Kill所有的UDF Work进程。 返回值类型:bool GS_ALL_NODEGROUP_CONTROL_GROUP_INFO(text) 描述:提供了所有逻辑集群的控制组信息。该函数在调用的时候需要指定要查询逻辑集群的名称。例如要查询'installation'逻辑集群的控制组信息: 1 SELECT * FROM GS_ALL_NODEGROUP_CONTROL_GROUP_INFO('installation') 返回值类型:record 函数返回字段如下: 名称 类型 描述 name text 控制组的名称。 type text 控制组的类型。 gid bigint 控制组ID。 classgid bigint Workload所属Class的控制组ID。 class text Class控制组。 workload text Workload控制组。 shares bigint 控制组分配的CPU资源配额。 limits bigint 控制组分配的CPU资源限额。 wdlevel bigint Workload控制组层级。 cpucores text 控制组使用的CPU核的信息。 gs_get_nodegroup_tablecount(name) 描述:得到一个逻辑集群中所有数据库包含的用户表数目。 返回值类型:integer pgxc_max_datanode_size(name) 描述:得到一个逻辑集群的所有DN节点中数据库文件占用磁盘空间的最大值,单位为字节。 返回值类型:bigint gs_check_logic_cluster_consistency() 描述:检查当前系统中所有逻辑集群是否存在系统信息不一致的情况,如果返回空记录,表示不存在不一致情况;否则,逻辑集群中CN和DN上的NodeGroup信息存在不一致。该函数应该在非扩缩容重分布时调用。 返回值类型:record gs_check_tables_distribution() 描述: 检查当前系统中用户表的分布是否存在不一致,如果返回空记录,表示不存在不一致。该函数应该在非扩缩容重分布时调用。 返回值类型:record pg_stat_bad_block(text, int, int, int, int, int, timestamp with time zone, timestamp with time zone) 描述:获取当前节点自启动后,读取出现Page/CU的损坏信息。 返回值类型:record pgxc_stat_bad_block(text, int, int, int, int, int, timestamp with time zone, timestamp with time zone) 描述:获取集群所有节点自启动后,读取出现Page/CU的损坏信息。 返回值类型:record pg_stat_bad_block_clear() 描述:清理节点记录的读取出现的Page/CU损坏信息(需要系统管理员权限)。 返回值类型:void pgxc_stat_bad_block_clear 描述:清理集群所有节点记录的读取出现的Page/CU损坏信息(需要系统管理员权限)。 返回值类型:void pgxc_log_comm_status(void) 描述:当使用sctp通信模式时,PGXC系统视图将datanode的通信层状态输出到各个日志文件中。 返回值类型:void gs_respool_exception_info(pool text) 描述:查看某个资源池关联的查询规则信息。 返回值类型:record gs_control_group_info(pool text) 描述:查看资源池关联的控制组信息。该函数需要sysadmin权限的用户才能够执行。 返回值类型:record 返回信息如下: 属性 属性值 描述 name class_a:workload_a1 class和workload名称。 class class_a Class控制组名称。 workload workload_a1 Workload控制组名称。 type DEFWD 控制组类型(Top、CLASS、BAKWD、DEFWD、TSWD)。 gid 87 控制组id。 shares 30 占父节点CPU资源的百分比。 limits 0 占父节点CPU核数的百分比。 rate 0 Timeshare中的分配比例。 cpucores 0-3 CPU核心数。 gs_all_control_group_info() 描述:查看数据库内所有的控制组信息。函数返回信息具体的字段16.3.48 GS_ALL_CONTROL_GROUP_INFO字段。 返回值类型:record gs_get_control_group_info() 描述:查看所有的控制组信息。函数返回信息具体的字段16.3.53 GS_GET_CONTROL_GROUP_INFO字段。该函数需要sysadmin权限的用户才能够执行。 返回值类型:record get_instr_workload_info(integer) 描述:获取当前CN节点上事务量信息,事务时间信息。 返回值类型:record 属性 属性值 描述 user_oid 10 用户id。 commit_counter 4 前端事务commit数量。 rollback_counter 1 前端事务rollback数量。 resp_min 949 前端事务最小响应时间(单位:微秒)。 resp_max 201891 前端事务最大响应时间(单位:微秒)。 resp_avg 43564 前端事务平均响应时间(单位:微秒)。 resp_total 217822 前端事务总响应时间(单位:微秒)。 bg_commit_counter 910 后端事务commit数量。 bg_rollback_counter 0 后端事务rollback数量。 bg_resp_min 97 后端事务最小响应时间(单位:微秒)。 bg_resp_max 678080687 后端事务最大响应时间(单位:微秒)。 bg_resp_avg 327847884 后端事务平均响应时间(单位:微秒)。 bg_resp_total 298341575300 后端事务总响应时间(单位:微秒)。 pv_instance_time() 描述:获取当前节点上各个关键阶段的时间消耗。 返回值类型:record Stat_name属性 属性值 描述 DB_TIME 1062385 所有线程端到端的墙上时间(WALL TIME)消耗总和(单位:微秒)。 CPU_TIME 311777 所有线程CPU时间消耗总和(单位:微秒)。 EXECUTION_TIME 380037 消耗在执行器上的时间总和(单位:微秒)。 PARSE_TIME 6033 消耗在SQL解析上的时间总和(单位:微秒)。 PLAN_TIME 173356 消耗在执行计划生成上的时间总和(单位:微秒)。 REWRITE_TIME 2274 消耗在查询重写上的时间总和(单位:微秒)。 PL_EXECUTION_TIME 0 消耗在PL/SQL执行上的时间总和(单位:微秒)。 PL_COMPILATION_TIME 557 消耗在SQL编译上的时间总和(单位:微秒)。 NET_SEND_TIME 1673 消耗在网络发送上的时间总和(单位:微秒)。 DATA_IO_TIME 426622 消耗在数据读写上的时间总和(单位:微秒)。 DBE_PERF.get_global_instance_time() 描述:提供整个集群各个关键阶段的时间消耗,仅在CN上支持查询。 返回值类型:record get_instr_unique_sql() 描述:获取当前结点的执行语句(归一化SQL)信息,查询该函数必须具有sysadmin权限或者monitor admin权限。 返回值类型:record get_instr_wait_event() 描述:获取当前节点event等待的统计信息。 返回值类型:record get_instr_user_login() 描述:获取当前节点的用户登入登出次数信息,查询该函数必须具有sysadmin权限。 返回值类型:record get_instr_rt_percentile(integer) 描述:获取CCN节点SQL 响应时间P80,P95分布信息,集群统一的信息在CCN节点上,其他节点查询为0。 返回值类型:record get_node_stat_reset_time() 描述:获取当前节点的统计信息重置(重启,主备倒换,数据库删除)时间。 返回值类型:record gs_session_memory_detail_tp() 描述:统计线程的内存使用情况,以MemoryContext节点来统计。当开启线程池(enable_thread_pool = on)时,该视图包含所有的线程和会话的内存使用情况。 返回值类型:record create_wlm_operator_info(int flag) 描述:将当前内存中记录的TopSQL算子级别相关统计信息清理,当传入的参数大于0时,会将这部分信息归档到gs_wlm_operator_info和gs_wlm_ec_operator_info中,否则不会归档。该函数只有sysadmin权限的用户可以执行。 返回值类型:int create_wlm_session_info(int flag) 描述:将当前内存中记录的TopSQL查询语句级别相关统计信息清理,当传入的参数大于0时,会将这部分信息归档到gs_wlm_session_query_info_all中,否则不会归档。该函数只有sysadmin权限的用户可以执行。 返回值类型:int pg_stat_get_wlm_session_info(int flag) 描述:获取当前内存中记录的TopSQL查询语句级别相关统计信息,当传入的参数不为0时,会将这部分信息从内存中清理掉。该函数只有system admin和monitor admin用户可以执行。 返回值类型:record gs_wlm_get_resource_pool_info(int) 描述:获取所有用户的资源使用统计信息,入参为int类型,可以为任意int值或NULL。 返回值类型:record gs_wlm_get_all_user_resource_info() 描述:获取所有用户的资源使用统计信息。该函数只有sysadmin权限的用户可以执行。 返回值类型:record gs_wlm_get_user_info(int) 描述:获取所有用户的相关信息,入参为int类型,可以为任意int值或NULL。该函数只有sysadmin权限的用户可以执行。 返回值类型:record gs_wlm_get_workload_records() 描述:获取动态负载管理下的所有作业信息,该函数只在动态负载管理开的情况下有效。 返回值类型:record gs_wlm_persistent_user_resource_info() 描述:将当前所有的用户资源使用统计信息归档到gs_wlm_user_resource_history系统表中。 返回值类型:record gs_wlm_readjust_user_space(oid) 描述:修正所有用户的存储空间使用情况。该函数只有管理员用户可以执行。 返回值类型:record gs_wlm_readjust_user_space_through_username(text name) 描述:修正指定用户的存储空间使用情况。该函数普通用户只能修正自己的使用情况,只有管理员用户可以修正所有用户的使用情况。当name指定位“0000”,表示需要修正所有用户的使用情况。 返回值类型:record gs_wlm_readjust_user_space_with_reset_flag(text name, boolean isfirst) 描述:修正指定用户的存储空间使用情况。入参isfirst为true表示从0开始统计,否则从上一次结果继续统计。该函数普通用户只能修正自己的使用情况,只有管理员用户可以修正所有用户的使用情况。当name指定位“0000”,表示需要修正所有用户的使用情况。 返回值类型:record gs_wlm_session_respool(bigint) 描述:获取当前所有后台线程的session resource pool相关信息。入参为bigint类型,可以为任意bigint值或NULL。 返回值类型:record gs_total_nodegroup_memory_detail 描述:返回当前数据库逻辑集群使用内存的信息,单位为MB。 若GUC参数enable_memory_limit=off,该函数不能使用。 返回值类型:setof record 表1 返回值说明 名称 类型 描述 ngname text 逻辑集群名称。 memorytype text 内存类型,包括以下几种: ng_total_memory:该逻辑集群的总内存大小。 ng_used_memory:该逻辑集群的实际使用内存大小。 ng_estimate_memory:该逻辑集群的估算使用内存大小。 ng_foreignrp_memsize:该逻辑集群的外部资源池的总内存大小。 ng_foreignrp_usedsize:该逻辑集群的外部资源池实际使用内存大小。 ng_foreignrp_peaksize:该逻辑集群的外部资源池使用内存的峰值。 ng_foreignrp_mempct:该逻辑集群的外部资源池占该逻辑集群总内存大小的百分比。 ng_foreignrp_estmsize:该逻辑集群的外部资源池估算使用内存大小。 memorymbytes integer 内存类型分配内存的大小。 gs_io_wait_status() 描述:返回当前节点IO管控的实时统计信息。 返回值类型:setof record 名称 类型 描述 node_name text 节点名称。 device_name text 节点挂载的数据磁盘名称。 read_per_second float 读完成每秒次数。 write_per_second float 写完成每秒次数。 write_ratio float 写磁盘占总的IO使用的比例。 io_util float 每秒IO所占CPU总时间的百分比。 total_io_util integer 过去三次IO所占CPU总时间的等级(取值为0~6)。 tick_count integer 更新磁盘IO信息的周期,固定为1秒,每次读取数据前都会被清零。 io_wait_list_len integer IO请求线程等待队列的大小,若为0,则表示当前没有IO被管控。 gs_stat_get_hotkeys_info() 若GUC参数enable_hotkeys_collection = off, gs_stat_get_hotkeys_info、global_stat_get_hotkeys_info函数和global_stat_hotkeys_info视图无法正常查询。不影响gs_stat_clean_hotkeys和global_stat_clean_hotkeys清理接口的正常使用。 描述:获取当前节点上热点key的统计情况。 返回值类型:record 1 2 3 4 5 6 postgres=# select * from gs_stat_get_hotkeys_info() order by count, hash_value; database_name | schema_name | table_name | key_value | hash_value | count ---------------+-------------+-------------------+-----------+------------+------- regression | public | hotkey_single_col | {22} | 1858004829 | 2 regression | public | hotkey_single_col | {11} | 2011968649 | 2 (2 rows) 表1 返回值说明 名称 类型 描述 database_name text 热点key所在database名称。 schema_name text 热点key所在schema名称。 table_name text 热点key所在table名称。 key_value text 热点key的value。 hash_value bigint 热点key在数据库中的哈希值,如果是List/Range分布表,该字段为0。 count bigint 热点key被访问频次。 gs_stat_clean_hotkeys() 热点key检测是针对大并发大流量场景设计的特性,访问几次的场景,查询清理会存在一定误差。 清理接口的设计上,只会清理LRU队列中的统计数据,而不会清理FIFO中的历史数据。因此如果清理完后,再访问一次FIFO中存在的历史键值,仍会被当做热点key处理。global_stat_clean_hotkeys同理。 描述:清理当前节点上热点key的统计信息。 返回值:boolean 1 2 3 4 5 postgres=# select * from gs_stat_clean_hotkeys(); gs_stat_clean_hotkeys ----------------------- t (1 row) global_stat_get_hotkeys_info() 执行业务过程中,执行select * from global_stat_hotkeys_info minus select * from global_stat_get_hotkeys_info();因为存在时间差,可能出现不为0的情况。 描述:获取整个集群中热点key的统计情况。 返回值类型:record 1 2 3 4 5 6 postgres=# select * from global_stat_get_hotkeys_info() order by count, hash_value; database_name | schema_name | table_name | key_value | hash_value | count ---------------+-------------+-------------------+-----------+------------+------- regression | public | hotkey_single_col | {22} | 1858004829 | 2 regression | public | hotkey_single_col | {11} | 2011968649 | 2 (2 rows) global_stat_clean_hotkeys() 描述:清理整个集群中热点key的统计信息。 返回值:boolean 1 2 3 4 5 postgres=# select * from global_stat_clean_hotkeys(); global_stat_clean_hotkeys ----------------------- t (1 row) global_comm_get_recv_stream() 描述:获取所有DN节点上所有的通信库接收流状态。函数返回信息具体字段参考PG_COMM_RECV_STREAM字段。 返回值类型:record global_comm_get_send_stream() 描述:获取所有DN节点上所有的通信库发送流状态。函数返回信息具体字段参考PG_COMM_SEND_STREAM字段。 返回值类型:record global_comm_get_status() 描述:获取所有DN节点的通信库状态。函数返回信息具体字段参考PG_COMM_STATUS字段。 返回值类型:record global_comm_client_info() 描述:获取全局节点活跃的客户端连接信息。函数返回信息具体字段参考COMM_CLIENT_INFO字段。 返回类型:record global_comm_get_client_info() 描述:获取全局节点客户端连接信息。函数返回信息具体字段参考COMM_CLIENT_INFO字段。 返回类型:record pgxc_get_wlm_ec_operator_history() 描述:显示在所有CN上缓存的执行EC(ExtensionConnector)作业结束时的算子信息。该信息会被定时清理,清理周期为3分钟。该函数只有sysadmin权限的用户可以执行。 返回值类型:record pgxc_get_wlm_ec_operator_info() 描述:显示在所有CN上执行的EC(ExtensionConnector)作业结束时的算子信息。该函数只有sysadmin权限的用户可以执行。 返回值类型:record pgxc_get_wlm_ec_operator_statistics() 描述:显示在所有CN上正在执行的EC(ExtensionConnector)作业的算子信息。该函数只有sysadmin权限的用户可以执行。 返回值类型:record pgxc_get_wlm_operator_history() 描述:显示在所有CN上缓存的作业执行结束时的算子信息。该信息会被定时清理,清理周期为3分钟。该函数只有sysadmin权限的用户可以执行。 返回值类型:record pgxc_get_wlm_operator_info() 描述:显示在所有CN上的作业执行结束时的算子信息。该函数只有sysadmin权限的用户可以执行。 返回值类型:record pgxc_get_wlm_operator_statistics() 描述:显示在所有CN上正在执行的作业的算子信息。该函数只有sysadmin权限的用户可以执行。 返回值类型:record pgxc_get_wlm_session_history() 描述:显示在所有CN上缓存的作业执行结束时的负载管理记录。该信息会被定时清理,清理周期为3分钟。该函数只有sysadmin权限的用户可以执行。 返回值类型:record pgxc_get_wlm_session_info() 描述:显示在所有CN上缓存的作业执行结束时的负载管理记录。该函数只有sysadmin权限的用户可以执行。 返回值类型:record pgxc_get_wlm_session_info_bytime(tag text, begin timestamp, end timestamp, limit int) 描述:显示在所有CN上开始或者结束时间位于某个时间区间的作业的负载管理记录。该函数只有sysadmin权限的用户可以执行。 参数说明:tag - 只能为‘start_time’或‘finish_time’,表明查询限制的是作业的开始时间还是结束时间。 begin - 时间段的开始时间。 end - 时间段的结束时间。 limit - 返回结果的条数。 返回值类型:record pgxc_get_wlm_session_statistics() 描述:显示在所有CN上正在执行的作业的负载管理记录。该函数只有sysadmin权限的用户可以执行。 返回值类型:record pgxc_stat_activity() 描述:显示当前集群下所有CN的当前用户查询相关的信息,sysadmin或者Monitor admin权限的用户可以执行该函数,普通用户可查看本用户的相关信息。 返回值类型:record 名称 类型 描述 coorname text 当前集群下的CN名称。 datid oid 用户会话在后台连接到的数据库OID。 datname text 用户会话在后台连接到的数据库名称。 pid bigint 后台线程ID。 sessionid bigint 会话ID。 usesysid oid 登录该后台的用户OID。 usename text 登录该后台的用户名。 application_name text 连接到该后台的应用名。 client_addr inet 连接到该后台的客户端的IP地址。如果此字段是null,它表明通过服务器机器上UNIX套接字连接客户端或者这是内部进程,如autovacuum。 client_hostname text 客户端的主机名,这个字段是通过client_addr的反向DNS查找得到。这个字段只有在启动log_hostname且使用IP连接时才非空。 client_port integer 客户端用于与后台通讯的TCP端口号,如果使用Unix套接字,则为-1。 backend_start timestamp with time zone 该过程开始的时间,即当客户端连接服务器的时间。 xact_start timestamp with time zone 启动当前事务的时间,如果没有事务是活跃的,则为null。如果当前查询是首个事务,则这列等同于query_start列。 query_start timestamp with time zone 开始当前活跃查询的时间,如果state的值不是active,则这个值是上一个查询的开始时间。 state_change timestamp with time zone 上次状态改变的时间。 waiting boolean 如果后台当前正等待锁则为true。 enqueue text 语句当前排队状态。可能值是: waiting in queue:表示语句在排队中。 空:表示语句正在运行。 state text 该后台当前总体状态。可能值是: active:后台正在执行一个查询。 idle:后台正在等待一个新的客户端命令。 idle in transaction:后台在事务中,但事务中没有语句在执行。 idle in transaction (aborted):后台在事务中,但事务中有语句执行失败。 fastpath function call:后台正在执行一个fast-path函数。 disabled:如果后台禁用track_activities,则报告这个状态。 说明: 只有系统管理员能查看到自己帐户所对应的会话状态。其他帐户的state信息为空。例如以judy用户连接数据库后,在pgxc_stat_activity中查看到的普通用户joe及初始用户omm的state信息为空: SELECT datname, usename, usesysid, state,pid FROM pgxc_stat_activity; datname | usename | usesysid | state | pid ----------+---------+----------+--------+----------------- postgres | omm | 10 | | 139968752121616 postgres | omm | 10 | | 139968903116560 db_tpcds | judy | 16398 | active | 139968391403280 postgres | omm | 10 | | 139968643069712 postgres | omm | 10 | | 139968680818448 postgres | joe | 16390 | | 139968563377936 (6 rows) resource_pool name 用户使用的资源池。 query_id bigint 查询语句的ID。 query text 该后台的最新查询。如果state状态是active(活跃的),此字段显示当前正在执行的查询。所有其他情况表示上一个查询。 pgxc_stat_activity_with_conninfo() 描述:显示当前集群下所有CN的当前用户查询相关的信息,返回值定义参考pgxc_stat_activity视图。sysadmin权限的用户或者Monitor admin用户可以执行该函数,普通用户只能查看本用户相关信息。 返回值类型:record pgxc_stat_all_tables() 描述:显示各节点数据中每个表(包括TOAST表)的一行的统计信息,sysadmin权限的用户或者Monitor admin用户可以执行该函数。 返回值类型:record pgxc_get_thread_wait_status() 描述:查看集群各个节点上所有SQL语句 产生的线程之间的调用层次关系,以及各个线程的阻塞等待状态。 返回值类型:record pgxc_wlm_get_workload_records() 描述:显示在所有CN上正在执行的作业的状态信息。需要系统管理员权限才可以执行该函数。 返回值类型:record pv_session_memory 描述:统计Session级别的内存使用情况,包含执行作业在数据节点上Postgres线程和Stream线程分配的所有内存。 若GUC参数enable_memory_limit=off,该函数不能使用。 返回值类型:record 表2 返回值说明 名称 类型 描述 sessid text 线程启动时间+线程标识。 init_mem integer 当前正在执行作业进入执行器前已分配的内存,单位MB。 used_mem integer 当前正在执行作业已分配的内存,单位MB。 peak_mem integer 当前正在执行作业已分配的内存峰值,单位MB。 dbe_perf.gs_stat_activity_timeout(int) 描述:获取当前节点上执行时间超过超时阈值的查询作业信息。需要GUC参数track_activities设置为on才能正确返回结果。超时阈值的取值范围是0~2147483。 返回值类型:setof record 名称 类型 描述 database name 用户会话连接的数据库名称。 pid bigint 后台线程ID。 sessionid bigint 会话ID。 usesysid oid 登录该后台的用户OID。 application_name text 连接到该后台的应用名。 query text 该后台正在执行的查询。 xact_start timestamptz 启动当前事务的时间。 query_start timestamptz 开始当前查询的时间。 query_id bigint 查询语句ID。 dbe_perf.global_stat_activity_timeout(int) 描述:获取当前系统(所有CN)中执行时间超过超时阈值的查询作业信息。需要GUC参数track_activities设置为on才能正确返回结果。超时阈值的取值范围是0~2147483。 返回值类型:setof record 名称 类型 描述 nodename text 用户会话连接的coordinate node的名称。 database name 用户会话连接的数据库名称。 pid bigint 后台线程ID。 sessionid bigint 会话ID。 usesysid oid 登录该后台的用户OID。 application_name text 连接到该后台的应用名。 query text 该后台正在执行的查询。 xact_start timestamptz 启动当前事务的时间。 query_start timestamptz 开始当前查询的时间。 query_id bigint 查询语句ID。 dbe_perf.get_average_value() 描述:获取当前节点的统计信息重置(重启,主备倒换,数据库删除)时间。 返回值类型:record DBE_PERF.get_global_active_session() 描述:显示所有节点上的ATIVE SESSION PROFILE内存中的样本的汇总。 返回值类型:record DBE_PERF.get_global_os_runtime() 描述:显示当前操作系统运行的状态信息,仅在CN上支持查询。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_os_threads() 描述:提供整个集群中所有正常节点下的线程状态信息,仅在CN上支持查询。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_os_threads() 描述:提供整个集群中所有正常节点下的线程状态信息,仅在CN上支持查询。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_workload_sql_count() 描述:提供整个集群中不同负载SELECT,UPDATE,INSERT,DELETE,DDL, DML,DCL计数信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_workload_sql_elapse_time() 描述:提供整个集群中不同负载SELECT,UPDATE,INSERT,DELETE,响应时间信息(TOTAL,AVG, MIN, MAX)。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_workload_transaction() 描述:获取集群内所有节点上的事务量信息,事务时间信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_session_stat() 描述:获取集群内所有节点上的会话状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record 状态信息有如下17项,commit,rollback,sql,table_scan,blocks_fetched,physical_read_operation, shared_blocks_dirtied,local_blocks_dirtied,shared_blocks_read,local_blocks_read, blocks_read_time,blocks_write_time,sort_imemory,sort_idisk,cu_mem_hit, cu_hdd_sync_read,cu_hdd_asyread DBE_PERF.get_global_session_time() 描述:提供整个集群各节点各个关键阶段的时间消耗。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_session_memory() 描述:汇聚各节点的Session级别的内存使用情况,包含执行作业在数据节点上Postgres线程和Stream线程分配的所有内存,单位为MB。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_session_memory_detail() 描述:汇聚各节点的线程的内存使用情况,以MemoryContext节点来统计。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_session_stat_activity() 描述:汇聚集群内各节点上正在运行的线程相关的信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_thread_wait_status() 描述:汇聚所有节点上工作线程(backend thread)以及辅助线程(auxiliary thread)的阻塞等待情况。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_wlm_controlgroup_ng_config() 描述:数据库内所有的控制组信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_wlm_user_resource_runtime() 描述:显示所有用户资源使用情况,参数use_workload_manager为on时才有效。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_wlm_workload_runtime() 描述:汇聚当前用户在每个CN上执行作业时在CN上的状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_operator_ec_history() 描述:汇聚当前用户在每个CN上EC算子的历史状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_operator_ec_history_table() 描述:汇聚当前用户在每个CN上EC算子的历史状态信息(持久化)。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_operator_ec_runtime() 描述:汇聚当前用户在每个CN上EC算子的实时状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_operator_history_table() 描述:汇聚当前用户所有CN上执行作业结束后的算子相关记录(持久化)。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_operator_history() 描述:汇聚当前用户所有CN上执行作业结束后的算子相关记录。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_operator_runtime() 描述:汇聚当前用户所有CN上执行作业实时的算子相关记录。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_statement_complex_history() 描述:汇聚当前用户所有CN节点上复杂查询的历史记录。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_statement_complex_history_table() 描述:汇聚当前用户所有CN节点上复杂查询的历史记录(持久化)。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_statement_complex_runtime() 描述:汇聚当前用户所有CN节点上复杂查询的实时信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_memory_node_detail() 描述:汇聚某个数据库在所有节点上的内存使用情况。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_shared_memory_detail() 描述:汇聚所有节点已产生的共享内存上下文的使用信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_comm_delay() 描述:汇聚所有DN节点的通信库时延状态。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_comm_recv_stream() 描述:汇聚所有DN节点的通信库接收流状态。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_comm_send_stream() 描述:汇聚所有DN节点的通信库发送流状态。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_comm_status() 描述:汇聚所有DN节点的通信库状态。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_statio_all_indexes 描述:汇聚所有节点当前数据库中的索引信息及I/O统计量。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_local_toastname_and_toastindexname() 描述:提供本地toast表的name和index和其关联表的对应关系。 返回值类型:record DBE_PERF.get_summary_statio_all_indexes 描述:统计所有节点当前数据库中的每个索引行,显示特定索引的I/O的统计。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_statio_all_sequences 描述:提供命名空间中所有sequences的IO状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_statio_all_tables 描述:汇聚各节点的数据库中每个表I/O的统计。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_statio_all_tables 描述:统计集群内数据库中每个表I/O的统计。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_local_toast_relation() 描述:提供本地toast表的name和其关联表的对应关系。 返回值类型:record DBE_PERF.get_global_statio_sys_indexes() 描述:汇聚各节点的命名空间中所有系统表索引的IO状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_statio_sys_indexes() 描述:统计各节点的命名空间中所有系统表索引的IO状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_statio_sys_sequences() 描述:提供命名空间中所有系统表为sequences的IO状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_statio_sys_tables() 描述:提供各节点的命名空间中所有系统表的IO状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_statio_sys_tables() 描述:集群内汇聚命名空间中所有系统表的IO状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_statio_user_indexes() 描述:各节点的命名空间中所有用户关系表索引的IO状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_statio_user_indexes() 描述:集群内汇聚命名空间中所有用户关系表索引的IO状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_statio_user_sequences() 描述:显示各节点的命名空间中所有用户的sequences的IO状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_statio_user_tables() 描述:显示各节点的命名空间中所有用户关系表的IO状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_statio_user_tables() 描述:集群内汇聚命名空间中所有用户关系表的IO状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_stat_db_cu() 描述:视图查询集群各个节点,每个数据库的CU命中情况。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_dn_stat_all_tables() 描述:汇聚DN节点数据库中每个表的统计信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_cn_stat_all_tables() 描述:汇聚CN节点数据库中每个表的统计信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_dn_stat_all_tables() 描述:统计DN节点数据库中每个表的统计信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_cn_stat_all_tables() 描述:统计CN节点数据库中每个表的统计信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_stat_all_indexes() 描述:汇聚所有节点数据库中每个索引的统计信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_stat_all_indexes() 描述:统计所有节点数据库中每个索引的统计信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_stat_sys_tables() 描述:汇聚各节点pg_catalog、information_schema模式的所有命名空间中系统表的统计信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_stat_sys_tables() 描述:统计各节点pg_catalog、information_schema模式的所有命名空间中系统表的统计信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_stat_sys_indexes() 描述:汇聚各节点pg_catalog、information_schema模式中所有系统表的索引状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_stat_sys_indexes() 描述:统计各节点pg_catalog、information_schema模式中所有系统表的索引状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_stat_user_tables() 描述:汇聚所有命名空间中用户自定义普通表的状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_stat_user_tables() 描述:统计所有命名空间中用户自定义普通表的状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_stat_user_indexes() 描述:汇聚所有数据库中用户自定义普通表的索引状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_stat_user_indexes() 描述:统计所有数据库中用户自定义普通表的索引状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_stat_database() 描述:汇聚所有节点数据库统计信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_stat_database_conflicts() 描述:统计所有节点数据库统计信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_stat_xact_all_tables() 描述:汇聚命名空间中所有普通表和toast表的事务状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_stat_xact_all_tables() 描述:统计命名空间中所有普通表和toast表的事务状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_stat_xact_sys_tables() 描述:汇聚所有节点命名空间中系统表的事务状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_stat_xact_sys_tables() 描述:统计所有节点命名空间中系统表的事务状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_stat_xact_user_tables() 描述:汇聚所有节点命名空间中用户表的事务状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_stat_xact_user_tables() 描述:统计所有节点命名空间中用户表的事务状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_stat_user_functions() 描述:汇聚所有节点命名空间中用户定义函数的事务状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_stat_xact_user_functions() 描述:统计所有节点命名空间中用户定义函数的事务状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_stat_bad_block() 描述:汇聚所有节点表、索引等文件的读取失败信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_file_redo_iostat() 描述:统计所有节点表、索引等文件的读取失败信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_file_iostat() 描述:汇聚所有节点数据文件IO的统计。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_locks() 描述:汇聚所有节点的锁信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_replication_slots() 描述:汇聚所有节点上逻辑复制信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_bgwriter_stat() 描述:汇聚所有节点后端写进程活动的统计信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_replication_stat() 描述:汇聚各节点日志同步状态信息,如发起端发送日志位置,收端接收日志位置等。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_pooler_status() 描述:汇聚所有CN节点的pooler中的缓存连接状态。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_transactions_running_xacts() 描述:汇聚各节点运行事务的信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_transactions_running_xacts() 描述:统计各节点运行事务的信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_transactions_prepared_xacts() 描述:汇聚各节点当前准备好进行两阶段提交的事务的信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_transactions_prepared_xacts() 描述:统计各节点当前准备好进行两阶段提交的事务的信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_statement() 描述:汇聚各节点历史执行语句状态信息。集群创建后的默认情况下,查询该函数必须具有sysadmin权限或者monitor admin权限。 返回值类型:record DBE_PERF.get_global_statement_count() 描述:汇聚各节点SELECT,UPDATE,INSERT,DELETE,响应时间信息(TOTAL,AVG, MIN, MAX)。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_config_settings() 描述:汇聚各节点GUC参数配置信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_wait_events() 描述:汇聚各节点wait events状态信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_statement_responsetime_percentile() 描述:获取集群SQL响应时间P80,P95分布信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_summary_user_login() 描述:统计集群各节点用户登入登出次数信息。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.get_global_record_reset_time() 描述:汇聚集群统计信息重置(重启,主备倒换,数据库删除)时间。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record DBE_PERF.track_memory_context(context_list text) 描述:设置需要统计内存申请详细信息的内存上下文。入参为内存上下文的名称,使用“,”分隔,如“ThreadTopMemoryContext, SessionCacheMemoryContext”,注意该内存上下文名称是上下文敏感的。此外,单个内存上下文的长度为63,超过的部分会被截断。而且一次能够统计的内存上下文上限为16个,设置超过16个内存上下文会设置失败。每一次调用该函数都会将上次统计的结果清空,当入参指定为“”时,表示取消该统计功能。只有初始用户(super user)或者具有monadmin权限的用户可以执行该函数。 返回值类型:boolean DBE_PERF.track_memory_context_detail() 描述:获取DBE_PERF.track_memory_context函数指定的内存上下文的内存申请详细信息。返回值的定义见视图DBE_PERF.track_memory_context_detail。只有初始用户(super user)或者具有monadmin权限的用户可以执行该函数。 返回值类型:record DBE_PERF.global_io_wait_info() 描述:查询所有CN和DN节点上的IO管控的实时统计信息。 返回值类型:record pg_stat_get_mem_mbytes_reserved(tid) 描述:统计资源管理相关变量值,仅用于定位问题使用。 参数:线程id。 返回值类型:text gs_wlm_user_resource_info(name text) 描述:查询具体某个用户的资源限额和资源使用情况。普通用户只能查询到自己相关的信息,管理员权限的用户可以查看全部用户的信息。 返回值类型:record pg_stat_get_file_stat() 描述:通过对数据文件IO的统计,反映数据的IO性能,用以发现IO操作异常等性能问题。 返回值类型:record pg_stat_get_redo_stat() 描述:用于统计会话线程日志回放情况。 返回值类型:record pg_stat_get_status(int8) 描述:可以检测当前实例中工作线程(backend thread)以及辅助线程(auxiliary thread)的阻塞等待情况。 返回值类型:record get_local_rel_iostat() 描述:查询当前节点的数据文件IO状态累计值。 返回值类型:record DBE_PERF.get_global_rel_iostat() 描述:汇聚所有节点数据文件IO的统计。集群创建后的默认情况下,查询该函数必须具有monadmin权限。 返回值类型:record pg_catalog.plancache_status() 描述:显示在当前节点上的全局计划缓存的状态信息。函数返回信息和GLOBAL_PLANCACHE_STATUS一致。 返回值类型:record DBE_PERF.global_plancache_status() 描述:显示在所有节点上的全局计划缓存的状态信息。函数返回信息见字段GLOBAL_PLANCACHE_STATUS。 返回值类型:record pg_catalog.prepare_statement_status()(废弃) 描述:显示在当前节点上的prepare statement状态信息。函数返回信息和 GLOBAL_PREPARE_STATEMENT_STATUS(废弃)一致。 返回值类型:record DBE_PERF.global_prepare_statement_status()(废弃) 描述:显示在所有节点上的prepare statement的状态信息。函数返回信息见字段GLOBAL_PREPARE_STATEMENT_STATUS(废弃)。 返回值类型:record DBE_PERF.global_threadpool_status() 描述:显示在所有节点上的线程池中工作线程及会话的状态信息。函数返回信息见字段18.7.14-表 GLOBAL_THREADPOOL_STATUS。 返回值类型:record comm_check_connection_status 描述:返回该cn和其他所有活跃节点的连接情况。 参数:nan 返回值类型:node_name text, remote_name text, remote_host text, remote_port integer, is_connected boolean create_wlm_instance_statistics_info 描述:将当前实例的历史监控数据进行持久化保存。 参数:nan 返回值类型:integer remote_ckpt_stat() 描述:用于显示整个集群所有实例的检查点信息和各类日志刷页情况(本节点除外、DN上不可使用)。 返回值类型:record 表3 remote_ckpt_stat参数说明 参数 类型 描述 node_name text 实例名称。 ckpt_redo_point text 当前实例的检查点。 ckpt_clog_flush_num int8 从启动到当前时间clog刷盘页面数。 ckpt_csnlog_flush_num int8 从启动到当前时间csnlog刷盘页面数。 ckpt_multixact_flush_num int8 从启动到当前时间multixact刷盘页面数。 ckpt_predicate_flush_num int8 从启动到当前时间predicate刷盘页面数。 ckpt_twophase_flush_num int8 从启动到当前时间twophase刷盘页面数。 remote_double_write_stat() 描述:显示整个集群所有实例的双写文件的情况(本节点除外、DN上不可使用)。 返回值类型:record 表4 remote_double_write_stat参数说明 参数 类型 描述 node_name text 实例名称。 curr_dwn int8 当前双写文件的序列号。 curr_start_page int8 当前双写文件恢复起始页面。 file_trunc_num int8 当前双写文件复用的次数。 file_reset_num int8 当前双写文件写满后发生重置的次数。 total_writes int8 当前双写文件总的I/O次数。 low_threshold_writes int8 低效率写双写文件的I/O次数(一次I/O刷页数量少于16页面)。 high_threshold_writes int8 高效率写双写文件的I/O次数(一次I/O刷页数量多于一批,421个页面)。 total_pages int8 当前刷页到双写文件区的总的页面个数。 low_threshold_pages int8 低效率刷页的页面个数。 high_threshold_pages int8 高效率刷页的页面个数。 remote_single_flush_dw_stat() 描述:显示整个集群所有实例的单页面淘汰双写文件的情况(本节点除外、DN上不可使用)。 返回值类型:record 表5 remote_single_flush_dw_stat参数说明 参数 类型 描述 node_name text 实例名称。 curr_dwn integer 当前双写文件的序列号。 curr_start_page integer 当前双写文件start位置。 total_writes bigint 当前双写文件总计写数据页面个数。 file_trunc_num bigint 当前双写文件复用的次数。 file_reset_num bigint 当前双写文件写满后发生重置的次数。 remote_pagewriter_stat() 描述:显示整个集群所有实例的刷页信息和检查点信息(本节点除外、DN上不可使用)。 返回值类型:record 表6 remote_pagewriter_stat参数说明 参数 类型 描述 node_name text 实例名称。 pgwr_actual_flush_total_num int8 从启动到当前时间总计刷脏页数量。 pgwr_last_flush_num int4 上一批刷脏页数量。 remain_dirty_page_num int8 当前预计还剩余多少脏页。 queue_head_page_rec_lsn text 当前实例的脏页队列第一个脏页的recovery_lsn。 queue_rec_lsn text 当前实例的脏页队列的recovery_lsn。 current_xlog_insert_lsn text 当前实例XLog写入的位置。 ckpt_redo_point text 当前实例的检查点。 remote_recovery_status() 描述:显示关于主机和备机的日志流控信息(本节点除外、DN上不可使用)。 返回值类型:record 表7 remote_recovery_status参数说明 参数 类型 描述 node_name text 节点的名称,包含主机和备机。 standby_node_name text 备机名称。 source_ip text 主机的IP地址。 source_port int4 主机的端口号。 dest_ip text 备机的IP地址。 dest_port int4 备机的端口号。 current_rto int8 备机当前的日志流控时间,单位秒。 target_rto int8 备机通过GUC参数设置的预期流控时间,单位秒。 current_sleep_time int8 为了达到这个预期主机所需要的睡眠时间,单位微秒。 remote_rto_status() 描述:显示关于主机和备机的日志流控信息(本节点除外、DN上不可使用)。 返回值类型:record 表8 remote_rto_status参数说明 参数 类型 描述 node_name text 节点的名称,包含主机和备机。 rto_info text 流控的信息,包含了备机当前的日志流控时间(单位:秒),备机通过GUC参数设置的预期流控时间(单位:秒),为了达到这个预期主机所需要的睡眠时间(单位:微秒)。 remote_redo_stat() 描述:显示整个集群所有实例的日志回放情况(本节点除外、DN上不可使用)。 返回值类型:record 表9 remote_redo_stat参数说明 参数 类型 描述 node_name text 实例名称。 redo_start_ptr int8 当前实例日志回放的起始点。 redo_start_time int8 当前实例日志回放的起始UTC时间。 redo_done_time int8 当前实例日志回放的结束UTC时间。 curr_time int8 当前实例的当前UTC时间。 min_recovery_point int8 当前实例日志的最小一致性点位置。 read_ptr int8 当前实例日志的读取位置。 last_replayed_read_ptr int8 当前实例的日志回放位置。 recovery_done_ptr int8 当前实例启动完成时的回放位置。 read_xlog_io_counter int8 当前实例读取回放日志的io次数计数。 read_xlog_io_total_dur int8 当前实例读取回放日志的io总时延。 read_data_io_counter int8 当前实例回放过程中读取数据页面的io次数计数。 read_data_io_total_dur int8 当前实例回放过程中读取数据页面的io总时延。 write_data_io_counter int8 当前实例回放过程中写数据页面的io次数计数。 write_data_io_total_dur int8 当前实例回放过程中写数据页面的io总时延。 process_pending_counter int8 当前实例回放过程中日志分发线程的同步次数计数。 process_pending_total_dur int8 当前实例回放过程中日志分发线程的同步总时延。 apply_counter int8 当前实例回放过程中回放线程的同步次数计数。 apply_total_dur int8 当前实例回放过程中回放线程的同步总时延。 speed int8 当前实例日志回放速率。 local_max_ptr int8 当前实例启动成功后本地收到的回放日志的最大值。 primary_flush_ptr int8 主机落盘日志的位置。 worker_info text 当前实例回放线程信息,若没有开并行回放则该值为空。 PGXC_GTM_SNAPSHOT_STATUS() 描述:用于查看当前GTM上事务信息,仅在GTM模式下支持本系统函数,GTM-LITE和GTM-FREE模式下不支持。 返回类类型:record 函数返回字段描述如下: 表10 PGXC_GTM_SNAPSHOT_STATUS返回参数说明 名称 类型 描述 xmin xid 仍在运行的最小事务号。 xmax xid 已完成的所有事务号中最大事务号的下一个事务号。 csn integer 待提交事务的序列号。 oldestxmin xid 当前最早的活跃事务在其取快照时,所有运行事务号最小的事务。 xcnt integer 当前活跃的事务个数。 running_xids text 当前活跃的事务号。 pg_stat_get_partition_tuples_hot_updated 描述:返回给定分区id的分区热更新元组数的统计。 参数:oid 返回值类型:bigint pv_os_run_info 描述:显示当前操作系统运行的状态信息,具体字段信息参考PV_OS_RUN_INFO。 参数:nan 返回值类型:setof record pv_session_stat 描述:以会话线程或AutoVacuum线程为单位,统计会话状态信息,具体字段信息参考PV_SESSION_STAT。 参数:nan 返回值类型:setof record pv_session_time 描述:用于统计会话线程的运行时间信息,及各执行阶段所消耗时间,具体字段信息参考PV_SESSION_TIME。 参数:nan 返回值类型:setof record pg_stat_get_db_temp_bytes 描述:用于统计通过数据库查询写入临时文件的数据总量。计算所有临时文件,不论为什么创建临时文件,而且不管log_temp_files设置。 参数:oid 返回值类型:bigint pg_stat_get_db_temp_files 描述:通过数据库查询创建的临时文件数量。计算所有临时文件,不论为什么创建临时文件(比如排序或者哈希),而且不管log_temp_files设置。 参数:oid 返回值类型:bigint remote_bgwriter_stat() 描述:显示整个集群所有实例的bgwriter线程刷页信息,候选buffer链中页面个数,buffer淘汰信息(本节点除外、DN上不可使用)。 返回值类型:record 表11 remote_bgwriter_stat参数说明 参数 类型 描述 node_name text 实例名称。 bgwr_actual_flush_total_num bigint 从启动到当前时间bgwriter线程总计刷脏页数量。 bgwr_last_flush_num integer bgwriter线程上一批刷脏页数量。 candidate_slots integer 当前候选buffer链中页面个数。 get_buffer_from_list bigint buffer淘汰从候选buffer链中获取页面的次数。 get_buf_clock_sweep bigint buffer淘汰从原淘汰方案中获取页面的次数。 示例: pg_backend_pid函数显示当前后台服务线程ID。 1 2 3 4 5 postgres=# SELECT pg_backend_pid(); pg_backend_pid ----------------- 139706243217168 (1 row) pg_stat_get_backend_pid函数显示后台线程ID。 1 2 3 4 5 postgres=# SELECT pg_stat_get_backend_pid(1); pg_stat_get_backend_pid ------------------------- 139706243217168 (1 row) 父主题: 函数和操作符
  • 现象描述 某局点测试中:ddw_f10_op_cust_asset_mon为分区表,分区键为year_mth,此字段是由年月两个值拼接而成的字符串。 测试SQL如下: 1 2 3 4 select count(1) from t_ddw_f10_op_cust_asset_mon b1 where b1.year_mth between to_char(add_months(to_date(''20170222'','yyyymmdd'), -11),'yyyymm') and substr(''20170222'',1 ,6 ); 测试结果显示此SQL的表Scan耗时长达135s。初步猜测可能是性能瓶颈点。 add_months为本地适配函数: 1 2 3 4 5 6 7 8 9 10 11 12 CREATE OR REPLACE FUNCTION ADD_MONTHS(date, integer) RETURNS date AS $$ SELECT CASE WHEN (EXTRACT(day FROM $1) = EXTRACT(day FROM (date_trunc('month', $1) + INTERVAL '1 month - 1 day'))) THEN date_trunc('month', $1) + CAST($2 + 1 || ' month - 1 day' as interval) ELSE $1 + CAST($2 || ' month' as interval) END $$ LANGUAGE SQL IMMUTABLE;
  • SEQUENCE函数 序列函数为用户从序列对象中获取后续的序列值提供了简单的多用户安全的方法。 nextval(regclass) 描述:递增序列并返回新值。 为了避免从同一个序列获取值的并发事务被阻塞, nextval操作不会回滚;也就是说,一旦一个值已经被抓取, 那么就认为它已经被用过了,并且不会再被返回。 即使该操作处于事务中,当事务之后中断,或者如果调用查询结束不使用该值,也是如此。这种情况将在指定值的顺序中留下未使用的"空洞"。 因此,GaussDB序列对象不能用于获得"无间隙"序列。 如果nextval被下推到DN上时,各个DN会自动连接GTM,请求next values值,例如(insert into t1 select xxx,t1某一列需要调用nextval函数),由于GTM上有最大连接数为8192的限制,而这类下推语句会导致消耗过多的GTM连接数,因此对于这类语句的并发数目限制为7000(其它语句需要占用部分连接)/集群DN数目。 返回类型:bigint nextval函数有两种调用方式(其中第二种调用方式兼容Oracle的语法,目前不支持Sequence命名中有特殊字符"."的情况),如下: 示例1: 1 2 3 4 5 postgres=# select nextval('seqDemo'); nextval --------- 2 (1 row) 示例2: 1 2 3 4 5 postgres=# select seqDemo.nextval; nextval --------- 2 (1 row) currval(regclass) 返回当前会话里最近一次nextval返回的指定的sequence的数值。如果当前会话还没有调用过指定的sequence的nextval,那么调用currval将会报错。需要注意的是,这个函数在默认情况下是不支持的,需要通过设置enable_beta_features为true之后,才能使用这个函数。同时在设置enable_beta_features为true之后,nextval()函数将不支持下推。 返回类型:bigint currval函数有两种调用方式(其中第二种调用方式兼容Oracle的语法,目前不支持Sequence命名中有特殊字符"."的情况),如下: 示例1: 1 2 3 4 5 postgres=# select currval('seq1'); currval --------- 2 (1 row) 示例2: 1 2 3 4 5 postgres=# select seq1.currval seq1; currval --------- 2 (1 row) lastval() 描述:返回当前会话里最近一次nextval返回的数值。这个函数等效于currval,只是它不用序列名为参数,它抓取当前会话里面最近一次nextval使用的序列。如果当前会话还没有调用过nextval,那么调用lastval将会报错。 需要注意的是,这个函数在默认情况下是不支持的,需要通过设置enable_beta_features或者lastval_supported为true之后,才能使用这个函数。同时这种情况下,nextval()函数将不支持下推。 返回类型:bigint 示例: 1 2 3 4 5 postgres=# select lastval(); lastval --------- 2 (1 row) setval(regclass, bigint) 描述:设置序列的当前数值。 返回类型:bigint 示例: 1 2 3 4 5 postgres=# select setval('seqDemo',1); setval -------- 1 (1 row) setval(regclass, bigint, Boolean) 描述:设置序列的当前数值以及is_called标志。 返回类型:bigint 示例: 1 2 3 4 5 postgres=# select setval('seqDemo',1,true); setval -------- 1 (1 row) Setval后当前会话及GTM上会立刻生效,但如果其他会话有缓存的序列值,只能等到缓存值用尽才能感知Setval的作用。所以为了避免序列值冲突,setval要谨慎使用。 因为序列是非事务的,setval造成的改变不会由于事务的回滚而撤销。 父主题: 函数和操作符
  • 解析查询 GaussDB提供了函数to_tsquery和plainto_tsquery将查询转换为tsquery数据类型,to_tsquery提供比plainto_tsquery更多的功能,但对其输入要求更严格。 to_tsquery([ config regconfig, ] querytext text) returns tsquery to_tsquery从querytext中创建一个tsquery,querytext必须由布尔运算符& (AND),| (OR)和! (NOT)分割的单个token组成。这些运算符可以用圆括弧分组。换句话说,to_tsquery输入必须遵循tsquery输入的通用规则,具体请参见文本搜索类型。不同的是基本tsquery以token表面值作为输入,而to_tsquery使用指定或默认分词器将每个token标准化成词素,并依据分词器丢弃属于停用词的token。例如: 1 2 3 4 5 postgres=# SELECT to_tsquery('english', 'The & Fat & Rats'); to_tsquery --------------- 'fat' & 'rat' (1 row) 像在基本tsquery中的输入一样,weight(s)可以附加到每个词素来限制它只匹配那些有相同weight(s)的tsvector词素。比如: 1 2 3 4 5 postgres=# SELECT to_tsquery('english', 'Fat | Rats:AB'); to_tsquery ------------------ 'fat' | 'rat':AB (1 row) 同时,*也可以附加到词素来指定前缀匹配: 1 2 3 4 5 postgres=# SELECT to_tsquery('supern:*A & star:A*B'); to_tsquery -------------------------- 'supern':*A & 'star':*AB (1 row) 这样的词素将匹配tsquery中指定字符串和权重的项。 plainto_tsquery([ config regconfig, ] querytext text) returns tsquery plainto_tsquery将未格式化的文本querytext变换为tsquery。类似于to_tsvector,文本被解析并且标准化,然后在存在的词之间插入&(AND)布尔算子。 比如: 1 2 3 4 5 postgres=# SELECT plainto_tsquery('english', 'The Fat Rats'); plainto_tsquery ----------------- 'fat' & 'rat' (1 row) 请注意,plainto_tsquery无法识别布尔运算符、权重标签,或在其输入中的前缀匹配标签: 1 2 3 4 5 postgres=# SELECT plainto_tsquery('english', 'The Fat & Rats:C'); plainto_tsquery --------------------- 'fat' & 'rat' & 'c' (1 row) 在这里,所有输入的标点符号作为空格符号丢弃。 父主题: 控制文本搜索
  • 示例:从MYSQL向GaussDB进行数据迁移 下面示例演示如何通过CopyManager从mysql向GaussDB进行数据迁移的过程。 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 //以下用例以gsjdbc4.jar为例 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全; // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 import java.io.StringReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.postgresql.copy.CopyManager; import org.postgresql.core.BaseConnection; public class Migration{ public static void main(String[] args) { String url = new String("jdbc:postgresql://$ip:$port/postgres"); //数据库URL String user = System.getenv("EXAMPLE_USERNAME_ENV"); //数据库用户名 String pass = System.getenv("EXAMPLE_PASSWORD_ENV"); //数据库密码 String tablename = new String("migration_table"); //定义表信息 String delimiter = new String("|"); //定义分隔符 String encoding = new String("UTF8"); //定义字符集 String driver = "org.postgresql.Driver"; StringBuffer buffer = new StringBuffer(); //定义存放格式化数据的缓存 try { //获取源数据库查询结果集 ResultSet rs = getDataSet(); //遍历结果集,逐行获取记录 //将每条记录中各字段值,按指定分隔符分割,由换行符结束,拼成一个字符串 //把拼成的字符串,添加到缓存buffer while (rs.next()) { buffer.append(rs.getString(1) + delimiter + rs.getString(2) + delimiter + rs.getString(3) + delimiter + rs.getString(4) + "\n"); } rs.close(); try { //建立目标数据库连接 Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, pass); BaseConnection baseConn = (BaseConnection) conn; baseConn.setAutoCommit(false); //初始化表信息 String sql = "Copy " + tablename + " from STDIN DELIMITER " + "'" + delimiter + "'" + " ENCODING " + "'" + encoding + "'"; //提交缓存buffer中的数据 CopyManager cp = new CopyManager(baseConn); StringReader reader = new StringReader(buffer.toString()); cp.copyIn(sql, reader); baseConn.commit(); reader.close(); baseConn.close(); } catch (ClassNotFoundException e) { e.printStackTrace(System.out); } catch (SQLException e) { e.printStackTrace(System.out); } } catch (Exception e) { e.printStackTrace(); } } //******************************** // 从源数据库返回查询结果集 //********************************* private static ResultSet getDataSet() { ResultSet rs = null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); Connection conn = DriverManager.getConnection("jdbc:mysql://$ip:$port/database?useSSL=false&allowPublicKeyRetrieval=true", userName, password); Statement stmt = conn.createStatement(); rs = stmt.executeQuery("select * from migration_table"); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return rs; } } 父主题: 基于JDBC开发
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 --创建一个角色role1。 postgres=# CREATE ROLE role1 IDENTIFIED BY 'xxxxxxxxxxx'; -- 为用户role1创建一个同名schema,子命令创建的表films和winners的拥有者为role1。 postgres=# 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; --删除schema。 postgres=# DROP SCHEMA role1 CASCADE; --删除用户。 postgres=# DROP USER role1 CASCADE;
  • 参数说明 schema_name 模式名称。 模式名不能和当前数据库里其他的模式重名。 模式的名称不可以“pg_”开头。 取值范围:字符串,要符合标识符的命名规范。 AUTHORIZATION user_name 指定模式的所有者。当不指定schema_name时,把user_name当作模式名,此时user_name只能是角色名。 取值范围:已存在的用户名/角色名。 schema_element 在模式里创建对象的SQL语句。目前仅支持CREATE TABLE、CREATE VIEW、CREATE INDEX、CREATE PARTITION、GRANT子句。 子命令所创建的对象都被AUTHORIZATION子句指定的用户所拥有。 如果当前搜索路径上的模式中存在同名对象时,需要明确指定引用对象所在的模式。可以通过命令SHOW SEARCH_PATH来查看当前搜索路径上的模式。
  • 背景信息 初始时,GaussDB包含两个模板数据库template0、template1,以及一个默认的用户数据库postgres。 CREATE DATABASE实际上通过拷贝模板数据库来创建新数据库。只支持拷贝template0。请避免使用客户端或其他手段连接及操作两个模板数据库。 模板数据库中没有用户表,可通过系统表PG_DATABASE查看模板数据库属性。 模板template0不允许用户连接;模板template1只允许数据库初始用户和系统管理员连接,普通用户无法连接。 数据库系统中会有多个数据库,但是同一时刻客户端程序只能连接一个数据库。当前,不支持在不同的数据库之间进行相互查询(跨库查询或跨库事务)。 当一个数据库集群中存在多个数据库时,可以通过客户端工具的-d参数指定目标数据库进行登录,也可以在客户端程序登录数据库以后通过\c命令进行数据库切换。
  • 操作步骤 创建数据库 使用如下命令创建一个新的数据库db_tpcds。 1 2 postgres=# CREATE DATABASE db_tpcds; CREATE DATABASE 数据库名称遵循SQL标识符的一般规则。当前角色自动成为此新数据库的所有者。 如果一个数据库系统用于承载相互独立的用户和项目,建议把它们放在不同的数据库里。 如果项目或者用户是相互关联的,并且可以相互使用对方的资源,则应该把它们放在同一个数据库里,但可以规划在不同的模式中。模式只是一个纯粹的逻辑结构,某个模式的访问权限由权限系统模块控制。 创建数据库时,若数据库名称长度超过63字节,server端会对数据库名称进行截断,保留前63个字节,因此建议数据库名称长度不要超过63个字节。 查看数据库 使用\l元命令查看数据库系统的数据库列表。 1 postgres=# \l 使用如下命令通过系统表pg_database查询数据库列表。 1 postgres=# SELECT datname FROM pg_database; 修改数据库 用户可以使用如下命令修改数据库属性(比如:owner、名称和默认的配置属性)。 使用如下命令为数据库重新命名。 1 2 postgres=# ALTER DATABASE db_tpcds RENAME TO human_tpcds; ALTER DATABASE 执行完参数设置后,需要手动执行CLEAN CONNECTION清理旧连接,否则可能存在节点间参数值不一致。 删除数据库 用户可以使用DROP DATABASE命令删除数据库。这个命令删除了数据库中的系统目录,并且删除了带有数据的磁盘上的数据库目录。用户必须是数据库的owner或者系统管理员才能删除数据库。当有人连接数据库时,删除操作会失败。删除数据库时请先连接到其他的数据库。 使用如下命令删除数据库: 1 2 postgres=# DROP DATABASE human_tpcds; DROP DATABASE
  • 注意事项 如果数据库的编码为SQL_ASCII(可以通过“show server_encoding”命令查看当前数据库存储编码),则在创建数据库对象时,如果对象名中含有多字节字符(例如中文),超过数据库对象名长度限制(63字节)的时候,数据库会将最后一个字节(而不是字符)截断,可能造成出现半个字符的情况。 针对这种情况,请遵循以下条件: 保证数据对象的名称不超过限定长度。 使用例如utf-8编码集做为数据库的默认存储编码集(server_encoding)。 不要使用多字节字符做为对象名。 如果出现因为误操作导致在多字节字符的中间截断而无法删除数据库对象的现象,请使用截断前的数据库对象名进行删除操作,或将该对象从各个数据库节点的相应系统表中依次删掉。
  • 数值类型 表1列出了所有的可用类型。数字操作符和相关的内置函数请参见数字操作函数和操作符。 表1 整数类型 名称 描述 存储空间 范围 TINYINT 微整数,别名为INT1。 1字节 0 ~ 255 SMALLINT 小范围整数,别名为INT2。 2字节 -32,768 ~ +32,767 INTEGER 常用的整数,别名为INT4。 4字节 -2,147,483,648 ~ +2,147,483,647 BINARY_INTEGER 常用的整数INTEGER的别名,为兼容Oracle类型。 4字节 -2,147,483,648 ~ +2,147,483,647 BIGINT 大范围的整数,别名为INT8。 8字节 -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 示例: --创建具有TINYINT类型数据的表。 postgres=# CREATE TABLE int_type_t1 ( IT_COL1 TINYINT ); --插入数据。 postgres=# INSERT INTO int_type_t1 VALUES(10); --查看数据。 postgres=# SELECT * FROM int_type_t1; it_col1 --------- 10 (1 row) --删除表。 postgres=# DROP TABLE int_type_t1; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 --创建具有TINYINT,INTEGER,BIGINT类型数据的表。 postgres=# CREATE TABLE int_type_t2 ( a TINYINT, b TINYINT, c INTEGER, d BIGINT ); --插入数据。 postgres=# INSERT INTO int_type_t2 VALUES(100, 10, 1000, 10000); --查看数据。 postgres=# SELECT * FROM int_type_t2; a | b | c | d -----+----+------+------- 100 | 10 | 1000 | 10000 (1 row) --删除表。 postgres=# DROP TABLE int_type_t2; TINYINT、SMALLINT、INTEGER和BIGINT类型存储各种范围的数字,也就是整数。试图存储超出范围以外的数值将会导致错误。 常用的类型是INTEGER,因为它提供了在范围、存储空间、性能之间的最佳平衡。一般只有取值范围确定不超过SMALLINT的情况下,才会使用SMALLINT类型。而只有在INTEGER的范围不够的时候才使用BIGINT,因为前者相对快得多。 表2 任意精度型 名称 描述 存储空间 范围 NUMERIC[(p[,s])], DECIMAL[(p[,s])] 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 说明: p为总位数,s为小数位数。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 NUMBER[(p[,s])] NUMERIC类型的别名,为兼容Oracle数据类型。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 示例: --创建表。 postgres=# CREATE TABLE decimal_type_t1 ( DT_COL1 DECIMAL(10,4) ); --插入数据。 postgres=# INSERT INTO decimal_type_t1 VALUES(123456.122331); --查询表中的数据。 postgres=# SELECT * FROM decimal_type_t1; dt_col1 ------------- 123456.1223 (1 row) --删除表。 postgres=# DROP TABLE decimal_type_t1; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 --创建表。 postgres=# CREATE TABLE numeric_type_t1 ( NT_COL1 NUMERIC(10,4) ); --插入数据。 postgres=# INSERT INTO numeric_type_t1 VALUES(123456.12354); --查询表中的数据。 postgres=# SELECT * FROM numeric_type_t1; nt_col1 ------------- 123456.1235 (1 row) --删除表。 postgres=# DROP TABLE numeric_type_t1; 与整数类型相比,任意精度类型需要更大的存储空间,其存储效率、运算效率以及压缩比效果都要差一些。在进行数值类型定义时,优先选择整数类型。当且仅当数值超出整数可表示最大范围时,再选用任意精度类型。 使用Numeric/Decimal进行列定义时,建议指定该列的精度p以及标度s。 表3 序列整型 名称 描述 存储空间 范围 SMALLSERIAL 二字节序列整型。 2字节 1 ~ 32,767 SERIAL 四字节序列整型。 4字节 1 ~ 2,147,483,647 BIGSERIAL 八字节序列整型。 8字节 1 ~ 9,223,372,036,854,775,807 示例: 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 --创建表。 postgres=# CREATE TABLE smallserial_type_tab(a SMALLSERIAL); --插入数据。 postgres=# INSERT INTO smallserial_type_tab VALUES(default); --再次插入数据。 postgres=# INSERT INTO smallserial_type_tab VALUES(default); --查看数据。 postgres=# SELECT * FROM smallserial_type_tab; a --- 1 2 (2 rows) --创建表。 postgres=# CREATE TABLE serial_type_tab(b SERIAL); --插入数据。 postgres=# INSERT INTO serial_type_tab VALUES(default); --再次插入数据。 postgres=# INSERT INTO serial_type_tab VALUES(default); --查看数据。 postgres=# SELECT * FROM serial_type_tab; b --- 1 2 (2 rows) --创建表。 postgres=# CREATE TABLE bigserial_type_tab(c BIGSERIAL); --插入数据。 postgres=# INSERT INTO bigserial_type_tab VALUES(default); --插入数据。 postgres=# INSERT INTO bigserial_type_tab VALUES(default); --查看数据。 postgres=# SELECT * FROM bigserial_type_tab; c --- 1 2 (2 rows) --删除表。 postgres=# DROP TABLE smallserial_type_tab; postgres=# DROP TABLE serial_type_tab; postgres=# DROP TABLE bigserial_type_tab; SMALLSERIAL,SERIAL和BIGSERIAL类型不是真正的类型,只是为在表中设置唯一标识做的概念上的便利。因此,创建一个整数字段,并且把它的缺省数值安排为从一个序列发生器读取。应用了一个NOT NULL约束以确保NULL不会被插入。在大多数情况下用户可能还希望附加一个UNIQUE或PRIMARY KEY约束避免意外地插入重复的数值,但这个不是自动的。最后,将序列发生器从属于那个字段,这样当该字段或表被删除的时候也一并删除它。目前只支持在创建表时候指定SERIAL列,不可以在已有的表中,增加SERIAL列。另外临时表也不支持创建SERIAL列。因为SERIAL不是真正的类型,也不可以将表中存在的列类型转化为SERIAL。 表4 浮点类型 名称 描述 存储空间 范围 REAL, FLOAT4 单精度浮点数,不精准。 4字节 6位十进制数字精度。 DOUBLE PRECISION, FLOAT8 双精度浮点数,不精准。 8字节 1E-307~1E+308, 15位十进制数字精度。 FLOAT[(p)] 浮点数,不精准。精度p取值范围为[1,53]。 说明: p为精度,表示总位数。 4字节或8字节 根据精度p不同选择REAL或DOUBLE PRECISION作为内部表示。如不指定精度,内部用DOUBLE PRECISION表示。 BINARY_DOUBLE 是DOUBLE PRECISION的别名,为兼容Oracle类型。 8字节 1E-307~1E+308, 15位十进制数字精度。 DEC[(p[,s])] 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 说明: p为总位数,s为小数位位数。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 INTEGER[(p[,s])] 精度p取值范围为[1,1000],标度s取值范围为[0,p]。 用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。 未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。 关于浮点类型的精度,目前只能保证直接读取时的精度位数。涉及分布式计算时,由于计算执行在各个DN节点上,并且最终汇聚到一个CN节点,因此误差可能会随计算节点数量增加而被放大。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 --创建表。 postgres=# CREATE TABLE float_type_t2 ( FT_COL1 INTEGER, FT_COL2 FLOAT4, FT_COL3 FLOAT8, FT_COL4 FLOAT(3), FT_COL5 BINARY_DOUBLE, FT_COL6 DECIMAL(10,4), FT_COL7 INTEGER(6,3) )DISTRIBUTE BY HASH ( ft_col1); --插入数据。 postgres=# INSERT INTO float_type_t2 VALUES(10,10.365456,123456.1234,10.3214, 321.321, 123.123654, 123.123654); --查看数据。 postgres=# SELECT * FROM float_type_t2 ; ft_col1 | ft_col2 | ft_col3 | ft_col4 | ft_col5 | ft_col6 | ft_col7 ---------+---------+-------------+---------+---------+----------+--------- 10 | 10.3655 | 123456.1234 | 10.3214 | 321.321 | 123.1237 | 123.124 (1 row) --删除表。 postgres=# DROP TABLE float_type_t2; 父主题: 数据类型
  • 参数说明 function_name 要创建的函数名称(可以用模式修饰)。 取值范围:字符串,要符合标识符的命名规范。 argname 函数参数的名称。 取值范围:字符串,要符合标识符的命名规范。 argmode 函数参数的模式。 取值范围:IN,OUT,INOUT或VARIADIC。缺省值是IN。只有OUT模式的参数后面能跟VARIADIC。并且OUT和INOUT模式的参数不能用在RETURNS TABLE的函数定义中。 VARIADIC用于声明数组类型的参数。 argtype 函数参数的类型。 expression 参数的默认表达式。 rettype 函数返回值的数据类型。 如果存在OUT或IN OUT参数,可以省略RETURNS子句。如果存在,该子句必须和输出参数所表示的结果类型一致:如果有多个输出参数,则为RECORD,否则与单个输出参数的类型相同。 SETOF修饰词表示该函数将返回一个集合,而不是单独一项。 column_name 字段名称。 column_type 字段类型。 definition 一个定义函数的字符串常量,含义取决于语言。它可以是一个内部函数名称、一个指向某个目标文件的路径、一个SQL查询、一个过程语言文本。 LANGUAGE lang_name 用以实现函数的语言的名称。可以是SQL,C,internal,或者是用户定义的过程语言名称。为了保证向下兼容,该名称可以用单引号(包围)。若采用单引号,则引号内必须为大写。 WINDOW 表示该函数是窗口函数,通常只用于C语言编写的函数。替换函数定义时不能改变WINDOW属性。 自定义窗口函数只支持LANGUAGE是internal,并且引用的内部函数必须是窗口函数。 IMMUTABLE 表示该函数在给出同样的参数值时总是返回同样的结果。 STABLE 表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。 VOLATILE 表示该函数值可以在一次表扫描内改变,因此不会做任何优化。 SHIPPABLE NOT SHIPPABLE 表示该函数是否可以下推到DN上执行。 对于IMMUTABLE类型的函数,函数始终可以下推到DN上执行。 对于STABLE/VOLATILE类型的函数,仅当函数的属性是SHIPPABLE的时候,函数可以下推到DN执行。 对于指定了SHIPPABLE/IMMUABLE的函数或者存储过程,其不能包含EXCEPTION或调用含有EXCEPTION的函数或者存储过程。 PACKAGE 表示该函数是否支持重载。 不允许package函数和非package函数重载或者替换。 package函数不支持VARIADIC类型的参数。 不允许修改函数的package属性。 LEAKPROOF 指出该函数的参数只包括返回值。LEAKPROOF只能由系统管理员设置。 CALLED ON NULL INPUT 表明该函数的某些参数是NULL的时候可以按照正常的方式调用。该参数可以省略。 RETURNS NULL ON NULL INPUT STRICT STRICT用于指定如果函数的某个参数是NULL,此函数总是返回NULL。如果声明了这个参数,当有NULL值参数时该函数不会被执行;而只是自动返回一个NULL结果。 RETURNS NULL ON NULL INPUT和STRICT的功能相同。 EXTERNAL 目的是和SQL兼容,是可选的,这个特性适合于所有函数,而不仅是外部函数。 SECURITY INVOKER AUTHID CURRENT_USER 表明该函数将带着调用它的用户的权限执行。该参数可以省略。 SECURITY INVOKER和AUTHID CURRENT_USER的功能相同。 SECURITY DEFINER AUTHID DEFINER 声明该函数将以创建它的用户的权限执行。 AUTHID DEFINER和SECURITY DEFINER的功能相同。 FENCED NOT FENCED 该参数用于声明函数是在保护模式还是非保护模式下执行。如果函数声明为NOT FENCED模式,则函数的执行在CN或者DN进程中进行。如果函数声明为FENCED模式,则函数在新fork的进程执行,这样函数的异常不会影响CN或者DN进程。 FENCED/NOT FENCED模式的选择: 正在开发或者调试的Function使用FENCED模式。开发测试完成,使用NOT FENCED模式执行,减少fork进程以及通信的开销。 复杂的操作系统操作,例:打开文件,信号处理,线程处理等操作,使用FENCED模式。否则可能影响GaussDB数据库的执行。 用户自定义C函数,如果不指定该参数,默认为FENCED。 用户自定义PL/Java函数,如果不指定该参数,默认为FENCED, 且不支持指定为NOT FENCED执行模式。 用户自定义PL/pgSQL函数,如果不指定该参数,默认为NOT FENCED,且不支持指定为FENCED执行模式。 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的值。 obj_file, link_symbol 适用于C语言函数,字符串obj_file指定了动态库的绝对路径;link_symbol指定了该函数的链接符号,也就是该函数在C代码中的函数名称。 plsql_body PL/SQL存储过程体。 当在函数体中创建用户时,日志中会记录密码的明文。因此不建议用户在函数体中创建用户。
  • 示例 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 --定义函数为SQL查询。 postgres=# CREATE FUNCTION func_add_sql(integer, integer) RETURNS integer AS 'select $1 + $2;' LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT; --利用参数名用 PL/pgSQL 自增一个整数。 postgres=# CREATE OR REPLACE FUNCTION func_increment_plsql(i integer) RETURNS integer AS $$ BEGIN RETURN i + 1; END; $$ LANGUAGE plpgsql; --返回RECORD类型 CREATE OR REPLACE FUNCTION compute(i int, out result_1 bigint, out result_2 bigint) returns SETOF RECORD as $$ begin result_1 = i + 1; result_2 = i * 10; return next; end; $$language plpgsql; --返回一个包含多个输出参数的记录。 postgres=# CREATE FUNCTION func_dup_sql(in int, out f1 int, out f2 text) AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$ LANGUAGE SQL; postgres=# SELECT * FROM func_dup_sql(42); --计算两个整数的和,并返回结果。若果输入为null,则返回null。 postgres=# CREATE FUNCTION func_add_sql2(num1 integer, num2 integer) RETURN integer AS BEGIN RETURN num1 + num2; END; / --创建package属性的重载函数 postgres=# create or replace function package_func_overload(col int, col2 int) return integer package as declare col_type text; begin col := 122; dbe_output.print_line('two int parameters ' || col2); return 0; end; / postgres=# create or replace function package_func_overload(col int, col2 smallint) return integer package as declare col_type text; begin col := 122; dbe_output.print_line('two smallint parameters ' || col2); return 0; end; / --修改函数add的执行规则为IMMUTABLE,即参数不变时返回相同结果。 postgres=# ALTER FUNCTION func_add_sql2(INTEGER, INTEGER) IMMUTABLE; --将函数add的名称修改为add_two_number。 postgres=# ALTER FUNCTION func_add_sql2(INTEGER, INTEGER) RENAME TO add_two_number; --将函数add的属者改为omm。 postgres=# ALTER FUNCTION add_two_number(INTEGER, INTEGER) OWNER TO omm; --删除函数。 postgres=# DROP FUNCTION add_two_number; postgres=# DROP FUNCTION func_increment_sql; postgres=# DROP FUNCTION func_dup_sql; postgres=# DROP FUNCTION func_increment_plsql; postgres=# DROP FUNCTION func_add_sql;
  • 注意事项 如果创建函数时参数或返回值带有精度,不进行精度检测。 创建函数时,函数定义中对表对象的操作建议都显式指定模式,否则可能会导致函数执行异常。 在创建函数时,函数内部通过SET语句设置current_schema和search_path无效。执行完函数search_path和current_schema与执行函数前的search_path和current_schema保持一致。 如果函数参数中带有出参,SELECT调用函数必须缺省出参,CALL调用函数必须指定出参,对于调用重载的带有PACKAGE属性的函数,CALL调用函数可以缺省出参,具体信息参见CALL的示例。 兼容Postgresql风格的函数或者带有PACKAGE属性的函数支持重载。在指定REPLACE的时候,如果参数个数、类型、返回值有变化,不会替换原有函数,而是会建立新的函数。 SELECT调用可以指定不同参数来进行同名函数调用。语法CALL不支持调用不带有PACKAGE属性的同名函数。 在创建function时,不能在avg函数外面嵌套其他agg函数,或者其他系统函数。 在非逻辑集群模式下,暂不支持将返回值、参数以及变量设置为建在非系统默认安装Node Group的表,sql function内部语句暂不支持对建在非系统默认安装Node Group的表操作。 在逻辑集群模式下,如果函数返回值和参数是用户表类型,所有涉及表都必须在同一逻辑集群内;如果函数体内部涉及对多个逻辑集群表操作,函数定义时不能为IMMUTABLE和SHIPPABLE类型,以避免函数被下推到DN执行。 在逻辑集群模式下,函数参数、返回值不能用%type引用表字段类型,否则会导致函数创建失败。 新创建的函数默认会给PUBLIC授予执行权限(详见GRANT)。用户可以选择收回PUBLIC默认执行权限,然后根据需要将执行权限授予其他用户,为了避免出现新函数能被所有人访问的时间窗口,应在一个事务中创建函数并且设置函数执行权限。 函数定义时如果指定为IMMUTABLE和SHIPPABLE类型,应该尽量避免函数中存在INSERT,UPDATE,DELETE,MERGE和DDL操作,因为上述操作应该由CN判断对应的执行节点,否则执行结果可能产生错误。 在函数内部调用其它无参数的函数时,可以省略括号,直接使用函数名进行调用。
  • 语法格式 兼容PostgreSQL风格的创建自定义函数语法。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 CREATE [ OR REPLACE ] FUNCTION function_name ( [ { argname [ argmode ] argtype [ { DEFAULT | := | = } expression ]} [, ...] ] ) [ RETURNS rettype [ DETERMINISTIC ] | RETURNS TABLE ( { column_name column_type } [, ...] )] LANGUAGE lang_name [ {IMMUTABLE | STABLE | VOLATILE } | {SHIPPABLE | NOT SHIPPABLE} | WINDOW | [ NOT ] LEAKPROOF | {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT } | {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER} | {fenced | not fenced} | {PACKAGE} | COST execution_cost | ROWS result_rows | SET configuration_parameter { {TO | =} value | FROM CURRENT }} ][...] { AS 'definition' | AS 'obj_file', 'link_symbol' } 兼容Oracle风格的创建自定义函数的语法。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 CREATE [ OR REPLACE ] FUNCTION function_name ( [ { argname [ argmode ] argtype [ { DEFAULT | := | = } expression ] } [, ...] ] ) RETURN rettype [ DETERMINISTIC ] [ {IMMUTABLE | STABLE | VOLATILE } | {SHIPPABLE | NOT SHIPPABLE} | {PACKAGE} | {FENCED | NOT FENCED} | [ NOT ] LEAKPROOF | {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT } | {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER } | COST execution_cost | ROWS result_rows | SET configuration_parameter { {TO | =} value | FROM CURRENT ][...] { IS | AS } plsql_body /
  • 注意事项 只有数据库所有者或者被授予了数据库DROP权限的用户有权限执行DROP DATABASE命令,系统管理员默认拥有此权限。 不能对系统默认安装的三个数据库(POSTGRES、TEMPLATE0和TEMPLATE1)执行删除操作,系统做了保护。如果想查看当前服务中有哪几个数据库,可以用gsql的\l命令查看。 如果有用户正在与要删除的数据库连接,则删除操作失败。如果要查看当前存在哪些数据库连接,可以通过视图dv_sessions查看。 不能在事务块中执行DROP DATABASE命令。 确定删除数据库前需要执行“CLEAN CONNECTION TO ALL FORCE FOR DATABASE XXXX;”命令,用于强制停止当前已有的用户连接及后台线程,防止因为有后台线程未完全退出而导致的删库失败问题。此处需要注意,强制停止后台线程可能导致当前数据库数据一致性问题,此命令仅在确定删库阶段执行。 如果执行DROP DATABASE失败,事务回滚,需要再次执行一次DROP DATABASE IF EXISTS。 DROP DATABASE一旦执行将无法撤销,请谨慎使用。
  • 执行批处理 用一条预处理语句处理多条相似的数据,数据库只创建一次执行计划,节省了语句的编译和优化时间。可以按如下步骤执行: 调用Connection的prepareStatement方法创建预编译语句对象。 1 2 3 4 5 6 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全; // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); Connection conn = DriverManager.getConnection("url",userName,password); PreparedStatement pstmt = conn.prepareStatement("INSERT INTO customer_t1 VALUES (?)"); 针对每条数据都要调用setShort设置参数,以及调用addBatch确认该条设置完毕。 1 2 pstmt.setShort(1, (short)2); pstmt.addBatch(); 调用PreparedStatement的executeBatch方法执行批处理。 1 int[] rowcount = pstmt.executeBatch(); 调用PreparedStatement的close方法关闭预编译语句对象。 1 pstmt.close(); 在实际的批处理过程中,通常不终止批处理程序的执行,否则会降低数据库的性能。因此在批处理程序时,应该关闭自动提交功能,每几行提交一次。关闭自动提交功能的语句为: conn.setAutoCommit(false);
  • 执行普通SQL语句 应用程序通过执行SQL语句来操作数据库的数据(不用传递参数的语句),需要按以下步骤执行: 调用Connection的createStatement方法创建语句对象。 1 2 3 4 5 6 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全; // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); Connection conn = DriverManager.getConnection("url",userName,password); Statement stmt = conn.createStatement(); 调用Statement的executeUpdate方法执行SQL语句。 1 int rc = stmt.executeUpdate("CREATE TABLE customer_t1(c_customer_sk INTEGER, c_customer_name VARCHAR(32));"); 数据库中收到的一次执行请求(不在事务块中),如果含有多条语句,将会被打包成一个事务,事务块中不支持vacuum操作。如果其中有一个语句失败,那么整个请求都将会被回滚。 关闭语句对象。 1 stmt.close();
  • 执行预编译SQL语句 预编译语句是只编译和优化一次,然后可以通过设置不同的参数值多次使用。由于已经预先编译好,后续使用会减少执行时间。因此,如果多次执行一条语句,请选择使用预编译语句。可以按以下步骤执行: 调用Connection的prepareStatement方法创建预编译语句对象。 1 PreparedStatement pstmt = con.prepareStatement("UPDATE customer_t1 SET c_customer_name = ? WHERE c_customer_sk = 1"); 调用PreparedStatement的setShort设置参数。 1 pstmt.setShort(1, (short)2); 调用PreparedStatement的executeUpdate方法执行预编译SQL语句。 1 int rowcount = pstmt.executeUpdate(); 调用PreparedStatement的close方法关闭预编译语句对象。 1 pstmt.close();
  • 调用存储过程 GaussDB支持通过JDBC直接调用事先创建的存储过程,步骤如下: 调用Connection的prepareCall方法创建调用语句对象。 1 2 3 4 5 6 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全; // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); Connection conn = DriverManager.getConnection("url",userName,password); Statement stmt = conn.createStatement(); 调用CallableStatement的setInt方法设置参数。 1 2 3 cstmt.setInt(2, 50); cstmt.setInt(1, 20); cstmt.setInt(3, 90); 调用CallableStatement的registerOutParameter方法注册输出参数。 1 cstmt.registerOutParameter(4, Types.INTEGER); //注册out类型的参数,类型为整型。 调用CallableStatement的execute执行方法调用。 1 cstmt.execute(); 调用CallableStatement的getInt方法获取输出参数。 1 int out = cstmt.getInt(4); //获取out参数 示例: 1 2 3 4 5 6 7 8 9 10 11 12 //在数据库中已创建了如下存储过程,它带有out参数。 create or replace procedure testproc ( psv_in1 in integer, psv_in2 in integer, psv_inout in out integer ) as begin psv_inout := psv_in1 + psv_in2 + psv_inout; end; / 调用CallableStatement的close方法关闭调用语句。 1 cstmt.close(); 很多的数据库类如Connection、Statement和ResultSet都有close()方法,在使用完对象后应把它们关闭。要注意的是,Connection的关闭将间接关闭所有与它关联的Statement,Statement的关闭间接关闭了ResultSet。 一些JDBC驱动程序还提供命名参数的方法来设置参数。命名参数的方法允许根据名称而不是顺序来设置参数,若参数有默认值,则可以不用指定参数值就可以使用此参数的默认值。即使存储过程中参数的顺序发生了变更,也不必修改应用程序。目前GaussDB数据库的JDBC驱动程序不支持此方法。 GaussDB数据库不支持带有输出参数的函数,也不支持存储过程和函数参数默认值。 当游标作为存储过程的返回值时,如果使用JDBC调用该存储过程,返回的游标将不可用。 存储过程不能和普通SQL在同一条语句中执行。
  • 示例 Synonym词典可用于解决语言学相关问题,例如,为避免使单词"Paris"变成"pari",可在Synonym词典文件中定义一行"Paris paris",并将该词典放置在预定义的english_stem词典之前。 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 postgres=# SELECT * FROM ts_debug('english', 'Paris'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-------+----------------+--------------+--------- asciiword | Word, all ASCII | Paris | {english_stem} | english_stem | {pari} (1 row) postgres=# CREATE TEXT SEARCH DICTIONARY my_synonym ( TEMPLATE = synonym, SYNONYMS = my_synonyms, FILEPATH = 'file:///home/dicts/' ); postgres=# ALTER TEXT SEARCH CONFIGURATION english ALTER MAPPING FOR asciiword WITH my_synonym, english_stem; postgres=# SELECT * FROM ts_debug('english', 'Paris'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-------+---------------------------+------------+--------- asciiword | Word, all ASCII | Paris | {my_synonym,english_stem} | my_synonym | {paris} (1 row) postgres=# SELECT * FROM ts_debug('english', 'paris'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-------+---------------------------+------------+--------- asciiword | Word, all ASCII | Paris | {my_synonym,english_stem} | my_synonym | {paris} (1 row) postgres=# ALTER TEXT SEARCH DICTIONARY my_synonym ( CASESENSITIVE=true); postgres=# SELECT * FROM ts_debug('english', 'Paris'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-------+---------------------------+------------+--------- asciiword | Word, all ASCII | Paris | {my_synonym,english_stem} | my_synonym | {paris} (1 row) postgres=# SELECT * FROM ts_debug('english', 'paris'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-------+---------------------------+------------+--------- asciiword | Word, all ASCII | Paris | {my_synonym,english_stem} | my_synonym | {pari} (1 row) 其中,同义词词典文件全名为my_synonyms.syn,所在目录为当前连接CN节点的/home/dicts/下。关于创建词典的语法和更多参数,请参见CREATE TEXT SEARCH DICTIONARY。 星号(*)可用于词典文件中的同义词结尾,表示该同义词是一个前缀。在to_tsvector()中该星号将被忽略,但在to_tsquery()中会匹配该前缀并对应输出结果(参照处理查询一节)。 假设词典文件synonym_sample.syn内容如下: 1 2 3 4 5 postgres pgsql postgresql pgsql postgre pgsql gogle googl indices index* 创建并使用词典: 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 postgres=# CREATE TEXT SEARCH DICTIONARY syn ( TEMPLATE = synonym, SYNONYMS = synonym_sample ); postgres=# SELECT ts_lexize('syn','indices'); ts_lexize ----------- {index} (1 row) postgres=# CREATE TEXT SEARCH CONFIGURATION tst (copy=simple); postgres=# ALTER TEXT SEARCH CONFIGURATION tst ALTER MAPPING FOR asciiword WITH syn; postgres=# SELECT to_tsvector('tst','indices'); to_tsvector ------------- 'index':1 (1 row) postgres=# SELECT to_tsquery('tst','indices'); to_tsquery ------------ 'index':* (1 row) postgres=# SELECT 'indexes are very useful'::tsvector; tsvector --------------------------------- 'are' 'indexes' 'useful' 'very' (1 row) postgres=# SELECT 'indexes are very useful'::tsvector @@ to_tsquery('tst','indices'); ?column? ---------- t (1 row)
共100000条