华为云用户手册

  • 参数说明 name 已安装扩展的名称。 new_version 扩展的新版本。可以通过被标识符和字面字符重写。如果不指定的扩展的新版本,ALTER EXTENSION UPDATE会更新到扩展的控制文件中显示的默认版本。 new_schema 扩展的新模式。 object_name agg_name function_name operator_name 从扩展里被添加或移除的对象的名称。包含表、聚合 、域、外链表、函数、操作符、操作符类、操作符族、序列、文本搜索对象、类型和能被模式合格的视图的名称。 agg_type 在聚合函数操作上的一个输入数据类型,去引用一个零参数聚合函数,写 * 代替这些输入数据类型列表。 source_type 强制转换的源数据类型的名称。 target_type 强制转换的目标数据类型的名称。 argmode 这个函数参数的模型:IN、OUT、INOUT或者 VARIADIC。如果省略的话,默认值为IN。ALTER EXTENSION 不关心OUT参数,因为确认函数的一致性只需要输入参数,因此列出 IN、INOUT和 VARIADIC参数就足够了。 argname 函数参数的名称。ALTER EXTENSION不关心参数名称,确认函数的一致性只需要参数数据类型。 argtype 函数参数的数据类型(可以有模式修饰)。 left_type right_type 操作符参数的数据类型(可以有模式修饰),为前缀或后缀运算符的丢失参数写NONE。
  • 注意事项 UPDATE 更新这个扩展到一个新的版本。这个扩展必须满足一个适用的更新脚本(或者一系列脚本), 才能修改当前安装版本到一个要求的版本。 SET SCHEMA 移动扩展对象到另一个模式。这个扩展必须relocatable才能使命令成功。 ADD member_object 添加一个已存在对象到扩展主要适用于扩展更新脚本上。这个对象接着会被视为扩展的成员, 该对象只能通过取消扩展来取消 。 DROP member_object 从扩展上移除一个成员对象。主要适用于扩展更新脚本上,这个对象没有被取消,只是从扩展里被移除。 您必须拥有扩展来使用 ALTER EXTENSION。这个 ADD/DROP 方式要求 添加/删除对象的所有权。 要使用该功能,需要设置support_extended_features为true。
  • 语法格式 修改扩展的版本。 ALTER EXTENSION name UPDATE [ TO new_version ]; 修改扩展的模式。 ALTER EXTENSION name SET SCHEMA new_schema; 添加或删除扩展的成员对象。 ALTER EXTENSION name { ADD | DROP } member_object; 其中成员对象member_object写法为: {AGGREGATE agg_name (agg_type [, ...] ) | CAST (source_type AS target_type) | COLLATION object_name | CONVERSION object_name | DOMAIN object_name | EVENT TRIGGER object_name | FOREIGN DATA WRAPPER object_name | FOREIGN TABLE object_name | FUNCTION function_name ( [ [ argname ] [ argmode ] argtype [, ...] ] ) | MATERIALIZED VIEW object_name | OPERATOR operator_name (left_type, right_type) | OPERATOR CLASS object_name USING index_method | OPERATOR FAMILY object_name USING index_method | [ PROCEDURAL ] LANGUAGE object_name | SCHEMA object_name | SEQUENCE object_name | SERVER object_name | TABLE object_name | TEXT SEARCH CONFIGURATION object_name | TEXT SEARCH DICTIONARY object_name | TEXT SEARCH PARSER object_name | TEXT SEARCH TEMPLATE object_name | TYPE object_name | VIEW object_name}
  • 示例 更新plpgsql扩展到版本 2.0: gaussdb=# ALTER EXTENSION plpgsql UPDATE TO '2.0'; 更新plpgsql扩展的模式为utils: --创建SCHEMA。 gaussdb=# CREATE SCHEMA utils; --更新 plpgsql 扩展的模式为utils。 gaussdb=# ALTER EXTENSION plpgsql SET SCHEMA utils; --删除SCHEMA。 gaussdb=# DROP SCHEMA utils; 添加一个已存在的函数给 plpgsql 扩展: gaussdb=# ALTER EXTENSION plpgsql ADD FUNCTION populate_record(anyelement, plpgsql);
  • GS_PLAN_TRACE GS_PLAN_TRACE系统表是用于存储plan trace的系统表,主要记录的是DML语句生成计划过程的详情,只有初始用户才具有对该系统表进行写的权限,只要用户具备sysadmin权限就可以对该系统表进行读操作。 表1 GS_PLAN_TRACE字段 名称 类型 描述 query_id text 当前请求的唯一id。 query text 当前请求的sql语句,该字段大小不会超过系统参数track_activity_query_size指定的大小。 unique_sql_id bigint 当前请求sql的唯一id。 plan text 当前请求sql对应的查询计划文本,该字段大小不会超过10K。 plan_trace text 当前请求sql对应的查询计划生成过程的明细,该字段大小不会超过300M。 owner oid 当前请求sql用户的oid。 modifydate timestamp with time zone 当前plan trace的更新时间(当前指的是 plan trace创建时间)。 父主题: 其他系统表
  • DBE_SQL_UTIL.create_hint_sql_patch create_hint_sql_patch是用于创建调优SQL PATCH的接口函数,返回执行是否成功,如表1所示。本函数是原函数的重载函数,支持通过parent_unique_sql_id值限制hint patch的生效范围。 限制:仅初始用户、sysadmin、opradmin和monadmin用户有权限调用。 表1 DBE_SQL_UTIL.create_hint_sql_patch重载函数入参和返回值列表 参数 类型 描述 patch_name IN name PATCH名称。 unique_sql_id IN bigint 查询全局唯一id。 parent_unique_sql_id IN bigint 标识外层SQL语句的全局唯一ID,值为0时表示限制存储过程外语句SQL PATCH生效;非0值表示限制特定存储过程生效。 hint_string IN text Hint文本。 description IN text PATCH的备注,默认值为NULL。 enabled IN bool PATCH是否生效,默认值为true。 result OUT bool 执行是否成功。 父主题: DBE_SQL_UTIL Schema
  • 示例 --创建SCHEMA。 gaussdb=# CREATE SCHEMA tpcds; --创建一个新表。 gaussdb=# CREATE TABLE tpcds.table1(a int); --开启事务。 gaussdb=# START TRANSACTION; --插入数据。 gaussdb=# INSERT INTO tpcds.table1 VALUES (3); --建立保存点。 gaussdb=# SAVEPOINT my_savepoint; --插入数据。 gaussdb=# INSERT INTO tpcds.table1 VALUES (4); --删除保存点。 gaussdb=# RELEASE SAVEPOINT my_savepoint; --查询表的内容,会同时看到3和4。 gaussdb=# SELECT * FROM tpcds.table1; a --- 3 4 (2 rows) --提交事务。 gaussdb=# COMMIT; --再次查询表的内容,会同时看到3和4。 gaussdb=# SELECT * FROM tpcds.table1; a --- 3 4 (2 rows) --删除表。 gaussdb=# DROP TABLE tpcds.table1; --删除SCHEMA。 gaussdb=# DROP SCHEMA tpcds CASCADE;
  • 功能描述 RELEASE SAVEPOINT语句用于删除一个当前事务先前定义的保存点。 把一个保存点删除就令其无法作为回滚点使用,除此之外它没有其它用户可见的行为。它并不能撤销在保存点建立起来之后执行的命令的影响,要撤销那些命令可以使用ROLLBACK TO SAVEPOINT 。当不再需要的时候,删除一个保存点可以令系统在事务结束之前提前回收一些资源。 RELEASE SAVEPOINT也删除所有在指定的保存点建立之后的所有保存点。
  • 语法格式 CREATE AGGREGATE name ( input_data_type [ , ... ] ) ( SFUNC = sfunc, -- SFUNC1 = sfunc, STYPE = state_data_type -- STYPE1 = state_data_type, [ , FINALFUNC = ffunc ] [ , INITCOND = initial_condition ] -- [ , INITCOND1 = initial_condition ] [ , SORTOP = sort_operator ] [ , CFUNC = collection_func ] [ , INITCOLLECT = initial_collection_condition ] [ , IFUNC = init_func ] [ , SHIPPABLE = is_shippable ] ); or the old syntax CREATE AGGREGATE name ( BASETYPE = base_type, SFUNC = sfunc, -- SFUNC1 = sfunc, STYPE = state_data_type -- STYPE1 = state_data_type, [ , FINALFUNC = ffunc ] [ , INITCOND = initial_condition ] -- [ , INITCOND1 = initial_condition ] [ , SORTOP = sort_operator ] [ , CFUNC = collection_func ] [ , INITCOLLECT = initial_collection_condition ] [ , IFUNC = init_func ] );
  • 示例 --创建自定义函数。 gaussdb=# CREATE OR REPLACE FUNCTION int_add(int,int) returns int as $BODY$ declare begin return $1 + $2; end; $BODY$ language plpgsql; --创建聚集函数。 gaussdb=# CREATE AGGREGATE sum_add(int) ( sfunc = int_add, stype = int, initcond = '0' ); --创建测试表和添加数据。 gaussdb=# CREATE TABLE test_sum(a int,b int,c int); gaussdb=# INSERT INTO test_sum VALUES(1,2),(2,3),(3,4),(4,5); --执行聚集函数。 gaussdb=# SELECT sum_add(a) FROM test_sum; sum_add ----------- 10 --删除聚集函数。 gaussdb=# DROP AGGREGATE sum_add(int); --删除自定义函数。 gaussdb=# DROP FUNCTION int_add(int,int); --删除测试表。 gaussdb=# DROP TABLE test_sum;
  • 参数说明 name 要创建的聚合函数名(可以有模式修饰) 。 input_data_type 该聚合函数要处理的输入数据类型。要创建一个零参数聚合函数,可以使用*代替输入数据类型列表。(count(*)就是这种聚合函数的一个实例。) base_type 在CREATE AGGREGATE语法中,输入数据类型是通过basetype参数指定的,而不是写在聚合的名称之后。需要注意的是这种以前语法仅允许一个输入参数。要创建一个零参数聚合函数,可以将basetype指定为"ANY"(而不是*)。 sfunc 将在每一个输入行上调用的状态转换函数的名称。 对于有N个参数的聚合函数,sfunc必须有 +1 个参数,其中的第一个参数类型为state_data_type,其余的匹配已声明的输入数据类型。 函数必须返回一个state_data_type类型的值。 这个函数接受当前状态值和当前输入数据,并返回下个状态值。A数据库的转换函数默认行为为strict,即会跳过NULL输入值。 GaussDB 需要用户自行定义转换函数strict属性。 state_data_type 聚合的状态值的数据类型。 ffunc 在转换完所有输入行后调用的最终处理函数,它计算聚合的结果。 此函数必须接受一个类型为state_data_type的参数。 聚合的输出数据类型被定义为此函数的返回类型。 如果没有声明ffunc则使用聚合结果的状态值作为聚合的结果,且输出类型为state_data_type。 initial_condition 状态值的初始设置(值)。 它必须是一个state_data_type类型可以接受的文本常量值。 如果没有声明,状态值初始为null 。 sort_operator 用于MIN或MAX类型聚合的排序操作符。 这个只是一个操作符名 (可以有模式修饰)。这个操作符假设接受和聚合一样的输入数据类型。 collection_func 目前该参数在集中式下不生效。 initial_collection_condition 收集函数状态值的初始设置(值)。 它必须是一个state_data_type类型可以接受的文本常量值。 如果没有声明,状态值初始为null 。 init_func sfunc状态值的初始设置函数。 它不能返回null值,必须返回state_data_type类型并且没有入参。如果同时设置init_func和initial_condition,init_func的返回值将会优先作为初始状态值。 is_shippable 标记该聚集函数是否能够下推执行,仅可以取值true或者false。目前该参数不影响系统内置聚集函数的下推行为,仅影响用户自定义聚集函数的行为,默认值为false。目前该参数在集中式下不生效。
  • MY_COLL_TYPES MY_COLL_TYPES视图显示当前用户创建的集合类型信息。默认所有用户都可以访问。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 MY_COLL_TYPES字段 名称 类型 描述 owner character varying(128) 集合的所有者。 type_name character varying(128) 集合的名称。 coll_type character varying(128) 集合的描述。 upper_bound numeric 暂不支持,值为NULL。 elem_type_mod character varying(7) 暂不支持,值为NULL。 elem_type_owner character varying(128) 集合基于的元素类型的所有者。该值主要用于用户定义的类型。 elem_type_name character varying(128) 集合所依据的数据类型或用户定义类型的名称。 length numeric 暂不支持,值为NULL。 precision numeric 暂不支持,值为NULL。 scale numeric 暂不支持,值为NULL。 character_set_name character varying(44) 暂不支持,值为NULL。 elem_storage character varying(7) 暂不支持,值为NULL。 nulls_stored character varying(3) 暂不支持,值为NULL。 char_used character varying(1) 暂不支持,值为NULL。 父主题: 其他系统视图
  • STAT_DATABASE 显示数据库当前节点的统计信息,如表1所示。 表1 STAT_DATABASE字段 名称 类型 描述 datid oid 数据库的OID。 datname name 该数据库的名称。 numbackends integer 当前连接到该数据库的后端数。 xact_commit bigint 此数据库中已经提交的事务数。 xact_rollback bigint 此数据库中已经回滚的事务数。 blks_read bigint 在这个数据库中读取的磁盘块的数量。 blks_hit bigint 高速缓存中已经命中的磁盘块的次数,这种情况下不需要从磁盘读取(高速缓存只包括缓冲区高速缓存,不包括操作系统的文件系统缓存)。 tup_returned bigint 该数据库中顺序扫描获取的活跃行数和索引扫描返回的索引行数。 tup_fetched bigint 当前数据库通过索引返回的行数。 tup_inserted bigint 插入的行数。 tup_updated bigint 更新的行数。 tup_deleted bigint 删除的行数。 conflicts bigint 由于与数据库回放发生冲突而取消的查询数量(冲突仅在备机上发生)。请参见STAT_DATABASE_CONFLI CTS 获取更多信息。 temp_files bigint 该数据库中查询语句创建的临时文件数量。统计所有临时文件,不受GUC参数log_temp_files设置值影响。 temp_bytes bigint 该数据库中查询语句写入临时文件的数据总量。统计所有临时文件,不受GUC参数log_temp_files设置值影响。 deadlocks bigint 在该数据库中检索的死锁数。 blk_read_time double precision 通过数据库后端读取数据文件块花费的时间,以毫秒计算。 blk_write_time double precision 通过数据库后端写入数据文件块花费的时间,以毫秒计算。 stats_reset timestamp with time zone 重置当前状态统计的时间。 父主题: Object
  • WLM_CLUSTER_RESOURCE_RUNTIME WLM_CLUSTER_RESOURCE_RUNTIME视图显示的是所有DN资源的汇总信息字段,如表1所示。 表1 WLM_CLUSTER_RESOURCE_RUNTIME字段 名称 类型 描述 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最小I/O使用率。 max_io_util integer DN最大I/O使用率。 used_mem_rate integer 物理节点最大内存使用率。 父主题: Workload Manager
  • DB_CONSTRAINTS DB_CONSTRAINTS视图显示当前用户可访问的约束的信息。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 DB_CONSTRAINTS字段 名称 类型 描述 constraint_name character varying(64) 约束名。 constraint_type text 约束类型: c表示检查约束。 f表示外键约束。 p表示主键约束。 u表示唯一约束。 table_name character varying(64) 约束相关的表名。 index_owner character varying(64) 约束相关的索引的所有者(只针对唯一约束和主键约束)。 index_name character varying(64) 约束相关的索引名(只针对唯一约束和主键约束)。 owner character varying(64) 约束的创建者。 父主题: 其他系统视图
  • 关闭数据库连接 在使用数据库连接完成相应的数据操作后,需要关闭数据库连接。 关闭数据库连接可以直接调用close方法。 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。 // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); Connection conn = DriverManager.getConnection(sourceURL, userName, password); conn.close(); 父主题: 基于JDBC开发
  • 矩形 矩形是用一对对角点来表示的。用下面的语法描述box的值: ( ( x1 , y1 ) , ( x2 , y2 ) ) ( x1 , y1 ) , ( x2 , y2 ) x1 , y1 , x2 , y2 (x1,y1)和(x2,y2)表示矩形的一对对角点,点的数值类型为float8类型。 矩形的输出使用第二种语法。 任何两个对角都可以出现在输入中,但按照这种顺序,右上角和左下角的值会被重新排序以存储。 示例: gaussdb=# SELECT box(point(1.1, 2.2), point(3.3, 4.4)); box --------------------- (3.3,4.4),(1.1,2.2) (1 row)
  • 路径 路径由一系列连接的点组成。路径可能是开放的,即列表中第一个点和最后一个点没有连接。路径也可能是闭合的,即列表中第一个点依次连接到最后一个点。 用下面的语法描述path的数值: [ ( x1 , y1 ) , ... , ( xn , yn ) ] ( ( x1 , y1 ) , ... , ( xn , yn ) ) ( x1 , y1 ) , ... , ( xn , yn ) ( x1 , y1 , ... , xn , yn ) x1 , y1 , ... , xn , yn 点表示组成路径的线段的端点,点的数值类型为float8类型。方括号([])表明一个开放的路径,圆括号(())表明一个闭合的路径。当最外层的括号被省略,如在第三至第五语法,会假定一个封闭的路径。 路径的输出使用第一种或第二种语法输出。 示例: gaussdb=# SELECT path(polygon '((0,0),(1,1),(2,0))'); path --------------------- ((0,0),(1,1),(2,0)) (1 row)
  • 多边形 多边形由一系列点代表(多边形的顶点)。多边形可以认为与闭合路径一样,但是存储方式不一样而且有自己的一套支持函数。 用下面的语法描述polygon的数值: ( ( x1 , y1 ) , ... , ( xn , yn ) ) ( x1 , y1 ) , ... , ( xn , yn ) ( x1 , y1 , ... , xn , yn ) x1 , y1 , ... , xn , yn 点表示多边形的顶点,点的数值类型为float8类型。 多边形输出使用第一种语法。 示例: gaussdb=# SELECT polygon(box '((0,0),(1,1))'); polygon --------------------------- ((0,0),(0,1),(1,1),(1,0)) (1 row)
  • 线段 线段(lseg)是用一对点来代表的。用下面的语法描述lseg的数值: [ ( x1 , y1 ) , ( x2 , y2 ) ] ( ( x1 , y1 ) , ( x2 , y2 ) ) ( x1 , y1 ) , ( x2 , y2 ) x1 , y1 , x2 , y2 (x1,y1)和(x2,y2)表示线段的端点,点的数值类型为float8类型。 线段输出使用第一种语法。 示例: gaussdb=# SELECT lseg(point(1.1, 2.2), point(3.3, 4.4)); lseg ----------------------- [(1.1,2.2),(3.3,4.4)] (1 row)
  • PG_AUTH_MEMBERS PG_AUTH_MEMBERS系统表存储显示角色之间的成员关系。 表1 PG_AUTH_MEMBERS字段 名称 类型 描述 roleid oid 拥有成员的角色ID。 member oid 属于ROLEID角色的一个成员的角色ID。 grantor oid 赋予此成员关系的角色ID。 admin_option boolean 如果MEMBER可以把ROLEID角色的成员关系赋予其他角色,则为真,不可以则为假。 父主题: 连接和认证
  • POOLER_STATUS POOLER_STATUS视图用于查询本地CN 的pooler中的缓存连接状态,如表1所示。 表1 POOLER_STATUS字段 名称 类型 描述 database text 数据库名称。 user_name text 用户名。 tid bigint 非线程池逻辑下为连接CN的线程id,线程池逻辑下为连接CN的sessionid。 node_oid bigint 连接的实例节点OID。 node_name name 连接的实例节点名称。 in_use boolean 连接是否正被使用: t(true):表示连接正在使用。 f(false):表示连接没有使用。 local_host text 本端IP。 local_port bigint 本端端口号。 remote_host text 连接的节点IP。 node_port bigint 连接的节点端口。 fdsock bigint 端口文件描述符。 remote_pid bigint 对端处于非线程池逻辑下为对端的线程id,对端处于线程池逻辑下为对端的sessionid。 session_params text 会话参数。 used_count bigint 该连接的复用次数。 idx bigint 连接的实例节点逻辑连接id。 streamid bigint 每个逻辑连接对应的流标识id。 父主题: Utility
  • MY_TAB_MODIFICATIONS MY_TAB_MODIFICATIONS视图记录自上次在表上收集统计信息以来当前用户拥有的表的修改信息的统计数据。该视图目前只显示执行了INSERT、DELETE和UPDATE操作的表。所有用户都可以访问该视图。该视图同时存在于PG_CATALOG和SYS Schema下。具体字段信息如表1所示。 表1 MY_TAB_MODIFICATIONS字段 名称 类型 描述 table_name character varying(128) 表的名称。 partition_name character varying(128) 分区的名称。 subpartition_name character varying(128) 子分区的名称。 inserts numeric 自上次收集统计信息以来的大致插入次数。 updates numeric 自上次收集统计信息以来的大致更新次数。 deletes numeric 自上次收集统计信息以来的大致删除次数。 timestamp date 上次修改表的时间。 暂不支持分区表的修改时间,值为NULL。 truncated character varying(3) 暂不支持,值为NULL。 drop_segments numeric 暂不支持,值为NULL。 schema_name character varying(128) 表所属模式名。 父主题: 其他系统视图
  • 原型 int PQsendQueryParams(PGconn* conn, const char* command, int nParams, const Oid* paramTypes, const char* const* paramValues, const int* paramLengths, const int* paramFormats, int resultFormat);
  • PG_TOTAL_USER_RESOURCE_INFO_OID PG_TOTAL_USER_RESOURCE_INFO_OID视图显示所有用户的资源使用情况,需要使用管理员用户进行查询。此视图在GUC参数use_workload_manager为on时才有效。具体字段信息如表1所示。 表1 PG_TOTAL_USER_RESOURCE_INFO_OID字段 名称 类型 描述 userid oid 用户id。 used_memory integer 正在使用的内存大小,单位MB。 total_memory integer 可以使用的内存大小,单位MB。值为0表示未限制最大可用内存,其限制取决于数据库最大可用内存。 used_cpu double precision 正在使用的CPU核数。 total_cpu integer 在该机器节点上,用户关联控制组的CPU核数总和。 used_space bigint 已使用的存储空间大小,单位KB。 total_space bigint 可使用的存储空间大小,单位KB,值为-1表示未限制最大存储空间。 used_temp_space bigint 已使用的临时空间大小,单位KB total_temp_space bigint 可使用的临时空间总大小,单位KB,值为-1表示未限制。 used_spill_space bigint 已使用的下盘空间大小。单位KB。 total_spill_space bigint 可使用的下盘空间总大小,单位KB,值为-1表示未限制。 read_kbytes bigint 读磁盘数据量,单位KB。 write_kbytes bigint 写磁盘数据量,单位KB。 read_counts bigint 读磁盘次数。 write_counts bigint 写磁盘次数。 read_speed double precision 读磁盘速率,单位B/ms。 write_speed double precision 写磁盘速率,单位B/ms。 父主题: 其他系统视图
  • SESSION_MEMORY_DETAIL 统计线程的内存使用情况,以MemoryContext粒度来统计当前节点的内存,如表1所示。 表1 SESSION_MEMORY_DETAIL字段 名称 类型 描述 sessid text 线程启动时间+线程标识。 sesstype text 线程名称。 contextname text 内存上下文名称。 level smallint 内存上下文的重要级别。 parent text 父级内存上下文名称。 totalsize bigint 总申请内存大小(单位:字节)。 freesize bigint 空闲内存大小(单位:字节)。 usedsize bigint 使用内存大小(单位:字节)。 父主题: Session/Thread
  • date_part date_part函数是在传统的Ingres函数的基础上制作的(该函数等效于SQL标准函数extract): date_part('field', source) 这里的field参数必须是一个字符串,而不是一个名称。有效的field与extract一样,详细信息请参见EXTRACT。 示例: 1 2 3 4 5 gaussdb=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 16 (1 row) 1 2 3 4 5 gaussdb=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes'); date_part ----------- 4 (1 row)
  • EXTRACT EXTRACT(field FROM source) extract函数从日期或时间的数值里抽取子域,比如年、小时等。source必须是一个timestamp、time或interval类型的值表达式(类型为date的表达式转换为timestamp,因此也可以用)。field是一个标识符或者字符串,它指定从源数据中抽取的域。extract函数返回类型为double precision的数值。field的取值范围如下所示。 century 世纪。 第一个世纪从0001-01-01 00:00:00 AD开始。这个定义适用于所有使用阳历的国家。没有0世纪,直接从公元前1世纪到公元1世纪。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13'); date_part ----------- 20 (1 row) day 如果source为timestamp,表示月份里的日期(1-31)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 16 (1 row) 如果source为interval,表示天数。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(DAY FROM INTERVAL '40 days 1 minute'); date_part ----------- 40 (1 row) decade 年份除以10。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 200 (1 row) dow 每周的星期几,星期天(0)到星期六(6)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 5 (1 row) doy 一年的第几天(1~365/366)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(DOY FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 47 (1 row) epoch 如果source为timestamp with time zone,表示自1970-01-01 00:00:00-00 UTC以来的秒数(结果可能是负数); 如果source为date和timestamp,表示自1970-01-01 00:00:00-00当地时间以来的秒数; 如果source为interval,表示时间间隔的总秒数。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40.12-08'); date_part -------------- 982384720.12 (1 row) 1 2 3 4 5 gaussdb=# SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours'); date_part ----------- 442800 (1 row) 将epoch值转换为时间戳的方法。 1 2 3 4 5 gaussdb=# SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 982384720.12 * INTERVAL '1 second' AS RESULT; result --------------------------- 2001-02-17 12:38:40.12+08 (1 row) hour 小时域(0-23)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 20 (1 row) isodow 一周的第几天(1-7)。 星期一为1,星期天为7。 除了星期天外,都与dow相同。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(ISODOW FROM TIMESTAMP '2001-02-18 20:38:40'); date_part ----------- 7 (1 row) isoyear 日期中的ISO 8601标准年(不适用于间隔)。 每个带有星期一开始的周中包含1月4日的ISO年,所以在年初的1月或12月下旬的ISO年可能会不同于阳历的年。详细信息请参见后续的week描述。 1 2 3 4 5 6 7 8 9 10 gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01'); date_part ----------- 2005 (1 row) gaussdb=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2006-01-01 00:00:40'); date_part ----------- 52 (1 row) gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02'); date_part ----------- 2006 (1 row) gaussdb=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2006-01-02 00:00:40'); date_part ----------- 1 (1 row) microseconds 秒域(包括小数部分)乘以1,000,000。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MICROSECONDS FROM TIME '17:12:28.5'); date_part ----------- 28500000 (1 row) millennium 千年。 20世纪(19xx年)里面的年份在第二个千年里。第三个千年从2001年1月1日零时开始。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 3 (1 row) milliseconds 秒域(包括小数部分)乘以1000。请注意它包括完整的秒。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5'); date_part ----------- 28500 (1 row) minute 分钟域(0-59)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MINUTE FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 38 (1 row) month 如果source为timestamp,表示一年里的月份数(1-12)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 2 (1 row) 如果source为interval,表示月的数目,然后对12取模(0-11)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months'); date_part ----------- 1 (1 row) quarter 该天所在的该年的季度(1-4)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(QUARTER FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 1 (1 row) second 秒域,包括小数部分(0-59)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(SECOND FROM TIME '17:12:28.5'); date_part ----------- 28.5 (1 row) timezone 与UTC的时区偏移量,单位为秒。正数对应UTC东边的时区,负数对应UTC西边的时区。 timezone_hour 时区偏移量的小时部分。 timezone_minute 时区偏移量的分钟部分。 week 该天在所在的年份里是第几周。ISO 8601定义一年的第一周包含该年的一月四日(ISO-8601 的周从星期一开始)。换句话说,一年的第一个星期四在第一周。 在ISO定义里,一月的头几天可能是前一年的第52或者第53周,十二月的后几天可能是下一年第一周。比如,2006-01-01是2005年的第52周,而2006-01-02是2006年的第1周。建议isoyear字段和week一起使用以得到一致的结果。 1 2 3 4 5 6 7 8 9 10 gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01'); date_part ----------- 2005 (1 row) gaussdb=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2006-01-01 00:00:40'); date_part ----------- 52 (1 row) gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02'); date_part ----------- 2006 (1 row) gaussdb=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2006-01-02 00:00:40'); date_part ----------- 1 (1 row) year 年份域。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 2001 (1 row)
  • 时间日期操作符 时间日期操作符如表1所示。 用户在使用时间和日期操作符时,对应的操作数请使用明确的类型前缀修饰,以确保数据库在解析操作数的时候能够与用户预期一致,不会产生用户非预期的结果。 举例:下面示例没有明确数据类型就会出现异常错误。 1 2 3 4 5 6 7 gaussdb=# SELECT date '2001-10-01' - '7' AS RESULT; ERROR: GAUSS-10416: invalid input syntax for type timestamp: "7" SQLSTATE: 22007 LINE 1: SELECT date '2001-10-01' - '7' AS RESULT; ^ CONTEXT: referenced column: result
  • TIMESTAMPDIFF TIMESTAMPDIFF(unit , timestamp_expr1, timestamp_expr2) 描述:timestampdiff函数计算两个时间之间(timestamp_expr2-timestamp_expr1)的差值,并以unit形式返回结果。等效于timestamp_diff(text, timestamp, timestamp)。 参数:timestamp_expr1、timestamp_expr2为时间类型表达式、text、datetime、date或time等类型。unit表示的是两个日期差的单位。 返回值类型:bigint 该函数仅在MySQL模式数据库中有效。 timestampdiff在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时,调用的函数实际上注册为b_timestampdiff;在MySQL模式数据库中且未开启guc参数时,调用的函数注册为timestamp_diff,可以用“\df b_timestampdiff”等指令查询函数详细入参与返回值。 year 年份。 1 2 3 4 5 gaussdb=# SELECT TIMESTAMPDIFF(YEAR, '2018-01-01', '2020-01-01'); timestamp_diff ---------------- 2 (1 row)
共100000条