华为云用户手册

  • 参数说明 config_parameter 可设置的运行时参数的名称。可用的运行时参数可以使用SHOW ALL命令查看。 value config_parameter的新值。可以声明为字符串常量、标识符、数字,或者逗号分隔的列表。DEFAULT用于把这些参数设置为它们的缺省值。 DEFAULT OFF RESET 用户指定的值:需要满足修改参数的取值限制。 FROM CURRENT 取当前会话中的值设置为configuration_parameter的值。 CURRENT_SCHEMA schema CURRENT_SCHEMA用于指定当前的模式。 取值范围:已存在模式名称。如果模式名不存在,会导致CURRENT_SCHEMA值为空。 TIME ZONE timezone 用于指定当前会话的本地时区。 取值范围:有效的本地时区。该选项对应的运行时参数名称为TimeZone,DEFAULT缺省值为PRC。 SCHEMA schema 同CURRENT_SCHEMA。此处的schema是个字符串。 NAMES encoding_name 用于设置客户端的字符编码。等价于set client_encoding to encoding_name。 取值范围:有效的字符编码。该选项对应的运行时参数名称为client_encoding,默认编码为UTF8。 role_name 取值范围:字符串。要符合标识符命名规范。 password 角色的密码。要求符合密码的命名规则。 SESSION AUTHORIZATION 当前会话的用户表示符。 XML OPTION { DOCUMENT | CONTENT } 用于设置XML的解析方式。 取值范围:CONTENT(缺省)、DOCUMENT。 ISOLATION LEVEL 指定事务隔离级别,它决定当一个事务中存在其他并发运行事务时它能够看到什么数据。 取值范围: READ COMMITTED:读已提交隔离级别,只能读到已经提交的数据,而不会读到未提交的数据。这是缺省值。 READ UNCOMMITTED:读未提交隔离级别,指定后的行为和READ COMMITTED行为一致。
  • 语法格式 设置会话的事务参数。 1 2 ALTER SESSION SET [ SESSION CHARACTERIS TICS AS ] TRANSACTION { ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED } } | { READ ONLY | READ WRITE } } [, ...] ; 设置会话的其他运行时参数。 1 2 3 4 5 6 7 8 9 10 ALTER SESSION SET {{config_parameter { { TO | = } { value | DEFAULT } | FROM CURRENT }} | CURRENT_SCHEMA { TO | = } { schema | DEFAULT } | TIME ZONE time_zone | SCHEMA 'schema' | NAMES encoding_name | ROLE role_name PASSWORD 'password' | SESSION AUTHORIZATION { role_name PASSWORD 'password' | DEFAULT } | XML OPTION { DOCUMENT | CONTENT } } ;
  • ecpg预处理以及编译执行 准备嵌入式SQL-C源程序,以.pgc为后缀名,ecpg负责将其转换成可被编译器编译的C语言程序。 生成的C语言程序被编译器编译为可执行文件,运行该可执行文件实现客户端程序访问数据库。示例请参见常用示例章节。 ecpg预处理以及编译处理过程 预处理:ecpg -I $GAUSSHOME/include -o test.c test.pgc ecpg预处理的参数选项如下: ecpg [OPTION]... 其中OPTION参数选项如下: -o OUTFILE:预处理嵌入式SQL-C程序将结果写入OUTFILE,OUTFILE为C语言文件。 -I DIRECTORY:头文件的搜索路径。 -c:预处理嵌入式SQL-C程序自动生成C语言文件。 --version:查看ecpg当前版本。 -C MODE:指定预处理兼容模式,“A”为O兼容。 编译:gcc -I $GAUSSHOME/include/ecpg -I $GAUSSHOME/include -I $GAUSSHOME/include/gaussdb/server/ -L $GAUSSHOME/lib -lecpg -lrt -lpq -lpgtypes -lpthread test_ecpg.c -o test_ecpg 执行:./test ecpg作为编译预处理工具,若在预处理或编译过程中出现找不到头文件或者函数实现的报错信息,可以根据需要指定头文件,或者链接动态库。 ecpg需要gcc、ld等编译预处理工具,建议gcc使用7.3.0版本。 使用ecpg开发应用程序所依赖的其他动态库和头文件,常见的位于$GAUSSHOME/include/libpq, $GAUSSHOME/include。 编译过程中常见的动态库依赖:-lpq、-lpq_ce、-lpthread。若开发过程中需要使用libpq通信库,则需要连接-lpq和-lpq_ce。若开发过程中需要使用多线程连接,则需要连接-lpthread。 父主题: 基于ecpg开发
  • PERF_QUERY 提供当前节点下采集到堆栈信息的名称、树状结构和百分比,如表1所示。需要有monadmin权限。 使用该视图查询堆栈信息之前,需要先执行gs_perf_start函数,采集火焰图数据。 表1 PERF_QUERY字段 名称 类型 描述 backtrace text 堆栈信息树状结构文本。 overhead double precision 当前堆栈信息在整个堆栈采集过程中所占时间比重。 父主题: OS
  • Global Plsql Cache特性函数 invalidate_plsql_object(),invalidate_plsql_object(schema, objname, objtype); 描述:失效Global Plsql Cache全局缓存中的对象,仅在enable_global_plsqlcache = on时可用。调用该函数的用户需要具有SYSADMIN权限。 参数:该函数为重载函数。当无入参时,将所有DATABASE内的所有全局缓存对象失效。 当指定schema、objname、objtype三个参数时可将当前DATABASE内的指定全局缓存对象失效。其中:schema为对象所属的schema名称;objname为对象名称;objtype为对象类型,对象为package类型时值为“package”,对象为函数或存储过程时值为“function”。 示例: 该函数不返回失效结果,可通过gs_glc_memory_detail视图查询,对象未被失效时可在视图中查找到对应的valid状态的行,失效后则没有对应的valid状态行。 invalidate_plsql_object所属的Schema为pg_catalog,但不指定Schema也可调用该函数。 --创建一个包pkg1和函数f2,查询视图缓存信息,状态为valid。 gaussdb=# CREATE SCHEMA testInvalidate; CREATE SCHEMA gaussdb=# SET CURRENT_SCHEMA TO testInvalidate; SET gaussdb=# CREATE OR REPLACE PACKAGE pkg1 AS gaussdb$# var1 VARCHAR; gaussdb$# FUNCTION f1() RETURN VARCHAR; gaussdb$# END pkg1; gaussdb$# / CREATE PACKAGE gaussdb=# CREATE OR REPLACE PACKAGE BODY pkg1 AS gaussdb$# FUNCTION f1() RETURN VARCHAR gaussdb$# IS gaussdb$# BEGIN gaussdb$# var1 := '2'; gaussdb$# RETURN var1; gaussdb$# END; gaussdb$# END pkg1; gaussdb$# / CREATE PACKAGE BODY gaussdb=# CREATE OR REPLACE FUNCTION f2() RETURN VARCHAR gaussdb-# IS gaussdb$# DECLARE gaussdb$# var2 VARCHAR := 'li2'; gaussdb$# BEGIN gaussdb$# var2='22'; gaussdb$# RETURN var2; gaussdb$# END gaussdb$# / CREATE FUNCTION gaussdb=# CALL pkg1.f1(); f1 ---- 2 (1 row) gaussdb=# CALL f2(); f2 ---- 22 (1 row) gaussdb=# SELECT * FROM gs_glc_memory_detail WHERE schema = 'testinvalidate'; contextname | database | schema | type | status | location | env | usedsize | usecount | oid | isspec | searchpath | invalidreason --------------+----------+----------------+------+--------+----------------------+-----+----------+----------+-------+--------+--------------------------------+--------------- GLC_PKG_pkg1 | postgres | testinvalidate | pkg | valid | in_global_hash_table | 0 | 19856 | 1 | 16755 | f | addUser: false, schemas: 16754 | valid GLC_FUNC_f1 | postgres | testinvalidate | func | valid | in_global_hash_table | 0 | 10840 | 1 | 16756 | | addUser: false, schemas: 16754 | valid GLC_FUNC_f2 | postgres | testinvalidate | func | valid | in_global_hash_table | 0 | 12072 | 1 | 16757 | | addUser: false, schemas: 16754 | valid (3 rows) --调用函数,指定schema、函数名、类型即可将pkg1失效,再次查询视图,则没有pkg1对应的valid状态行 gaussdb=# SELECT invalidate_plsql_object('testinvalidate','pkg1','package'); invalidate_plsql_object ------------------------- (1 row) --如果要失效function,参数如下所示 gaussdb=# SELECT invalidate_plsql_object('testinvalidate','f2','function'); invalidate_plsql_object ------------------------- (1 row) --调用时没有入参,则将失效所有缓存对象 gaussdb=# SELECT invalidate_plsql_object(); invalidate_plsql_object ------------------------- (1 row) gs_plsql_memory_object_detail(db_oid, obj_oid, obj_type) 描述:获取存储过程创建的package、function的主要有效内存占用情况。enable_global_plsqlcache = off时该函数显示当前session中的存储过程内存情况,跨session查询暂不支持。调用该函数的用户需要有SYSADMIN权限。 参数:该函数需传入db_oid、obj_oid、obj_type三个参数,如传入参数不匹配,返回空行。具体参数说明见表1。其中db_oid、obj_oid传入0为默认查找cache中所有package、function的有效内存使用情况。 返回值类型:Tuple 表1 gs_plsql_memory_object_detail参数说明 参数列表 类型 描述 取值范围 db_oid uint32 查询数据库oid为db_oid内存储的存储过程的主要有效内存占用情况。0默认为当前缓存中全部数据库实例。 0 - 2^32-1。 obj_oid uint32 查询object的oid。0默认为当前缓存中全部pkg与function。 0 - 2 ^32-1。 obj_type text 查询object的类型,标识查询目标object为package或function。 all:默认全部查询。 pkg:查询满足条件的package有效内存占用。 func:查询满足条件的function有效内存占用。 func_in_pkg:查询满足条件的package中的function的 有效内存占用。 gs_plsql_memory_object_detail函数显示数据库内满足查询条件的有效内存占用情况说明如表2所示。 表2 gs_plsql_memory_object_detail返回值 名称 类型 描述 object_oid uint32 查询内存对象的oid。 context_name text 内存对象名。 item text 查询内存对象项目名。 searchpath text 内存对象访问编译产物的Schema及其他环境变量。 guc uint64 创建对象时的环境参数,即behavior_compat_flags的值。 file text 内存对象创建所在文件。 line uint32 内存对象创建所在文件行数。 size uint32 内存对象大小。 db_oid uint32 查询内存对象所在数据库oid。 示例: --如下用例构造当enable_global_plsqlcache = on时,创建package和function,调用gs_plsql_memory_object_detail获取内存使用占用的情况。 gaussdb=# CREATE OR REPLACE PACKAGE my_package AS gaussdb$# PROCEDURE public_proc(a int, b int); gaussdb$# END my_package; gaussdb$# / CREATE PACKAGE gaussdb=# CREATE OR REPLACE PACKAGE BODY my_package AS gaussdb$# PROCEDURE public_proc(a int, b int) AS gaussdb$# BEGIN gaussdb$# RAISE NOTICE 'a + b = %', a + b; gaussdb$# END; gaussdb$# END my_package; gaussdb$# / CREATE PACKAGE BODY gaussdb=# BEGIN gaussdb$# my_package.public_proc(2, 3); gaussdb$# END; gaussdb$# / NOTICE: a + b = 5 CONTEXT: SQL statement "CALL my_package.public_proc(2,3)" PL/pgSQL function inline_code_block line 2 at PERFORM ANONYMOUS BLOCK EXECUTE gaussdb=# SELECT * FROM gs_plsql_memory_object_detail(0,16716,'pkg'); object_oid | context_name | item | searchpath | guc | file | line | size | db_oid ------------+--------------------+-------------+-------------------------------+-----------------+----------------+------+------+-------- 16716 | GLC_PKG_my_package | pkg | addUser: false, schemas: 2200 | 303465209266176 | pl_package.cpp | 1143 | 1096 | 14584 16716 | GLC_PKG_my_package | invalItems | addUser: false, schemas: 2200 | 303465209266176 | NA | 0 | 0 | 14584 16716 | GLC_PKG_my_package | proc_list | addUser: false, schemas: 2200 | 303465209266176 | list.cpp | 110 | 3168 | 14584 16716 | GLC_PKG_my_package | ndatums | addUser: false, schemas: 2200 | 303465209266176 | pl_package.cpp | 1342 | 8 | 14584 16716 | GLC_PKG_my_package | GSPLSQLType | addUser: false, schemas: 2200 | 303465209266176 | NA | 0 | 0 | 14584 16716 | GLC_PKG_my_package | namespace | addUser: false, schemas: 2200 | 303465209266176 | pl_funcs.cpp | 229 | 240 | 14584 (6 rows) gaussdb=# SELECT * FROM gs_plsql_memory_object_detail(0,16717,'func'); object_oid | context_name | item | searchpath | guc | file | line | size | db_oid ------------+----------------------+------------+-------------------------------+-----------------+--------------+------+------+-------- 16717 | GLC_FUNC_public_proc | function | addUser: false, schemas: 2200 | 303465209266176 | pl_comp.cpp | 1538 | 1800 | 14584 16717 | GLC_FUNC_public_proc | ndatums | addUser: false, schemas: 2200 | 303465209266176 | pl_comp.cpp | 2362 | 6072 | 14584 16717 | GLC_FUNC_public_proc | invalItems | addUser: false, schemas: 2200 | 303465209266176 | NA | 0 | 0 | 14584 16717 | GLC_FUNC_public_proc | exprlist | addUser: false, schemas: 2200 | 303465209266176 | list.cpp | 110 | 320 | 14584 16717 | GLC_FUNC_public_proc | StmtBlock | addUser: false, schemas: 2200 | 303465209266176 | pl_gram.cpp | 696 | 176 | 14584 16717 | GLC_FUNC_public_proc | namespace | addUser: false, schemas: 2200 | 303465209266176 | pl_funcs.cpp | 229 | 1152 | 14584 (6 rows) 父主题: 函数和操作符
  • SUMMARY_FILE_IOSTAT 通过集群内各节点数据文件I/O统计的汇总结果,反映数据的I/O性能,用以发现I/O操作异常等性能问题,如表1所示。 其中phyrds、phywrts、phyblkrd、phyblkwrt、readtim、writetim字段按照各节点的数据累加求和,avgiotim为各节点的平均值(总时长/总次数),lstiotim、maxiowtm取各节点的最大值,miniotim取各节点的最小值。 表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
  • ADM_TAB_PRIVS ADM_TAB_PRIVS视图显示数据库中所有对象的授权信息。默认只有系统管理员权限才可以访问此系统视图,普通用户需要授权才可以访问。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 ADM_TAB_PRIVS字段 名称 类型 描述 grantee character varying(128) 被授予权限的用户或角色的名称。 owner character varying(128) 对象的所有者。 table_name character varying(128) 对象的名称。 grantor character varying(128) 执行授权的用户名。 privilege character varying(40) 对象上的权限,包括USAGE、UPDATE、DELETE、INSERT、CONNECT、SELECT、EXECUTE。 grantable character varying(3) 该授权是否包含GRANT选项。 YES:包含GRANT选项。 NO:不包含GRANT选项。 type character varying(24) 对象的类型,包括NODE GROUP、COLUMN_ENCRYPTION_KEY、PACKAGE、COLUMN、TABLE、VIEW、SEQUENCE、TYPE、INDEX、DATABASE、DIRECTORY、FOREIGN DATA WRAPPER、FOREIGN SERVER、LANGUAGE、SCHEMA、TEMPLATE、FUNCTION、PROCEDURE、TABLESPACE。 hierarchy character varying(3) 暂不支持,值为NULL。 common character varying(3) 暂不支持,值为NULL。 inherited character varying(3) 暂不支持,值为NULL。 父主题: 用户和权限管理
  • DBE_PLDEBUGGER.error_end server端因为存储过程报错断住,可以在debug端调用error_end结束报错断住流程,结束调试流程,返回结束报错断住,停止调试(限制报错断住时使用),如表1所示。 表1 error_end返回值列表 名称 类型 描述 funcoid OUT oid 函数id。 funcname OUT text 函数名。 lineno OUT integer 当前调试运行的下一行行号(固定值:0)。 query OUT text 结束报错断住,停止调试。 父主题: DBE_PLDEBUGGER Schema
  • PGXC_NODE_ENV PGXC_NODE_ENV视图显示集群中所有节点的环境变量信息。该视图只有monitor admin和sysadmin权限可以查看。具体字段信息如表1所示。 表1 PGXC_NODE_ENV字段 名称 类型 描述 node_name1 text 集群中节点的名称。 host1 text 集群中节点的主机名称。 process1 integer 集群中节点的进程号。 port1 integer 集群中节点的端口号。 installpath1 text 集群中节点的安装目录。 datapath1 text 集群中节点的数据目录。 log_directory1 text 集群中节点的日志目录。 父主题: 其他系统视图
  • 示例 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 --创建表空间。 gaussdb=# CREATE TABLESPACE tbs_location1 RELATIVE LOCATION 'test_tablespace/test_tablespace_1'; --创建表空间指定最大值。 gaussdb=# CREATE TABLESPACE tbs_location2 RELATIVE LOCATION 'test_tablespace/test_tablespace_2' MAXSIZE '10G'; --查询表空间信息。 gaussdb=# SELECT * FROM pg_tablespace WHERE spcname = 'tbs_location2'; spcname | spcowner | spcacl | spcoptions | spcmaxsize | relative ---------------+----------+--------+------------+------------+---------- tbs_location2 | 10 | | | 10485760 K | t (1 row) --创建用户joe。 gaussdb=# CREATE ROLE joe IDENTIFIED BY '********'; --创建表空间,且所有者指定为用户joe。 gaussdb=# CREATE TABLESPACE tbs_location3 OWNER joe RELATIVE LOCATION 'test_tablespace/test_tablespace_3'; --创建表空间指定绝对路径(请根据实际情况修改路径)。 gaussdb=# CREATE TABLESPACE tbs_location4 LOCATION '/tmp/tbs_location4'; --删除表空间及用户。 gaussdb=# DROP TABLESPACE tbs_location1; gaussdb=# DROP TABLESPACE tbs_location2; gaussdb=# DROP TABLESPACE tbs_location3; gaussdb=# DROP TABLESPACE tbs_location4; gaussdb=# DROP ROLE joe;
  • 语法格式 1 2 3 CREATE TABLESPACE tablespace_name [ OWNER user_name ] [ RELATIVE ] LOCATION 'directory' [ MAXSIZE 'space_size' ] [with_option_clause]; 其中普通表空间的with_option_clause为: 1 WITH ({filesystem= { ' general ' | " general " | general } | address = { ' ip:port [, ... ] ' | " ip:port [, ... ] " } | cfgpath = { ' path ' | " path " } | storepath = { ' rootpath ' | " rootpath " } | random_page_cost = { ' value ' | " value " | value } | seq_page_cost = { ' value ' | " value " | value }}[, ... ])
  • 注意事项 系统管理员或者继承了内置角色gs_role_tablespace权限的用户可以创建表空间。 不允许在一个事务块内部执行CREATE TABLESPACE。 执行CREATE TABLESPACE失败,如果内部创建目录(文件)操作成功了就会产生残留的目录(文件),重新创建时需要用户手动清理表空间指定的目录下残留的内容。如果在创建过程中涉及到数据目录下的表空间软连接残留,需要先将软连接的残留文件删除,再重新执行OM相关操作。 CREATE TABLESPACE不支持两阶段事务,如果部分节点执行失败,不支持回滚。 在公有云场景下一般不建议用户使用自定义的表空间。 原因:用户自定义表空间通常配合主存(即默认表空间所在的存储设备,如磁盘)以外的其它存储介质使用,以隔离不同业务可以使用的I/O资源,而在公有云场景下,存储设备都是采用标准化的配置,无其它可用的存储介质,自定义表空间使用不当不利于系统长稳运行以及影响整体性能,因此建议使用默认表空间即可。
  • GLOBAL_CKPT_STATUS GLOBAL_CKPT_STATUS视图用于显示数据库所有实例的检查点信息和各类日志刷页情况,如表1所示。多租场景下,non-PDB访问该视图时返回全部信息,PDB访问该视图时返回空列表。 表1 GLOBAL_CKPT_STATUS字段 名称 类型 描述 node_name text 实例名称。 ckpt_redo_point text 当前实例的检查点。 ckpt_clog_flush_num bigint 从启动到当前时间clog刷盘页面数。 ckpt_csnlog_flush_num bigint 从启动到当前时间csnlog刷盘页面数。 ckpt_multixact_flush_num bigint 从启动到当前时间multixact刷盘页面数。 ckpt_predicate_flush_num bigint 从启动到当前时间predicate刷盘页面数。 ckpt_twophase_flush_num bigint 从启动到当前时间twophase刷盘页面数。 父主题: Utility
  • 注意事项 须使用CASCADE级联删除依赖用户的对象(除数据库外)。当删除用户的级联对象时,如果级联对象处于锁定状态,则此级联对象无法被删除,直到对象被解锁或锁定级联对象的线程被终止。 在数据库中删除用户时,如果依赖用户的对象在其他数据库中或者依赖用户的对象是其他数据库,请用户先手动删除其他数据库中的依赖对象或直接删除依赖数据库,再删除用户。即DROP USER不支持跨数据库进行级联删除。 在删除用户时,需要先删除该用户拥有的所有对象并且收回该用户在其他对象上的权限,或者通过指定CASCADE级联删除该用户拥有的对象和被授予的权限。 在多租户场景下,删除组用户时,业务用户也会同时被删除,如果指定CASCADE级联删除,那么删除业务用户时同时也指定CASCADE。如果在删除某个用户失败时,会报错,同时其他用户也无法成功删除。 如果用户下存在创建GDS外表时指定的错误表,则无法通过DROP USER指定CASCADE关键字直接删除用户。
  • 参数说明 IF EXISTS 使用该参数时,如果指定的用户不存在,发出一个notice而不是抛出一个错误,故使用该参数可以避免出现报错。 user_name 待删除的用户名。 取值范围:数据库中已存在的用户名。 CASCADE | RESTRICT CASCADE:级联删除依赖用户的对象,并收回授予该用户的权限。 RESTRICT:如果用户还有任何依赖的对象或被授予了其他对象的权限,则拒绝删除该用户(缺省行为)。 在 GaussDB 中,存在一个配置参数enable_kill_query,此参数在配置文件gaussdb.conf中。此参数影响级联删除用户对象的行为: 当参数enable_kill_query为on ,且使用CASCADE模式删除用户时,会自动kill锁定用户级联对象的线程,并删除用户。 当参数enable_kill_query为off,且使用CASCADE模式删除用户时,会等待锁定级联对象的线程结束之后再删除用户。
  • 示例 --创建用户jim,登录密码为********。 gaussdb=# CREATE USER jim PASSWORD '********'; --删除不存在的tom用户。 gaussdb=# DROP USER IF EXISTS tom; NOTICE: role "tom" does not exist, skipping DROP ROLE --删除用户。 gaussdb=# DROP USER jim CASCADE;
  • 示例 EXEC SQL ALLOCATE DESCRIPTOR mydesc; EXEC SQL PREPARE stmt1 FROM :sql_stmt; EXEC SQL DESCRIBE stmt1 INTO SQL DESCRIPTOR mydesc; EXEC SQL GET DESCRIPTOR mydesc VALUE 1 :charvar = NAME; EXEC SQL DEALLOCATE DESCRIPTOR mydesc;
  • SUMMARY_STAT_BAD_BLOCK 获得集群内各节点的表、索引等文件的读取失败信息汇总求和结果(在CN节点使用。对不同DN的统计信息汇总求和,first_time取最早的时间,last_time取最新的时间),如表1所示。 表1 SUMMARY_STAT_BAD_BLOCK字段 名称 类型 描述 databaseid integer database的oid。 tablespaceid integer tablespace的oid。 relfilenode integer relation的file node。 forknum bigint fork编号。 error_count bigint error的数量。 first_time timestamp with time zone 页面损坏第一次出现的时间。 last_time timestamp with time zone 页面损坏最后出现的时间。 父主题: Object
  • 示例 --创建源表及触发表。 gaussdb=# CREATE TABLE test_trigger_src_tbl(id1 INT, id2 INT, id3 INT); gaussdb=# CREATE TABLE test_trigger_des_tbl(id1 INT, id2 INT, id3 INT); INSERT触发器的使用。 --创建insert触发器函数。 gaussdb=# CREATE OR REPLACE FUNCTION tri_insert_func() RETURNS TRIGGER AS $$ DECLARE BEGIN INSERT INTO test_trigger_des_tbl VALUES(NEW.id1, NEW.id2, NEW.id3); RETURN NEW; END $$ LANGUAGE plpgsql; --创建INSERT触发器。 gaussdb=# CREATE TRIGGER insert_trigger BEFORE INSERT ON test_trigger_src_tbl FOR EACH ROW EXECUTE PROCEDURE tri_insert_func(); --执行INSERT触发事件并检查触发结果。 gaussdb=# INSERT INTO test_trigger_src_tbl VALUES(100,200,300); gaussdb=# SELECT * FROM test_trigger_src_tbl; id1 | id2 | id3 -----+-----+----- 100 | 200 | 300 (1 row) gaussdb=# SELECT * FROM test_trigger_des_tbl; //查看触发操作是否生效。 id1 | id2 | id3 -----+-----+----- 100 | 200 | 300 (1 row) 匿名块和OR REPLACE语法创建触发器。 --使用匿名块语法创建INSERT触发器。 gaussdb=# CREATE TRIGGER insert_trigger_with_anonyblock BEFORE INSERT ON test_trigger_src_tbl FOR EACH ROW DECLARE BEGIN INSERT INTO test_trigger_des_tbl VALUES(NEW.id1, NEW.id2, NEW.id3); RETURN NEW; END; / --使用OR REPLACE语法创建INSERT触发器。 gaussdb=# CREATE OR REPLACE TRIGGER insert_trigger_with_anonyblock BEFORE INSERT ON test_trigger_src_tbl FOR EACH ROW DECLARE BEGIN INSERT INTO test_trigger_des_tbl VALUES(NEW.id1, NEW.id2, NEW.id3); RETURN NEW; END; / --删除触发器。 gaussdb=# DROP TRIGGER insert_trigger_with_anonyblock ON test_trigger_src_tbl; -- 会将隐式创建的函数insert_trigger_with_anonyblock一起删除 UPDATE触发器的使用。 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 --创建UPDATE触发器函数。 gaussdb=# CREATE OR REPLACE FUNCTION tri_update_func() RETURNS TRIGGER AS $$ DECLARE BEGIN UPDATE test_trigger_des_tbl SET id3 = NEW.id3 WHERE id1=OLD.id1; RETURN OLD; END $$ LANGUAGE plpgsql; --创建UPDATE触发器。 gaussdb=# CREATE TRIGGER update_trigger AFTER UPDATE ON test_trigger_src_tbl FOR EACH ROW EXECUTE PROCEDURE tri_update_func(); --执行UPDATE触发事件并检查触发结果。 gaussdb=# UPDATE test_trigger_src_tbl SET id3=400 WHERE id1=100; gaussdb=# SELECT * FROM test_trigger_src_tbl; id1 | id2 | id3 -----+-----+----- 100 | 200 | 400 (1 row) gaussdb=# SELECT * FROM test_trigger_des_tbl; //查看触发操作是否生效。 id1 | id2 | id3 -----+-----+----- 100 | 200 | 400 (1 row) DELETE触发器的使用。 --创建DELETE触发器函数。 gaussdb=# CREATE OR REPLACE FUNCTION TRI_DELETE_FUNC() RETURNS TRIGGER AS $$ DECLARE BEGIN DELETE FROM test_trigger_des_tbl WHERE id1=OLD.id1; RETURN OLD; END $$ LANGUAGE plpgsql; --创建DELETE触发器。 gaussdb=# CREATE TRIGGER delete_trigger BEFORE DELETE ON test_trigger_src_tbl FOR EACH ROW EXECUTE PROCEDURE tri_delete_func(); --执行DELETE触发事件并检查触发结果。 gaussdb=# DELETE FROM test_trigger_src_tbl WHERE id1=100; gaussdb=# SELECT * FROM test_trigger_src_tbl; id1 | id2 | id3 -----+-----+----- (0 rows) gaussdb=# SELECT * FROM test_trigger_des_tbl; //查看触发操作是否生效。 id1 | id2 | id3 -----+-----+----- (0 rows) 修改触发器名称。 1 2 --修改触发器的名称。 gaussdb=# ALTER TRIGGER delete_trigger ON test_trigger_src_tbl RENAME TO delete_trigger_renamed; 禁用触发器。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 --禁用insert_trigger触发器。 gaussdb=# ALTER TABLE test_trigger_src_tbl DISABLE TRIGGER insert_trigger; gaussdb=# INSERT INTO test_trigger_src_tbl VALUES(100,200,300); gaussdb=# SELECT * FROM test_trigger_src_tbl; id1 | id2 | id3 -----+-----+----- 100 | 200 | 300 (1 row) gaussdb=# SELECT * FROM test_trigger_des_tbl; //可以看到触发器没有生效。 id1 | id2 | id3 -----+-----+----- (0 rows) --禁用当前表上所有触发器。 gaussdb=# ALTER TABLE test_trigger_src_tbl DISABLE TRIGGER ALL; 删除触发器。 1 2 3 4 5 gaussdb=# DROP TRIGGER insert_trigger ON test_trigger_src_tbl; gaussdb=# DROP TRIGGER update_trigger ON test_trigger_src_tbl; gaussdb=# DROP TRIGGER delete_trigger_renamed ON test_trigger_src_tbl; 删除函数。 1 2 3 4 5 gaussdb=# DROP FUNCTION tri_insert_func; gaussdb=# DROP FUNCTION tri_update_func; gaussdb=# DROP FUNCTION tri_delete_func; 1 2 3 --删除源表及触发表。 gaussdb=# DROP TABLE test_trigger_src_tbl; gaussdb=# DROP TABLE test_trigger_des_tbl;
  • 参数说明 IF EXISTS 如果指定的触发器不存在,则发出一个notice而不是抛出一个错误。 trigger_name 要删除的触发器名称。 取值范围:已存在的触发器。 table_name 要删除的触发器所在的表名称。 取值范围:已存在的含触发器的表。 CASCADE | RESTRICT CASCADE:级联删除依赖此触发器的对象。 RESTRICT:如果有依赖对象存在,则拒绝删除此触发器。此选项为缺省值。
  • 模式级字符集和字符序 创建模式并指定默认字符集和字符序,创建模式请参见CREATE SCHEMA。 CREATE SCHEMA schema_name [ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ] [ [DEFAULT] COLLATE [ = ] default_collation ]; 修改模式的默认字符集、字符序属性,修改模式请参见ALTER SCHEMA。 ALTER SCHEMA schema_name [ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ] [ [DEFAULT] COLLATE [ = ] default_collation ]; 参数说明: schema_name 模式名称。 取值范围:字符串,要符合标识符命名规范。 default_charset 指定模式的默认字符集,单独指定时会将模式的默认字符序设置为指定的字符集的默认字符序。 default_collation 指定模式的默认字符序,单独指定时会将模式的默认字符集设置为指定的字符序对应的字符集。 GaussDB通过以下方式选择模式的字符集和字符序: 如果同时指定了default_charset和default_collation,则使用字符集default_charset和字符序default_collation,且default_charset和default_collation需要对应,不对应时会报错。 如果仅指定了default_charset,则使用字符集default_charset及其默认字符序。 如果仅指定了default_collation,则使用default_collation字符序和其对应的字符集。 如果既不指定default_charset也不指定default_collation,则该模式没有默认字符集和默认字符序。 default_charset仅支持指定为带有默认字符序的字符集,如果指定的字符集没有默认字符序则报错。 default_collation仅支持指定为MYSQL模式(即sql_compatibility = 'MYSQL')下的字符序,指定其他字符序报错。 暂不支持新建SCHEMA的字符集、字符序与数据库的server_encoding不同。 示例: 1 2 3 4 5 6 7 8 9 10 11 -- 仅设置字符集,字符序为字符集的默认字符序 gaussdb=# CREATE SCHEMA test CHARSET utf8; -- 仅设置字符序,字符集为字符序关联的字符集 gaussdb=# CREATE SCHEMA test COLLATE utf8_bin; -- 同时设置字符集与字符序,字符集和字符序需对应 gaussdb=# CREATE SCHEMA test CHARSET utf8 COLLATE utf8_bin; -- 将test的默认字符集修改为utf8mb4,默认字符序修改为utf8mb4_bin。 gaussdb=# ALTER SCHEMA test CHARSET utf8mb4 COLLATE utf8mb4_bin; 父主题: 字符集与字符序
  • SUMMARY_STATIO_ALL_INDEXES SUMMARY_STATIO_ALL_INDEXES视图包含数据库中的每个索引行,显示特定索引I/O的统计汇总结果,如表1所示。 表1 SUMMARY_STATIO_ALL_INDEXES字段 名称 类型 描述 schemaname name 该索引的模式名。 relname name 该索引的表名。 indexrelname name 索引名称。 idx_blks_read numeric 从索引中读取的磁盘块数。 idx_blks_hit numeric 索引命中缓存数。 last_updated timestamp with time zone 视图中该索引监控数据最后一次更新的时间。 父主题: Cache/IO
  • MY_TAB_STATISTI CS MY_TAB_STATISTICS视图显示数据库中有关当前用户拥有的表的统计信息。所有用户均可访问该视图,该视图同时存在于PG_CATALOG和SYS Schema下。具体字段信息如表1所示。 表1 MY_TAB_STATISTICS字段 名称 类型 描述 table_name character varying(128) 表名。 partition_name character varying(128) 暂不支持,值为NULL。 partition_position numeric 暂不支持,值为NULL。 subpartition_name character varying(128) 暂不支持,值为NULL。 subpartition_position numeric 暂不支持,值为NULL。 object_type character varying(12) 对象类型: TABLE PARTITION SUBPARTITION num_rows numeric 对象中的行数。 blocks numeric 暂不支持,值为NULL。 empty_blocks numeric 暂不支持,值为NULL。 avg_space numeric 暂不支持,值为NULL。 chain_cnt numeric 暂不支持,值为NULL。 avg_row_len integer 平均行长,包括行开销。 avg_space_freelist_blocks numeric 暂不支持,值为NULL。 num_freelist_blocks numeric 暂不支持,值为NULL。 avg_cached_blocks numeric 暂不支持,值为NULL。 avg_cache_hit_ratio numeric 暂不支持,值为NULL。 im_imcu_count numeric 暂不支持,值为NULL。 im_block_count numeric 暂不支持,值为NULL。 im_stat_update_time timestamp(6) without time zone 暂不支持,值为NULL。 scan_rate numeric 暂不支持,值为NULL。 sample_size numeric 分析表格时使用的样本量。 last_analyzed timestamp with time zone 最近分析表的日期。数据库重启后,数据会丢失。 global_stats character varying(3) 暂不支持,值为NULL。 user_stats character varying(3) 暂不支持,值为NULL。 stattype_locked character varying(5) 暂不支持,值为NULL。 stale_stats character varying(7) 暂不支持,值为NULL。 notes character varying(25) 暂不支持,值为NULL。 scope character varying(7) 暂不支持,默认值SHARED。 父主题: 其他系统视图
  • ADM_SEQUEN CES ADM_SEQUENCES视图显示数据库中所有序列的信息。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_SEQUENCES字段 名称 类型 描述 sequence_owner character varying(64) 序列的所有者。 sequence_name character varying(64) 序列名称。 min_value int16 序列的最小值。 max_value int16 序列的最大值。 increment_by int16 序列的递增值。 last_number int16 该序列从GTM中一次性批量申请的最后一个值。 cache_size int16 序列磁盘缓存大小。 cycle_flag character(1) 序列是否是循环序列,取值为Y或N: Y:是循环序列。 N:不是循环序列。 父主题: 其他系统视图
  • PG_STATIO_SYS_INDEXES PG_STATIO_SYS_INDEXES视图显示命名空间中所有系统表索引的I/O状态信息。 表1 PG_STATIO_SYS_INDEXES字段 名称 类型 描述 relid oid 该索引所在的表的OID。 indexrelid oid 该索引的OID。 schemaname name 该索引的模式名。 relname name 该索引的表名。 indexrelname name 索引名称。 idx_blks_read bigint 从索引中读取的磁盘块数。 idx_blks_hit bigint 索引命中缓存数。 父主题: 其他系统视图
  • PG_NAMESPACE PG_NAMESPACE系统表存储名称空间,即存储schema相关的信息。如果开启数据库对象隔离属性,用户只能查看自己有权限访问的schema信息。 表1 PG_NAMESPACE字段 名称 类型 描述 oid oid 行标识符(隐含字段,必须明确选择)。 nspname name 名称空间的名称。 nspowner oid 名称空间的所有者。 nsptimeline bigint 在DN上创建此命名空间时的时间线。此字段为内部使用,仅在DN上有效。 nspacl aclitem[] 访问权限。具体请参见GRANT和REVOKE。 in_redistribution "char" 是否处于重发布状态。 nspblockchain boolean 该模式是否为防篡改模式。 true:该模式为防篡改模式。 false:该模式为非防篡改模式。 nspcollation oid 名称空间的默认字符序(仅在sql_compatibility='MYSQL'时可能有值)。 父主题: 其他系统表
  • GS_ENCRYPTED_COLUMNS GS_ENCRYPTED_COLUMNS系统表记录密态等值特性中表的加密列相关信息,每条记录对应一条加密列信息。 表1 GS_ENCRYPTED_COLUMNS字段 名称 类型 描述 oid oid 行标识符(隐含字段)。 rel_id oid 表的OID。 column_name name 加密列的名称。 column_key_id oid 外键,列加密密钥的OID。 encryption_type tinyint 加密类型,取值为2(DETERMINISTIC)或者1(RANDOMIZED)。 data_type_original_oid oid 加密列的原始数据类型id,参考系统表PG_TYPE中的oid。 data_type_original_mod integer 加密列的原始数据类型修饰符,参考系统表PG_ATTRIBUTE中的atttypmod。其值对那些不需要的类型data_type_original_mod通常为-1。 create_date timestamp without time zone 创建加密列的时间。 父主题: 密态等值查询
  • cidr和inet函数 函数abbrev,host,text主要是为了提供可选的显示格式。 abbrev(inet) 描述:缩写显示格式文本。 返回类型:text 示例: 1 2 3 4 5 gaussdb=# SELECT abbrev(inet '10.1.0.0/16') AS RESULT; result ------------- 10.1.0.0/16 (1 row) abbrev(cidr) 描述:缩写显示格式文本。 返回类型:text 示例: 1 2 3 4 5 gaussdb=# SELECT abbrev(cidr '10.1.0.0/16') AS RESULT; result --------- 10.1/16 (1 row) broadcast(inet) 描述:网络广播地址。 返回类型:inet 示例: 1 2 3 4 5 gaussdb=# SELECT broadcast('192.168.1.5/24') AS RESULT; result ------------------ 192.168.1.255/24 (1 row) family(inet) 描述:抽取地址族,4为IPv4,6为IPv6。 返回类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT family('127.0.0.1') AS RESULT; result -------- 4 (1 row) host(inet) 描述:将主机地址类型抽出为文本。 返回类型:text 示例: 1 2 3 4 5 gaussdb=# SELECT host('192.168.1.5/24') AS RESULT; result ------------- 192.168.1.5 (1 row) hostmask(inet) 描述:为网络构造主机掩码。 返回类型:inet 示例: 1 2 3 4 5 gaussdb=# SELECT hostmask('192.168.23.20/30') AS RESULT; result --------- 0.0.0.3 (1 row) masklen(inet) 描述:抽取子网掩码长度。 返回类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT masklen('192.168.1.5/24') AS RESULT; result -------- 24 (1 row) netmask(inet) 描述:为网络构造子网掩码。 返回类型:inet 示例: 1 2 3 4 5 gaussdb=# SELECT netmask('192.168.1.5/24') AS RESULT; result --------------- 255.255.255.0 (1 row) network(inet) 描述:抽取地址的网络部分。 返回类型:cidr 示例: 1 2 3 4 5 gaussdb=# SELECT network('192.168.1.5/24') AS RESULT; result ---------------- 192.168.1.0/24 (1 row) set_masklen(inet, int) 描述:为inet数值设置子网掩码长度。 返回类型:inet 示例: 1 2 3 4 5 gaussdb=# SELECT set_masklen('192.168.1.5/24', 16) AS RESULT; result ---------------- 192.168.1.5/16 (1 row) set_masklen(cidr, int) 描述:为cidr数值设置子网掩码长度。 返回类型:cidr 示例: 1 2 3 4 5 gaussdb=# SELECT set_masklen('192.168.1.0/24'::cidr, 16) AS RESULT; result ---------------- 192.168.0.0/16 (1 row) text(inet) 描述:把IP地址和掩码长度抽取为文本。 返回类型:text 示例: 1 2 3 4 5 gaussdb=# SELECT text(inet '192.168.1.5') AS RESULT; result ---------------- 192.168.1.5/32 (1 row)
  • 执行SQL语句 为了帮助用户实现与数据库的交互,ODBC提供执行SQL语句的相关API如表1所示。 表1 相关API说明 功能 API 设置语句属性 SQLSetStmtAttr 为执行SQL语句做准备 SQLPrepare 执行一条准备好的SQL语句 SQLExecute 绑定SQL语句的参数标志和缓冲区 SQLBindParameter 直接执行SQL语句 SQLExecDirect ODBC为应用程序与数据库的中心层,负责把应用程序发出的SQL指令传到数据库当中,自身并不解析SQL语法。故在应用程序中写入带有保密信息的SQL语句时(如明文密码),保密信息会被暴露在驱动日志中。 数据库中收到的一次执行请求(不在事务块中),如果含有多条语句,将会被打包成一个事务,如果其中有一个语句失败,那么整个请求都将会被回滚。 示例如下(完整示例请参考获取和处理数据库中的数据): // 设置语句属性。 SQLSetStmtAttr(V_OD_hstmt, SQL_ATTR_QUERY_TIMEOUT, (SQLPOINTER *)3, 0); // 申请语句句柄。 SQLAllocHandle(SQL_HANDLE_STMT, V_OD_hdbc, &V_OD_hstmt); // 直接执行SQL语句。 SQLExecDirect(V_OD_hstmt, "drop table IF EXISTS customer_t1", SQL_NTS); SQLExecDirect(V_OD_hstmt, "CREATE TABLE customer_t1(c_customer_sk INTEGER, c_customer_name VARCHAR(32));", SQL_NTS); SQLExecDirect(V_OD_hstmt, "insert into customer_t1 values(25, 'li')", SQL_NTS); // 准备执行。 SQLPrepare(V_OD_hstmt, "insert into customer_t1 values(?)", SQL_NTS); // 绑定参数。 SQLBindParameter(V_OD_hstmt,1, SQL_PA RAM _INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &value, 0, NULL); // 执行准备好的语句。 SQLExecute(V_OD_hstmt); SQLExecDirect(V_OD_hstmt, "select c_customer_sk from customer_t1", SQL_NTS); 父主题: 开发步骤
  • 注意事项 只有server的所有者或者被授予了server的ALTER权限的用户才可以执行ALTER SERVER命令,系统管理员默认拥有该权限。但要修改server的所有者,当前用户必须是该server的所有者或者系统管理员,且该用户是新所有者角色的成员。 OPTIONS中的敏感字段(如password、secret_access_key)在使用多层引号时,语义和不带引号的场景是不同的,因此不会被识别为敏感字段进行脱敏。
共100000条