华为云用户手册

  • Information Schema 信息模式本身是一个名为information_schema的模式。这个模式自动存在于所有数据库中。信息模式由一组视图构成,它们包含定义在当前数据库中对象的信息。这个模式的拥有者是初始数据库用户,但是所有用户仅有使用权限,没有创建表、函数等对象的权限。 信息模式兼容PG,包括:constraint_table_usage, domain_constraints, domain_udt_usage, domains, enabled_roles, key_column_usage, parameters, referential_constraints, applicable_roles, administrable_role_authorizations, attributes, character_sets, check_constraint_routine_usage, check_constraints, collations, collation_character_set_applicability, column_domain_usage, column_privileges, column_udt_usage, columns, constraint_column_usage, role_column_grants, routine_privileges, role_routine_grants, routines, schemata, sequences, table_constraints, table_privileges, role_table_grants, tables, triggered_update_columns, triggers, udt_privileges, role_udt_grants, usage_privileges, role_usage_grants, user_defined_types, view_column_usage, view_routine_usage, view_table_usage, views, data_type_privileges, element_types, column_options, foreign_data_wrapper_options, foreign_data_wrappers, foreign_server_options, foreign_servers, foreign_table_options, foreign_tables, user_mapping_options, user_mappings, sql_features, sql_implementation_info, sql_languages, sql_packages, sql_parts, sql_sizing, sql_sizing_profiles。 下面章节只显示未在上述描述内的视图信息。 _PG_FOREIGN_DATA_WRAPPERS _PG_FOREIGN_SERVERS _PG_FOREIGN_TABLE_COLUMNS _PG_FOREIGN_TABLES _PG_USER_MAPPINGS INFORMATION_SCHEMA_CATA LOG _NAME 父主题: Schema
  • 语法格式 从一个文件拷贝数据到一个表。 COPY table_name [ ( column_name [, ...] ) ] FROM { 'filename' | STDIN } [ [ USING ] DELIMITERS 'delimiters' ] [ WITHOUT ESCAPING ] [ LOG ERRORS ] [ REJECT LIMIT 'limit' ] [ WITH ( option [, ...] ) ] | copy_option | TRANSFORM ( { column_name [ data_type ] [ AS transform_expr ] } [, ...] ) | FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ]; 语法中的FIXED FORMATTER ( { column_name( offset, length ) } [, ...] )以及 [ copy_option [ ...] ] 的无冲突项可以任意排列组合。 把一个表的数据拷贝到一个文件。 COPY table_name [ ( column_name [, ...] ) ] TO { 'filename' | STDOUT } [ [ USING ] DELIMITERS 'delimiters' ] [ WITHOUT ESCAPING ] [ WITH ( option [, ...] ) ] | copy_option | FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ]; COPY query {(SELECT) | (VALUES)} TO { 'filename' | STDOUT } [ WITHOUT ESCAPING ] [ WITH ( option [, ...] ) ] | copy_option | FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ]; COPY TO语法形式约束如下: (query)与[USING] DELIMITERS不兼容,即若COPY TO的数据来自于一个query的查询结果,那么COPY TO语法不能再指定[USING] DELIMITERS语法子句。 对于FIXED FORMATTER语法后面跟随的copy_option是以空格进行分隔的。 copy_option是指COPY原生的参数形式,而option是兼容外表导入的参数形式。 语法中的FIXED FORMATTER ( { column_name( offset, length ) } [, ...] )以及 [ copy_option [ ...] ] 的无冲突项可以任意排列组合。 其中可选参数option子句语法为: FORMAT 'format_name' | OIDS [ boolean ] | DELIMITER 'delimiter_character' | NULL 'null_string' | HEADER [ boolean ] | USEEOF [ boolean ] | FILEHEADER 'header_file_string' | FREEZE [ boolean ] | QUOTE 'quote_character' | ESCAPE 'escape_character' | EOL 'newline_character' | NOESCAPING [ boolean ] | FORCE_QUOTE { ( column_name [, ...] ) | * } | FORCE_NOT_NULL ( column_name [, ...] ) | ENCODING 'encoding_name' | IGNORE_EXTRA_DATA [ boolean ] | FILL_MISSING_FIELDS [ boolean ] | COMPATIBLE_ILLEGAL_CHARS [ boolean ] | DATE_FORMAT 'date_format_string' | TIME_FORMAT 'time_format_string' | TIMESTAMP_FORMAT 'timestamp_format_string' | SMALLDATETIME_FORMAT 'smalldatetime_format_string' 其中可选参数copy_option子句语法为: OIDS | NULL 'null_string' | HEADER | USEEOF | FILEHEADER 'header_file_string' | FREEZE | FORCE_NOT_NULL column_name [, ...] | FORCE_QUOTE { column_name [, ...] | * } | BINARY | CS V | QUOTE [ AS ] 'quote_character' | ESCAPE [ AS ] 'escape_character' | EOL 'newline_character' | ENCODING 'encoding_name' | IGNORE_EXTRA_DATA | FILL_MISSING_FIELDS [ { 'one' | 'multi' } ] | COMPATIBLE_ILLEGAL_CHARS | DATE_FORMAT 'date_format_string' | TIME_FORMAT 'time_format_string' | TIMESTAMP_FORMAT 'timestamp_format_string' | SMALLDATETIME_FORMAT 'smalldatetime_format_string' | SKIP int_number | WHEN { ( start - end ) | column_name } { = | != } 'string' | SEQUENCE ( { column_name ( integer [, incr] ) [, ...] } ) | FILLER ( { column_name [, ...] } ) | CONSTANT ( { column_name 'constant_string' [, ...] } )
  • 示例 --创建SCHEMA。 openGauss=# CREATE SCHEMA tpcds; --创建tpcds.ship_mode表。 openGauss=# CREATE TABLE tpcds.ship_mode ( SM_SHIP_MODE_SK INTEGER NOT NULL, SM_SHIP_MODE_ID CHAR(16) NOT NULL, SM_TYPE CHAR(30) , SM_CODE CHAR(10) , SM_CARRIER CHAR(20) , SM_CONTRACT CHAR(20) ) ; --向tpcds.ship_mode表插入一条数据。 openGauss=# INSERT INTO tpcds.ship_mode VALUES (1,'a','b','c','d','e'); --将tpcds.ship_mode中的数据复制到/home/omm/ds_ship_mode.dat文件中。 openGauss=# COPY tpcds.ship_mode TO '/home/omm/ds_ship_mode.dat'; --将tpcds.ship_mode 输出到STDOUT。 openGauss=# COPY tpcds.ship_mode TO STDOUT; --将tpcds.ship_mode 的数据输出到STDOUT,使用参数如下:分隔符为','(delimiter ','),编码格式为UTF8(encoding 'utf8')。 openGauss=# COPY tpcds.ship_mode TO STDOUT WITH (delimiter ',', encoding 'utf8'); --将tpcds.ship_mode 的数据输出到STDOUT,使用参数如下:导入格式为CSV(format 'CSV'),引号包围SM_SHIP_MODE_SK字段的导出内容(force_quote(SM_SHIP_MODE_SK))。 openGauss=# COPY tpcds.ship_mode TO STDOUT WITH (format 'CSV', force_quote(SM_SHIP_MODE_SK)); --创建tpcds.ship_mode_t1表。 openGauss=# CREATE TABLE tpcds.ship_mode_t1 ( SM_SHIP_MODE_SK INTEGER NOT NULL, SM_SHIP_MODE_ID CHAR(16) NOT NULL, SM_TYPE CHAR(30) , SM_CODE CHAR(10) , SM_CARRIER CHAR(20) , SM_CONTRACT CHAR(20) ) ; --从STDIN复制数据到表tpcds.ship_mode_t1。 openGauss=# COPY tpcds.ship_mode_t1 FROM STDIN; --从/home/omm/ds_ship_mode.dat文件复制数据到表tpcds.ship_mode_t1。 openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat'; --从/home/omm/ds_ship_mode.dat文件复制数据到表tpcds.ship_mode_t1,应用TRANSFORM表达式转换,取SM_TYPE列左边10个字符插入到表中。 openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' TRANSFORM (SM_TYPE AS LEFT(SM_TYPE, 10)); --从/home/omm/ds_ship_mode.dat文件复制数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为TEXT(format 'text'),分隔符为'\t'(delimiter E'\t'),忽略多余列(ignore_extra_data 'true'),不指定转义(noescaping 'true')。 openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' WITH(format 'text', delimiter E'\t', ignore_extra_data 'true', noescaping 'true'); --从/home/omm/ds_ship_mode.dat文件复制数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为FIXED(FIXED),指定定长格式(FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20))),忽略多余列(ignore_extra_data),有数据头(header)。 openGauss=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' FIXED FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20)) header ignore_extra_data; --删除表和SCHEMA。 openGauss=# DROP TABLE tpcds.ship_mode; openGauss=# DROP TABLE tpcds.ship_mode_t1; openGauss=# DROP SCHEMA tpcds;
  • 注意事项 当参数enable_copy_server_files关闭时,只允许初始用户执行COPY FROM FILENAME或COPY TO FILENAME命令,当参数enable_copy_server_files打开时,允许具有SYSADMIN权限的用户或继承了内置角色gs_role_copy_files权限的用户执行,但默认禁止对数据库配置文件,密钥文件,证书文件和审计日志执行COPY FROM FILENAME或COPY TO FILENAME,以防止用户越权查看或修改敏感文件。同时enable_copy_server_files打开时,管理员可以通过guc参数safe_data_path设置普通用户可以导入导出的路径必须为设置路径的子路径,未设置此guc参数时候(默认情况),不对普通用户使用的路径进行拦截。 COPY只能用于表,不能用于视图。 COPY TO需要读取的表的select权限,COPY FROM需要插入的表的INSERT权限。 如果声明了一个字段列表,COPY将只在文件和表之间拷贝已声明字段的数据。如果表中有任何不在字段列表里的字段,COPY FROM将为那些字段插入缺省值。 如果声明了数据源文件,服务器必须可以访问该文件;如果指定了STDIN,数据将在客户前端和服务器之间流动,输入时,表的列与列之间使用TAB键分隔,在新的一行中以反斜杠和句点(\.)表示输入结束。 如果数据文件的任意行包含比预期多或者少的字段,COPY FROM将抛出一个错误。 数据的结束可以用一个只包含反斜杠和句点(\.)的行表示。如果从文件中读取数据,数据结束的标记是不必要的;如果在客户端应用之间拷贝数据,必须要有结束标记。 COPY FROM中\N为空字符串,如果要输入实际数据值\N ,使用\\N。
  • GLOBAL_TRANSACTIONS_PREPARED_XA CTS 显示数据库主节点当前准备好进行两阶段提交的事务的信息汇总。 表1 GLOBAL_TRANSACTIONS_PREPARED_XACTS字段 名称 类型 描述 transaction xid 预备事务的数字事务标识。 gid text 赋予该事务的全局事务标识。 prepared timestamp with time zone 事务准备好提交的时间。 owner name 执行该事务的用户的名称。 database name 执行该事务所在的数据库名。 父主题: Transaction
  • 自治事务 自治事务(Autonomous Transaction),在主事务执行过程中新启的独立的事务。自治事务的提交和回滚不会影响主事务已提交的数据,同时自治事务也不受主事务影响。 自治事务在存储过程、函数、匿名块和package中定义,用PRAGMA AUTONOMOUS_TRANSACTION关键字来声明。 存储过程支持自治事务 匿名块支持自治事务 函数支持自治事务 Package支持自治事务 规格约束
  • ADM_HIST_SQLSTAT ADM_HIST_SQLSTAT视图描述当前节点的执行语句的信息。默认只有系统管理员权限才可以访问此系统视图,普通用户需要授权才可以访问。 表1 ADM_HIST_SQLSTAT字段 名称 类型 描述 INSTANCE_NUMBER integer 快照的实例编号。 SQL_ID bigint 查询标识。 PLAN_HASH_VALUE bigint 归一化SQL ID。 MODULE text 包含第一次解析 SQL 语句时正在执行的模块的名称。 ELAPSED_TIME_DELTA bigint 有效的DB时间花费,多线程将累加(单位:微秒)。 CPU_TIME_DELTA bigint CPU时间(单位:微秒)。 EXECUTIONS_DELTA integer 自从它被带入库缓存以来在此对象上发生的执行次数增量。 IOWAIT_DELTA bigint I/O上的时间花费(单位:微秒)。 APWAIT_DELTA integer 应用程序等待时间的Delta值。 ROWS_PRO CES SED_DELTA bigint SELECT返回的结果集行数。 SNAP_ID integer 唯一快照ID。 父主题: 系统视图
  • 数组函数 array_append(anyarray, anyelement) 描述:向数组末尾添加元素,只支持一维数组。 返回类型:anyarray 示例: 1 2 3 4 5 openGauss=# SELECT array_append(ARRAY[1,2], 3) AS RESULT; result --------- {1,2,3} (1 row) array_prepend(anyelement, anyarray) 描述:向数组开头添加元素,只支持一维数组。 返回类型:anyarray 示例: 1 2 3 4 5 openGauss=# SELECT array_prepend(1, ARRAY[2,3]) AS RESULT; result --------- {1,2,3} (1 row) array_cat(anyarray, anyarray) 描述:连接两个数组,支持多维数组。 返回类型:anyarray 示例: 1 2 3 4 5 6 7 8 9 10 11 openGauss=# SELECT array_cat(ARRAY[1,2,3], ARRAY[4,5]) AS RESULT; result ------------- {1,2,3,4,5} (1 row) openGauss=# SELECT array_cat(ARRAY[[1,2],[4,5]], ARRAY[6,7]) AS RESULT; result --------------------- {{1,2},{4,5},{6,7}} (1 row) array_union(anyarray, anyarray) 描述:连接两个数组,只支持一维数组。 返回类型:anyarray 示例: 1 2 3 4 5 openGauss=# SELECT array_union(ARRAY[1,2,3], ARRAY[3,4,5]) AS RESULT; result ------------- {1,2,3,3,4,5} (1 row) array_union_distinct(anyarray, anyarray) 描述:连接两个数组,并去重,只支持一维数组。 返回类型:anyarray 示例: 1 2 3 4 5 openGauss=# SELECT array_union_distinct(ARRAY[1,2,3], ARRAY[3,4,5]) AS RESULT; result ------------- {1,2,3,4,5} (1 row) array_intersect(anyarray, anyarray) 描述:两个数组取交集,只支持一维数组。 返回类型:anyarray 示例: 1 2 3 4 5 openGauss=# SELECT array_intersect(ARRAY[1,2,3], ARRAY[3,4,5]) AS RESULT; result ------------- {3} (1 row) array_intersect_distinct(anyarray, anyarray) 描述:两个数组取交集,并去重,只支持一维数组。 返回类型:anyarray 示例: 1 2 3 4 5 openGauss=# SELECT array_intersect_distinct(ARRAY[1,2,2], ARRAY[2,2,4,5]) AS RESULT; result ------------- {2} (1 row) array_except(anyarray, anyarray) 描述:两个数组取差,只支持一维数组。 返回类型:anyarray 示例: 1 2 3 4 5 openGauss=# SELECT array_except(ARRAY[1,2,3], ARRAY[3,4,5]) AS RESULT; result ------------- {1,2} (1 row) array_except_distinct(anyarray, anyarray) 描述:两个数组取差,并去重,只支持一维数组。 返回类型:anyarray 示例: 1 2 3 4 5 openGauss=# SELECT array_except_distinct(ARRAY[1,2,2,3], ARRAY[3,4,5]) AS RESULT; result ------------- {1,2} (1 row) array_ndims(anyarray) 描述:返回数组的维数。 返回类型:int 示例: 1 2 3 4 5 openGauss=# SELECT array_ndims(ARRAY[[1,2,3], [4,5,6]]) AS RESULT; result -------- 2 (1 row) array_dims(anyarray) 描述:返回数组各个维度中的低位下标值和高位下标值。 返回类型:text 示例: 1 2 3 4 5 openGauss=# SELECT array_dims(ARRAY[[1,2,3], [4,5,6]]) AS RESULT; result ------------ [1:2][1:3] (1 row) array_length(anyarray, int) 描述:返回指定数组维度的长度。int为指定数组维度。 返回类型:int 示例: 1 2 3 4 5 6 7 8 9 10 11 openGauss=# SELECT array_length(array[1,2,3], 1) AS RESULT; result -------- 3 (1 row) openGauss=# SELECT array_length(array[[1,2,3],[4,5,6]], 2) AS RESULT; result -------- 3 (1 row) array_lower(anyarray, int) 描述:返回指定数组维数的下界。int为指定数组维度。 返回类型:int 示例: 1 2 3 4 5 openGauss=# SELECT array_lower('[0:2]={1,2,3}'::int[], 1) AS RESULT; result -------- 0 (1 row) array_upper(anyarray, int) 描述:返回指定数组维数的上界。int为指定数组维度。 返回类型:int 示例: 1 2 3 4 5 openGauss=# SELECT array_upper(ARRAY[1,8,3,7], 1) AS RESULT; result -------- 4 (1 row) array_upper(anyarray, int) 描述:返回指定数组维数的上界。int为指定数组维度。 返回类型:int 示例: openGauss=# SELECT array_upper(ARRAY[1,8,3,7], 1) AS RESULT; result -------- 4 (1 row) array_remove(anyarray, anyelement) 描述:移除数组中的所有指定元素。仅支持一维数组。 返回类型:anyarray 示例: openGauss=# SELECT array_remove(ARRAY[1,8,8,7], 8) AS RESULT; result -------- {1,7} (1 row) array_to_string(anyarray, text [, text]) 描述:使用第一个text作为数组的新分隔符,使用第二个text替换数组值为null的值。 返回类型:text 示例: 1 2 3 4 5 openGauss=# SELECT array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*') AS RESULT; result ----------- 1,2,3,*,5 (1 row) array_delete(anyarray) 描述:清空数组中的元素并返回一个同类型的空数组。 返回类型:anyarray 示例: openGauss=# SELECT array_delete(ARRAY[1,8,3,7]) AS RESULT; result -------- {} (1 row) array_deleteidx(anyarray, int) 描述:从数组中删除指定下标的元素并返回剩余元素组成的数组。 返回类型:anyarray 示例: openGauss=# SELECT array_deleteidx(ARRAY[1,2,3,4,5], 1) AS RESULT; result ----------- {2,3,4,5} (1 row) array_extendnull(anyarray, int) 描述:往数组尾部添加指定个数的null空元素。 返回类型:anyarray 示例: openGauss=# SELECT array_extendnull(ARRAY[1,8,3,7],1) AS RESULT; result -------------- {1,8,3,7,null} (1 row) array_trim(anyarray, int) 描述:从数组尾部删除指定个数个元素。 返回类型:anyarray 示例: openGauss=# SELECT array_trim(ARRAY[1,8,3,7],1) AS RESULT; result --------- {1,8,3} (1 row) array_exists(anyarray, int) 描述:检查第二个参数是否是数组的合法下标。 返回类型:boolean 示例: openGauss=# SELECT array_exists(ARRAY[1,8,3,7],1) AS RESULT; result -------- t (1 row) array_next(anyarray, int) 描述:根据第二个入参返回数组中指定下标元素的下一个元素的下标。 返回类型:int 示例: openGauss=# SELECT array_next(ARRAY[1,8,3,7],1) AS RESULT; result -------- 2 (1 row) array_prior(anyarray, int) 描述:根据第二个入参返回数组中指定下标元素的上一个元素的下标。 返回类型:int 示例: openGauss=# SELECT array_prior(ARRAY[1,8,3,7],2) AS RESULT; result -------- 1 (1 row) string_to_array(text, text [, text]) 描述:使用第二个text指定分隔符,使用第三个可选的text作为NULL值替换模板,如果分隔后的子串与第三个可选的text完全匹配,则将其替换为NULL。 返回类型:text[] 示例: 1 2 3 4 5 6 7 8 9 10 openGauss=# SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'yy') AS RESULT; result -------------- {xx,NULL,zz} (1 row) openGauss=# SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'y') AS RESULT; result ------------ {xx,yy,zz} (1 row) unnest(anyarray) 描述:扩大一个数组为一组行。 返回类型:setof anyelement 示例: 1 2 3 4 5 6 openGauss=# SELECT unnest(ARRAY[1,2]) AS RESULT; result -------- 1 2 (2 rows)
  • SUMMARY_FILE_IOSTAT 通过数据库内对数据文件汇聚I/O的统计,反映数据的I/O性能,用以发现I/O操作异常等性能问题。 表1 SUMMARY_FILE_IOSTAT字段 名称 类型 描述 filenum oid 文件标识。 dbid oid 数据库标识。 spcid oid 表空间标识。 phyrds numeric 读物理文件的数目。 phywrts numeric 写物理文件的数目。 phyblkrd numeric 读物理文件块的数目。 phyblkwrt numeric 写物理文件块的数目。 readtim numeric 读文件的总时长(单位:微秒)。 writetim numeric 写文件的总时长(单位:微秒)。 avgiotim bigint 读写文件的平均时长(单位:微秒)。 lstiotim bigint 最后一次读文件时长(单位:微秒)。 miniotim bigint 读写文件的最小时长(单位:微秒)。 maxiowtm bigint 读写文件的最大时长(单位:微秒)。 父主题: File
  • 注意事项 定义同义词的用户成为其所有者。 若指定模式名称,则同义词在指定模式中创建。否则,在当前模式创建。 支持通过同义词访问的数据库对象包括:表、视图、函数和存储过程。 使用同义词时,用户需要具有对关联对象的相应权限。 支持使用同义词的DML语句包括:SELECT、INSERT、UPDATE、DELETE、EXPLAIN、CALL。 不建议对临时表创建同义词。如果需要创建,需要指定同义词的目标临时表的模式名,否则无法正常使用该同义词,并且在当前会话结束前执行DROP SYNONYM命令。 删除原对象后,与之关联同义词不会被级联删除,继续访问该同义词会报错,并提示已失效。
  • 示例 --创建模式ot。 openGauss=# CREATE SCHEMA ot; --创建表ot.t1及其同义词t1。 openGauss=# CREATE TABLE ot.t1(id int, name varchar2(10)); openGauss=# CREATE OR REPLACE SYNONYM t1 FOR ot.t1; --使用同义词t1。 openGauss=# SELECT * FROM t1; openGauss=# INSERT INTO t1 VALUES (1, 'ada'), (2, 'bob'); openGauss=# UPDATE t1 SET t1.name = 'cici' WHERE t1.id = 2; --创建同义词v1及其关联视图ot.v_t1。 openGauss=# CREATE SYNONYM v1 FOR ot.v_t1; openGauss=# CREATE VIEW ot.v_t1 AS SELECT * FROM ot.t1; --使用同义词v1。 openGauss=# SELECT * FROM v1; --创建重载函数ot.add及其同义词add。 openGauss=# CREATE OR REPLACE FUNCTION ot.add(a integer, b integer) RETURNS integer AS $$ SELECT $1 + $2 $$ LANGUAGE sql; openGauss=# CREATE OR REPLACE FUNCTION ot.add(a decimal(5,2), b decimal(5,2)) RETURNS decimal(5,2) AS $$ SELECT $1 + $2 $$ LANGUAGE sql; openGauss=# CREATE OR REPLACE SYNONYM add FOR ot.add; --使用同义词add。 openGauss=# SELECT add(1,2); openGauss=# SELECT add(1.2,2.3); --创建存储过程ot.register及其同义词register。 openGauss=# CREATE PROCEDURE ot.register(n_id integer, n_name varchar2(10)) SECURITY INVOKER AS BEGIN INSERT INTO ot.t1 VALUES(n_id, n_name); END; / openGauss=# CREATE OR REPLACE SYNONYM register FOR ot.register; --使用同义词register,调用存储过程。 openGauss=# CALL register(3,'mia'); --删除同义词。 openGauss=# DROP SYNONYM t1; openGauss=# DROP SYNONYM IF EXISTS v1; openGauss=# DROP SYNONYM IF EXISTS add; openGauss=# DROP SYNONYM register; openGauss=# DROP SCHEMA ot CASCADE;
  • SUMMARY_STATIO_USER_TABLES SUMMARY_STATIO_USER_TABLES视图显示数据库内各节点的用户关系表的I/O状态汇总信息。 表1 SUMMARY_STATIO_USER_TABLES字段 名称 类型 描述 schemaname name 该表模式名。 relname name 表名。 heap_blks_read numeric 从该表中读取的磁盘块数。 heap_blks_hit numeric 此表缓存命中数。 idx_blks_read numeric 从表中所有索引读取的磁盘块数。 idx_blks_hit numeric 表中所有索引命中缓存数。 toast_blks_read numeric 此表的TOAST表读取的磁盘块数(如果存在)。 toast_blks_hit numeric 此表的TOAST表命中缓冲区数(如果存在)。 tidx_blks_read numeric 此表的TOAST表索引读取的磁盘块数(如果存在)。 tidx_blks_hit numeric 此表的TOAST表索引命中缓冲区数(如果存在)。 父主题: Cache/IO
  • 获取源码包、ODBC包以及依赖库 基于ODBC开发所需的包,依赖库和头文件以及其获取方式如表1所示。 表1 ODBC应用程序开发环境准备 所需资源 获取方式 unixODBC源码包 unixODBC源码包获取参考地址:https://www.unixodbc.org/unixODBC-2.3.7.tar.gz。 MD5文件下载地址:https://www.unixodbc.org/unixODBC-2.3.7.tar.gz.md5。 下载后需使用MD5文件对unixODBC源码包进行完整性校验(查看MD5值,对比MD5值是否与源码包一致)。 Linux系统下的ODBC包以及依赖库 从发布包中获取,包名为 GaussDB -Kernel-数据库版本号-操作系统版本号-64bit-Odbc.tar.gz。Linux环境下,开发应用程序要用到unixODBC提供的头文件(sql.h、sqlext.h等)和库libodbc.so。这些头文件和库可从unixODBC-2.3.7的源码包中获得。 Windows系统下的ODBC包以及依赖库 从发布包中获取,包名为GaussDB-Kernel_数据库版本号_Windows_X86_Odbc.tar.gz(32位)和GaussDB-Kernel-数据库版本号-Windows-X64-Odbc.tar.gz(64位)。Windows环境下,开发应用程序用到的相关头文件和库文件由系统自带。 父主题: 开发步骤
  • 示例 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 --获取字符串的长度 SELECT DBE_LOB.GET_LENGTH('12345678'); get_length ------------ 8 (1 row) DECLARE myraw RAW(100); amount INTEGER :=2; buffer INTEGER :=1; begin DBE_LOB.READ('123456789012345',amount,buffer,myraw); dbe_output.print_line(myraw); end; / 0123 ANONYMOUS BLOCK EXECUTE CREATE TABLE blob_Table (t1 blob); CREATE TABLE blob_Table_bak (t2 blob); INSERT INTO blob_Table VALUES('abcdef'); INSERT INTO blob_Table_bak VALUES('22222'); DECLARE str varchar2(100) := 'abcdef'; source raw(100); dest blob; copyto blob; amount int; PSV_SQL varchar2(100); PSV_SQL1 varchar2(100); a int :=1; len int; BEGIN source := dbe_raw.cast_from_varchar2_to_raw(str); amount := dbe_raw.get_length(source); PSV_SQL :='select * from blob_Table for update'; PSV_SQL1 := 'select * from blob_Table_bak for update'; EXECUTE IMMEDIATE PSV_SQL into dest; EXECUTE IMMEDIATE PSV_SQL1 into copyto; DBE_LOB.WRITE(dest, amount, 1, source); DBE_LOB.WRITE_APPEND(dest, amount, source); DBE_LOB.ERASE(dest, a, 1); DBE_OUTPUT.PRINT_LINE(a); DBE_LOB.COPY(copyto, dest, amount, 10, 1); perform DBE_LOB.CLOSE(dest); RETURN; END; / --删除表 DROP TABLE blob_Table; DROP TABLE DROP TABLE blob_Table_bak; DROP TABLE
  • ADM_TAB_COMMENTS ADM_TAB_COMMENTS视图显示数据库下的所有表和视图的注释信息。默认只有系统管理员权限才可以访问此系统视图,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_TAB_COMMENTS字段 名称 类型 描述 owner character varying(64) 表或视图的所有者。 table_name character varying(64) 表或视图的名称。 comments text 注释。 父主题: 系统视图
  • 快照同步函数 快照同步函数是导出当前快照的标识符。 pg_export_snapshot() 描述:保存当前的快照并返回它的标识符。 返回值类型:text 备注:函数pg_export_snapshot保存当前的快照并返回一个文本字符串标识此快照。这个字符串必须传递给想要导入快照的客户端。可用在set transaction snapshot snapshot_id时导入snapshot,但是应用的前提是该事务设置了SERIALIZABLE或REPEATABLE READ隔离级别。而GaussDB目前是不支持这两种隔离级别的。该函数的输出不可用做set transaction snapshot的输入。 pg_export_snapshot_and_csn() 描述:保存当前的快照并返回它的标识符。比pg_export_snapshot()多返回一列CSN,表示当前快照的CSN。 返回值类型:text 父主题: 系统管理函数
  • ADM_INDEXES ADM_INDEXES视图显示数据库中所有索引的信息。默认只有系统管理员权限才可以访问此系统视图,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_INDEXES字段 名称 类型 描述 owner character varying(64) 索引的所有者。 index_name character varying(64) 索引名称。 table_name character varying(64) 索引对应的表名。 uniqueness text 表示该索引是否为唯一索引。 partitioned character(3) 表示该索引是否具有分区表的性质。 generated character varying(1) 表示该索引的名称是否为系统生成。 父主题: 系统视图
  • 函数和操作符 操作符可以对一个或多个操作数进行处理,位置上可能处于操作数之前、之后,或两个操作数中间。完成处理之后,返回处理结果。 函数是对一些业务逻辑的封装,以完成特定的功能。函数可以有参数,也可以没有参数。函数是有返回类型的,执行完成后,会返回执行结果。 对于系统函数,用户可以进行修改,但是修改之后系统函数的语义可能会发生改变,从而导致系统控制紊乱。正常情况下不允许用户手工修改系统函数。 逻辑操作符 比较操作符 字符处理函数和操作符 二进制字符串函数和操作符 位串函数和操作符 模式匹配操作符 数字操作函数和操作符 时间和日期处理函数和操作符 类型转换函数 几何函数和操作符 网络地址函数和操作符 JSON/JSONB函数和操作符 HLL函数和操作符 SEQUENCE函数 数组函数和操作符 范围函数和操作符 聚集函数 窗口函数 安全函数 返回集合的函数 条件表达式函数 系统信息函数 系统管理函数 统计信息函数 触发器函数 HashFunc函数 提示信息函数 全局临时表函数 故障注入系统函数 AI特性函数 动态数据脱敏函数 层次递归查询函数 内部函数 Global SysCache特性函数 数据损坏检测修复函数 其他系统函数 废弃函数 父主题: SQL参考
  • date_part date_part函数是在传统的Ingres函数的基础上制作的(该函数等效于SQL标准函数extract): date_part('field', source) 这里的field参数必须是一个字符串,而不是一个名称。有效的field与extract一样,详细信息请参见EXTRACT。 示例: 1 2 3 4 5 openGauss=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 16 (1 row) 1 2 3 4 5 openGauss=# 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 openGauss=# 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 openGauss=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 16 (1 row) 如果source为interval,表示天数。 1 2 3 4 5 openGauss=# SELECT EXTRACT(DAY FROM INTERVAL '40 days 1 minute'); date_part ----------- 40 (1 row) decade 年份除以10。 1 2 3 4 5 openGauss=# SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 200 (1 row) dow 每周的星期几,星期天(0)到星期六(6)。 1 2 3 4 5 openGauss=# 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 openGauss=# 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 openGauss=# 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 openGauss=# SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours'); date_part ----------- 442800 (1 row) 将epoch值转换为时间戳的方法。 1 2 3 4 5 openGauss=# 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 openGauss=# 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 openGauss=# 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 openGauss=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01'); date_part ----------- 2005 (1 row) 1 2 3 4 5 openGauss=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02'); date_part ----------- 2006 (1 row) microseconds 秒域(包括小数部分)乘以1,000,000。 1 2 3 4 5 openGauss=# 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 openGauss=# SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 3 (1 row) milliseconds 秒域(包括小数部分)乘以1000。请注意它包括完整的秒。 1 2 3 4 5 openGauss=# SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5'); date_part ----------- 28500 (1 row) minute 分钟域(0-59)。 1 2 3 4 5 openGauss=# 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 openGauss=# 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 openGauss=# SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months'); date_part ----------- 1 (1 row) quarter 该天所在的该年的季度(1-4)。 1 2 3 4 5 openGauss=# SELECT EXTRACT(QUARTER FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 1 (1 row) second 秒域,包括小数部分(0-59)。 1 2 3 4 5 openGauss=# 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周,十二月的后几天可能是下一年第一周。比如,2005-01-01是2004年的第53周,而2006-01-01是2005年的第52周,2012-12-31是2013年的第一周。建议isoyear字段和week一起使用以得到一致的结果。 1 2 3 4 5 openGauss=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 7 (1 row) year 年份域。 1 2 3 4 5 openGauss=# SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 2001 (1 row)
  • TIMESTAMPDIFF TIMESTAMPDIFF(unit , timestamp_expr1, timestamp_expr2) timestampdiff函数是计算两个日期时间之间(timestamp_expr2-timestamp_expr1)的差值,并以unit形式返回结果。timestamp_expr1,timestamp_expr2必须是一个timestamp、timestamptz、date类型的值表达式。unit表示的是两个日期差的单位。 该函数仅在GaussDB兼容MY类型时(即dbcompatibility = 'B')有效,其他类型不支持该函数。等效于timestamp_diff(text, timestamp, timestamp)。 year 年份。 1 2 3 4 5 openGauss=# SELECT TIMESTAMPDIFF(YEAR, '2018-01-01', '2020-01-01'); timestamp_diff ---------------- 2 (1 row)
  • 时间/日期函数 age(timestamp, timestamp) 描述:将两个参数相减,并以年、月、日作为返回值。若相减值为负,则函数返回亦为负,入参可以都带timezone或都不带timezone。 返回值类型:interval 示例: 1 2 3 4 5 openGauss=# SELECT age(timestamp '2001-04-10', timestamp '1957-06-13'); age ------------------------- 43 years 9 mons 27 days (1 row) age(timestamp) 描述:当前时间和参数相减,入参可以带或者不带timezone。 返回值类型:interval 示例: 1 2 3 4 5 openGauss=# SELECT age(timestamp '1957-06-13'); age ------------------------- 60 years 2 mons 18 days (1 row) clock_timestamp() 描述:实时时钟的当前时间戳。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT clock_timestamp(); clock_timestamp ------------------------------- 2017-09-01 16:57:36.636205+08 (1 row) current_date 描述:当前日期。 返回值类型:date 示例: 1 2 3 4 5 openGauss=# SELECT current_date; date ------------ 2017-09-01 (1 row) current_time 描述:当前时间。 返回值类型:time with time zone 示例: 1 2 3 4 5 openGauss=# SELECT current_time; timetz -------------------- 16:58:07.086215+08 (1 row) current_timestamp 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT current_timestamp; pg_systimestamp ------------------------------ 2017-09-01 16:58:19.22173+08 (1 row) pg_systimestamp() 描述:当前日期和时间(当前语句的开始)。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT pg_systimestamp(); pg_systimestamp ------------------------------- 2015-10-14 11:21:28.317367+08 (1 row) date_part(text, timestamp) 描述:获取日期/时间值中子域的值,例如年或者小时的值。等效于extract(field from timestamp)。 timestamp类型:abstime、date、interval、reltime、time with time zone、time without time zone、timestamp with time zone、timestamp without time zone。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT date_part('hour', timestamp '2001-02-16 20:38:40'); date_part ----------- 20 (1 row) timestamp_diff(text, timestamp, timestamp) 描述:计算两个日期时间之间的差值,截取到参数text指定的精度。在兼容B数据库模式下,该函数功能与TIMESTAMPDIFF(unit , timestamp_expr1, timestamp_expr2)相同。 返回值类型:int64 示例: 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 openGauss=# SELECT timestamp_diff('year','2018-01-01','2020-04-01'); timestamp_diff ---------------- 2 (1 row) openGauss=# SELECT timestamp_diff('month','2018-01-01','2020-04-01'); timestamp_diff ---------------- 27 (1 row) openGauss=# SELECT timestamp_diff('quarter','2018-01-01','2020-04-01'); timestamp_diff ---------------- 9 (1 row) openGauss=# SELECT timestamp_diff('week','2018-01-01','2020-04-01'); timestamp_diff ---------------- 117 (1 row) openGauss=# SELECT timestamp_diff('day','2018-01-01','2020-04-01'); timestamp_diff ---------------- 821 (1 row) openGauss=# SELECT timestamp_diff('hour','2018-01-01 10:10:10','2018-01-01 12:12:12'); timestamp_diff ---------------- 2 (1 row) openGauss=# SELECT timestamp_diff('minute','2018-01-01 10:10:10','2018-01-01 12:12:12'); timestamp_diff ---------------- 122 (1 row) openGauss=# SELECT timestamp_diff('second','2018-01-01 10:10:10','2018-01-01 10:12:12'); timestamp_diff ---------------- 122 (1 row) openGauss=# SELECT timestamp_diff('microsecond','2018-01-01 10:10:10','2018-01-01 10:12:12'); timestamp_diff ---------------- 122000000 (1 row) date_part(text, interval) 描述:获取日期/时间值中子域的值。获取月份值时,如果月份值大于12,则取与12的模。等效于extract(field from timestamp)。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT date_part('month', interval '2 years 3 months'); date_part ----------- 3 (1 row) date_trunc(text, timestamp) 描述:截取到参数text指定的精度。 返回值类型:interval、timestamp with time zone、timestamp without time zone 示例: 1 2 3 4 5 openGauss=# SELECT date_trunc('hour', timestamp '2001-02-16 20:38:40'); date_trunc --------------------- 2001-02-16 20:00:00 (1 row) trunc(timestamp) 描述:默认按天截取。 示例: 1 2 3 4 openGauss=# SELECT trunc(timestamp '2001-02-16 20:38:40'); trunc --------------------- 2001-02-16 00:00:00 (1 row) trunc(arg1, arg2) 描述:截取到arg2指定的精度。 arg1类型:interval、timestamp with time zone、timestamp without time zone arg2类型:text 返回值类型:interval、timestamp with time zone、timestamp without time zone 示例: 1 2 3 4 openGauss=# SELECT trunc(timestamp '2001-02-16 20:38:40', 'hour'); trunc --------------------- 2001-02-16 20:00:00 (1 row) daterange(arg1, arg2) 描述:获取时间边界信息。arg1和arg2的类型为date。 返回值类型:daterange 示例: 1 2 3 4 5 openGauss=# SELECT daterange('2000-05-06','2000-08-08'); daterange ------------------------- [2000-05-06,2000-08-08) (1 row) daterange(arg1, arg2, text) 描述:获取时间边界信息。arg1和arg2的类型为date,text类型为text。 返回值类型:daterange 示例: 1 2 3 4 5 openGauss=# SELECT daterange('2000-05-06','2000-08-08','[]'); daterange ------------------------- [2000-05-06,2000-08-09) (1 row) extract(field from timestamp) 描述:获取小时的值。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT extract(hour from timestamp '2001-02-16 20:38:40'); date_part ----------- 20 (1 row) extract(field from interval) 描述:获取月份的值。如果大于12,则取与12的模。 返回值类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT extract(month from interval '2 years 3 months'); date_part ----------- 3 (1 row) isfinite(date) 描述:测试是否为有效日期。 返回值类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT isfinite(date '2001-02-16'); isfinite ---------- t (1 row) isfinite(timestamp) 描述:测试判断是否为有效时间。 返回值类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT isfinite(timestamp '2001-02-16 21:28:30'); isfinite ---------- t (1 row) isfinite(interval) 描述:测试是否为有效区间。 返回值类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT isfinite(interval '4 hours'); isfinite ---------- t (1 row) justify_days(interval) 描述:将时间间隔以月(30天为一月)为单位。 返回值类型:interval 示例: 1 2 3 4 5 openGauss=# SELECT justify_days(interval '35 days'); justify_days -------------- 1 mon 5 days (1 row) justify_hours(interval) 描述:将时间间隔以天(24小时为一天)为单位。 返回值类型:interval 示例: 1 2 3 4 5 openGauss=# SELECT JUSTIFY_HOURS(INTERVAL '27 HOURS'); justify_hours ---------------- 1 day 03:00:00 (1 row) justify_interval(interval) 描述:结合justify_days和justify_hours,调整interval。 返回值类型:interval 示例: 1 2 3 4 5 openGauss=# SELECT JUSTIFY_INTERVAL(INTERVAL '1 MON -1 HOUR'); justify_interval ------------------ 29 days 23:00:00 (1 row) localtime 描述:当前时间。 返回值类型:time 示例: 1 2 3 4 5 openGauss=# SELECT localtime AS RESULT; result ---------------- 16:05:55.664681 (1 row) localtimestamp 描述:当前日期及时间。 返回值类型:timestamp 示例: 1 2 3 4 5 openGauss=# SELECT localtimestamp; timestamp ---------------------------- 2017-09-01 17:03:30.781902 (1 row) now() 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT now(); now ------------------------------- 2017-09-01 17:03:42.549426+08 (1 row) timenow() 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# select timenow(); timenow ------------------------ 2020-06-23 20:36:56+08 (1 row) numtodsinterval(num, interval_unit) 描述:将数字转换为interval类型。num为numeric类型数字,interval_unit为固定格式字符串('DAY' | 'HOUR' | 'MINUTE' | 'SECOND')。 可以通过设置GUC参数IntervalStyle为a,兼容该函数interval输出格式。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 openGauss=# SELECT numtodsinterval(100, 'HOUR'); numtodsinterval ----------------- 100:00:00 (1 row) openGauss=# SET intervalstyle = a; SET openGauss=# SELECT numtodsinterval(100, 'HOUR'); numtodsinterval ------------------------------- +000000004 04:00:00.000000000 (1 row) pg_sleep(seconds) 描述:服务器线程延迟时间,单位为秒。 返回值类型:void 示例: 1 2 3 4 5 openGauss=# SELECT pg_sleep(10); pg_sleep ---------- (1 row) statement_timestamp() 描述:当前日期和时间(当前语句的开始)。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT statement_timestamp(); statement_timestamp ------------------------------- 2017-09-01 17:04:39.119267+08 (1 row) sysdate 描述:当前日期及时间。 返回值类型:timestamp 示例: 1 2 3 4 5 openGauss=# SELECT sysdate; sysdate --------------------- 2017-09-01 17:04:49 (1 row) timeofday() 描述:当前日期及时间(像clock_timestamp,但是返回时为text)。 返回值类型:text 示例: 1 2 3 4 5 openGauss=# SELECT timeofday(); timeofday ------------------------------------- Fri Sep 01 17:05:01.167506 2017 CST (1 row) transaction_timestamp() 描述:当前日期及时间,与current_timestamp等效。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 openGauss=# SELECT transaction_timestamp(); transaction_timestamp ------------------------------- 2017-09-01 17:05:13.534454+08 (1 row) add_months(d,n) 描述:用于计算时间点d再加上n个月的时间。 d:timestamp类型的值,以及可以隐式转换为timestamp类型的值。 n:INTEGER类型的值,以及可以隐式转换为INTEGER类型的值。 返回值类型:timestamp 示例: 1 2 3 4 5 openGauss=# SELECT add_months(to_date('2017-5-29', 'yyyy-mm-dd'), 11) FROM sys_dummy; add_months --------------------- 2018-04-29 00:00:00 (1 row) last_day(d) 描述:用于计算时间点d当月最后一天的时间。 返回值类型:timestamp 示例: 1 2 3 4 5 openGauss=# SELECT last_day(to_date('2017-01-01', 'YYYY-MM-DD')) AS cal_result; cal_result --------------------- 2017-01-31 00:00:00 (1 row)
  • 时间日期操作符 用户在使用时间和日期操作符时,对应的操作数请使用明确的类型前缀修饰,以确保数据库在解析操作数的时候能够与用户预期一致,不会产生用户非预期的结果。 比如下面示例没有明确数据类型就会出现异常错误。 1 2 3 4 5 6 7 openGauss=# 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
  • 背景信息 在SQL语言中,每个数据都与一个决定其行为和用法的数据类型相关。GaussDB提供一个可扩展的数据类型系统,该系统比其它SQL实现更具通用性和灵活性。因而,GaussDB中大多数类型转换是由通用规则来管理的,这种做法允许使用混合类型的表达式。 GaussDB扫描/分析器只将词法元素分解成五个基本种类:整数、浮点数、字符串、标识符和关键字。大多数非数字类型首先表现为字符串。SQL语言的定义允许将常量字符串声明为具体的类型。例,下面查询: 1 2 3 4 5 openGauss=# SELECT text 'Origin' AS "label", point '(0,0)' AS "value"; label | value --------+------- Origin | (0,0) (1 row) 示例中有两个文本常量,类型分别为text和point。如果没有为字符串文本声明类型,则该文本首先被定义成一个unknown类型。 在GaussDB分析器里,有四种基本的SQL结构需要独立的类型转换规则: 函数调用 多数SQL类型系统是建筑在一套丰富的函数上的。函数调用可以有一个或多个参数。因为SQL允许函数重载,所以不能通过函数名直接找到要调用的函数,分析器必须根据函数提供的参数类型选择正确的函数。 操作符 SQL允许在表达式上使用前缀或后缀(单目)操作符,也允许表达式内部使用双目操作符(两个参数)。像函数一样,操作符也可以被重载,因此操作符的选择也和函数一样取决于参数类型。 值存储 INSERT和UPDATE语句将表达式结果存入表中。语句中的表达式类型必须和目标字段的类型一致或者可以转换为一致。 UNION,CASE和相关构造 因为联合SELECT语句中的所有查询结果必须在一列里显示出来,所以每个SELECT子句中的元素类型必须相互匹配并转换成一个统一类型。类似地,一个CASE构造的结果表达式必须转换成统一的类型,这样整个case表达式会有一个统一的输出类型。同样的要求也存在于ARRAY构造以及GREATEST和LEAST函数中。 系统表pg_cast存储了有关数据类型之间的转换关系以及如何执行这些转换的信息。详细信息请参见PG_CAST。 语义分析阶段会决定表达式的返回值类型并选择适当的转换行为。数据类型的基本类型分类,包括:Boolean,numeric,string,bitstring,datetime,timespan,geometric和network。每种类型都有一种或多种首选类型用于解决类型选择的问题。根据首选类型和可用的隐含转换,就可能保证有歧义的表达式(那些有多个候选解析方案的)得到有效的方式解决。 所有类型转换规则都是建立在下面几个基本原则上的: 隐含转换绝不能有奇怪的或不可预见的输出。 如果一个查询不需要隐含的类型转换,分析器和执行器不应该进行更多的额外操作。这就是说,任何一个类型匹配、格式清晰的查询不应该在分析器里耗费更多的时间,也不应该向查询中引入任何不必要的隐含类型转换调用。 另外,如果一个查询在调用某个函数时需要进行隐式转换,当用户定义了一个有正确参数的函数后,解释器应该选择使用新函数。
  • STAT_SYS_TABLES 显示单节点内pg_catalog、information_schema以及pg_toast模式下所有系统表的统计信息。 表1 STAT_SYS_TABLES字段 名称 类型 描述 relid oid 表的OID。 schemaname name 该表的模式名。 relname name 表名。 seq_scan bigint 该表发起的顺序扫描数。 seq_tup_read bigint 顺序扫描抓取的活跃行数。 idx_scan bigint 该表发起的索引扫描数。 idx_tup_fetch bigint 索引扫描抓取的活跃行数。 n_tup_ins bigint 插入行数。 n_tup_upd bigint 更新行数。 n_tup_del bigint 删除行数。 n_tup_hot_upd bigint HOT更新行数(比如没有更新所需的单独索引)。 n_live_tup bigint 估计活跃行数。 n_dead_tup bigint 估计死行数。 last_vacuum timestamp with time zone 最后一次该表是手动清理的(不计算VACUUM FULL)时间。 last_autovacuum timestamp with time zone 上次被autovacuum守护进程清理的时间。 last_analyze timestamp with time zone 上次手动分析该表的时间。 last_autoanalyze timestamp with time zone 上次被autovacuum守护进程分析的时间。 vacuum_count bigint 这个表被手动清理的次数(不计算VACUUM FULL)。 autovacuum_count bigint 该表被autovacuum清理的次数。 analyze_count bigint 该表被手动分析的次数。 autoanalyze_count bigint 该表被autovacuum守护进程分析的次数。 父主题: Object
  • STATIO_ALL_TABLES STATIO_ALL_TABLES视图显示数据库当前节点每张表(包括TOAST表)的I/O状态信息。 表1 STATIO_ALL_TABLES字段 名称 类型 描述 relid oid 表OID。 schemaname name 该表模式名。 relname name 表名。 heap_blks_read bigint 从该表中读取的磁盘块数。 heap_blks_hit bigint 该表缓存命中数。 idx_blks_read bigint 从表中所有索引读取的磁盘块数。 idx_blks_hit bigint 表中所有索引命中缓存数。 toast_blks_read bigint 该表的TOAST表读取的磁盘块数(如果存在)。 toast_blks_hit bigint 该表的TOAST表命中缓冲区数(如果存在)。 tidx_blks_read bigint 该表的TOAST表索引读取的磁盘块数(如果存在)。 tidx_blks_hit bigint 该表的TOAST表索引命中缓冲区数(如果存在)。 父主题: Cache/IO
  • 通用文件访问函数 通用文件访问函数提供了对数据库服务器上的文件的本地访问接口。只有数据库目录和log_directory目录里面的文件可以访问。使用相对路径访问数据库目录里面的文件,以及匹配log_directory配置而设置的路径访问日志文件。只有数据库初始化用户才能使用这些函数。 pg_ls_dir(dirname text) 描述:列出目录中的文件。 返回值类型:setof text 备注:pg_ls_dir返回指定目录里面的除了特殊项“.”和“..”之外所有名称。 示例: 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 openGauss=# SELECT pg_ls_dir('./'); pg_ls_dir ---------------------- .postgresql.conf.swp postgresql.conf pg_tblspc PG_VERSION pg_ident.conf core server.crt pg_serial pg_twophase postgresql.conf.lock pg_stat_tmp pg_notify pg_subtrans pg_ctl.lock pg_xlog pg_clog base pg_snapshots postmaster.opts postmaster.pid server.key.rand server.key.cipher pg_multixact pg_errorinfo server.key pg_hba.conf pg_replslot .pg_hba.conf.swp cacert.pem pg_hba.conf.lock global gaussdb.state (32 rows) pg_read_file(filename text, offset bigint, length bigint) 描述:返回一个文本文件的内容。 返回值类型:text 备注:pg_read_file返回一个文本文件的一部分,从offset开始,最多返回length字节(如果先达到文件结尾,则小于这个数值)。如果offset是负数,则它是相对于文件结尾回退的长度。如果省略了offset和length,则返回整个文件。 示例: 1 2 3 4 5 6 7 8 9 10 11 openGauss=# SELECT pg_read_file('postmaster.pid',0,100); pg_read_file --------------------------------------- 53078 + /srv/BigData/hadoop/data1/dbnode+ 1500022474 + 8000 + /var/run/ FusionInsight + localhost + 2 (1 row) pg_read_binary_file(filename text [, offset bigint, length bigint,missing_ok boolean]) 描述:返回一个二进制文件的内容。 返回值类型:bytea 备注:pg_read_binary_file的功能与pg_read_file类似,除了结果的返回值为bytea类型不一致,相应地不会执行编码检查。与convert_from函数结合,这个函数可以用来读取用指定编码的一个文件。 1 openGauss=# SELECT convert_from(pg_read_binary_file('filename'), 'UTF8'); pg_stat_file(filename text) 描述:返回一个文本文件的状态信息。 返回值类型:record 备注:pg_stat_file返回一条记录,其中包含:文件大小、最后访问时间戳、最后更改时间戳、最后文件状态修改时间戳以及标识传入参数是否为目录的Boolean值。典型的用法: 1 openGauss=# SELECT * FROM pg_stat_file('filename'); 1 openGauss=# SELECT (pg_stat_file('filename')).modification; 示例: 1 2 3 4 5 6 7 8 9 10 11 12 openGauss=# SELECT convert_from(pg_read_binary_file('postmaster.pid'), 'UTF8'); convert_from -------------------------------------- 4881 + /srv/BigData/gaussdb/data1/dbnode+ 1496308688 + 25108 + /opt/user/Bigdata/gaussdb/gaussdb_tmp + * + 25108001 43352069 + (1 row) 1 2 3 4 5 6 7 8 9 openGauss=# SELECT * FROM pg_stat_file('postmaster.pid'); size | access | modification | change | creation | isdir ------+------------------------+------------------------+------------------------ +----------+------- 117 | 2017-06-05 11:06:34+08 | 2017-06-01 17:18:08+08 | 2017-06-01 17:18:08+08 | | f (1 row) 1 2 3 4 5 openGauss=# SELECT (pg_stat_file('postmaster.pid')).modification; modification ------------------------ 2017-06-01 17:18:08+08 (1 row) 父主题: 系统管理函数
  • MY_IND_EXPRESSIONS MY_IND_EXPRESSIONS视图显示当前用户下基于函数的表达式索引的信息。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 MY_IND_EXPRESSIONS字段 名称 类型 描述 table_owner character varying(64) 表的所有者。 table_name character varying(64) 表名。 index_owner character varying(64) 索引的所有者。 index_name character varying(64) 索引名。 column_expression text 定义列的基于函数的索引表达式。 column_position smallint 索引中列的位置。 父主题: 系统视图
  • 简介 对于隐式游标的操作,如定义、打开、取值及关闭操作,都由系统自动地完成,无需用户进行处理。用户只能通过隐式游标的相关属性,来完成相应的操作。在隐式游标的工作区中,所存放的数据是最新处理的一条SQL语句所包含的数据,与用户自定义的显式游标无关。 格式调用为: SQL% INSERT,UPDATE,DELETE,SELECT语句中不必明确定义游标。 兼容O模式下,GUC参数behavior_compat_options为compat_cursor时,隐式游标跨存储过程有效。
  • 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 CREATE TABLE hr.staffs_t1 AS TABLE hr.staffs; CREATE TABLE hr.sections_t1 AS TABLE hr.sections; --删除员工表hr.staffs中某部门的所有员工,如果该部门中已没有员工,则在部门表hr.sections中删除该部门。 CREATE OR REPLACE PROCEDURE proc_cursor3() AS DECLARE V_DEPTNO NUMBER(4) := 100; BEGIN DELETE FROM hr.staffs WHERE section_ID = V_DEPTNO; --根据游标状态做进一步处理 IF SQL%NOTFOUND THEN DELETE FROM hr.sections_t1 WHERE section_ID = V_DEPTNO; END IF; END; / CALL proc_cursor3(); --删除存储过程和临时表 DROP PROCEDURE proc_cursor3; DROP TABLE hr.staffs_t1; DROP TABLE hr.sections_t1;
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全