华为云用户手册

  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -- 创建一个资源池,其控制组指定为"DefaultClass"组下属的"High" Timeshare Workload控制组。 postgres=# CREATE RESOURCE POOL pool1 WITH (CONTROL_GROUP="High"); -- 创建一个负载组,关联已创建的资源池。 postgres=# CREATE WORKLOAD GROUP wg_hr1 USING RESOURCE POOL pool1; --创建一个默认应用映射组,关联默认的负载组。 postgres=# CREATE APP WORKLOAD GROUP MAPPING app_wg_map1; -- 更新一个应用映射组关联的负载组名称。 postgres=# ALTER APP WORKLOAD GROUP MAPPING app_wg_map1 WITH(WORKLOAD_GPNAME=wg_hr1); --删除应用映射组。 postgres=# DROP APP WORKLOAD GROUP MAPPING app_wg_map1; --删除负载组。 postgres=# DROP WORKLOAD GROUP wg_hr1; --删除资源池。 postgres=# DROP RESOURCE POOL pool1;
  • 参数说明 INDEX 重新建立指定的索引。 INTERNAL TABLE 重建列存表或Hadoop内表的Desc表的索引,如果表有从属的"TOAST"表,则这个表也会重建索引。 TABLE 重新建立指定表的所有索引,如果表有从属的"TOAST"表,则这个表也会重建索引。 DATABASE 重建当前数据库里的所有索引。 SYSTEM 在当前数据库上重建所有系统表上的索引。不会处理在用户表上的索引。 name 需要重建索引的索引、表、数据库的名称。表和索引可以有模式修饰。 REINDEX DATABASE和SYSTEM只能重建当前数据库的索引,所以name必须和当前数据库名称相同。 FORCE 废弃选项,仅为保持前向兼容,故继续保留。 partition_name 需要重建索引的分区的名称或者索引分区的名称。 取值范围: 如果前面是REINDEX INDEX,则这里应该指定索引分区的名称; 如果前面是REINDEX TABLE,则这里应该指定分区的名称; 如果前面是REINDEX INTERNAL TABLE,则这里应该指定列存分区表的分区的名称。 REINDEX DATABASE和SYSTEM这种形式的重建索引不能在事务块中执行。
  • 优化说明 此优化的核心就是消除子查询。分析业务场景发现a.ca_address_sk不为null,那么从SQL语义出发,可以等价改写SQL为: 1 2 3 4 5 select count(*) from customer_address_001 a4, customer_address_001 a where a4.ca_address_sk = a.ca_address_sk group by a.ca_address_sk; 为了保证改写的等效性,在customer_address_001. ca_address_sk加了not null约束。
  • 背景信息 索引可以提高数据的访问速度,但同时也增加了插入、更新和删除操作的处理时间。所以是否要为表增加索引,索引建立在哪些字段上,是创建索引前必须要考虑的问题。需要分析应用程序的业务处理、数据使用、经常被用作查询的条件或者被要求排序的字段来确定是否建立索引。 索引建立在数据库表中的某些列上。因此,在创建索引时,应该仔细考虑在哪些列上创建索引。 在经常需要搜索查询的列上创建索引,可以加快搜索的速度。 在作为主键的列上创建索引,强制该列的唯一性和组织表中数据的排列结构。 在经常使用连接的列上创建索引,这些列主要是一些外键,可以加快连接的速度。 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。 在经常使用WHERE子句的列上创建索引,加快条件的判断速度。 为经常出现在关键字ORDER BY、GROUP BY、DISTINCT后面的字段建立索引。 索引创建成功后,系统会自动判断何时引用索引。当系统认为使用索引比顺序扫描更快时,就会使用索引。 索引创建成功后,必须和表保持同步以保证能够准确地找到新数据,这样就增加了数据操作的负荷。因此请定期删除无用的索引。
  • 范围函数 numrange(numeric, numeric, [text]) 描述:表示一个范围。 返回类型:范围元素类型 示例: 1 2 3 4 5 6 7 8 9 10 postgres=# SELECT numrange(1.1,2.2) AS RESULT; result -------- [1.1,2.2) (1 row) postgres=# SELECT numrange(1.1,2.2, '()') AS RESULT; result -------- (1.1,2.2) (1 row) lower(anyrange) 描述:范围的下界。 返回类型:范围元素类型 示例: 1 2 3 4 5 postgres=# SELECT lower(numrange(1.1,2.2)) AS RESULT; result -------- 1.1 (1 row) upper(anyrange) 描述:范围的上界 返回类型:范围元素类型 示例: 1 2 3 4 5 postgres=# SELECT upper(numrange(1.1,2.2)) AS RESULT; result -------- 2.2 (1 row) isempty(anyrange) 描述:范围是否为空 返回类型:Boolean 示例: 1 2 3 4 5 postgres=# SELECT isempty(numrange(1.1,2.2)) AS RESULT; result -------- f (1 row) lower_inc(anyrange) 描述:是否包含下界 返回类型:Boolean 示例: 1 2 3 4 5 postgres=# SELECT lower_inc(numrange(1.1,2.2)) AS RESULT; result -------- t (1 row) upper_inc(anyrange) 描述:是否包含上界 返回类型:Boolean 示例: 1 2 3 4 5 postgres=# SELECT upper_inc(numrange(1.1,2.2)) AS RESULT; result -------- f (1 row) lower_inf(anyrange) 描述:下界是否为无穷 返回类型:Boolean 示例: 1 2 3 4 5 postgres=# SELECT lower_inf('(,)'::daterange) AS RESULT; result -------- t (1 row) upper_inf(anyrange) 描述:上界是否为无穷 返回类型:Boolean 示例: 1 2 3 4 5 postgres=# SELECT upper_inf('(,)'::daterange) AS RESULT; result -------- t (1 row)
  • 步骤3:在GaussDB数据库中创建外表 使用SQL客户端工具连接GaussDB数据库。 根据需要导入数据信息表1,创建如下外表: 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 postgres=# DROP FOREIGN TABLE IF EXISTS product_info_ext; postgres=# CREATE FOREIGN TABLE product_info_ext ( product_price integer not null, product_id char(30) not null, product_time date , product_level char(10) , product_name varchar(200) , product_type1 varchar(20) , product_type2 char(10) , product_monthly_sales_cnt integer , product_comment_time date , product_comment_num integer , product_comment_content varchar(200) ) SERVER gsmpp_server OPTIONS( LOCATION 'gsfs://192.168.0.90:5000/*', FORMAT 'CSV' , DELIMITER ',', ENCODING 'utf8', HEADER 'false', FILL_MISSING_FIELDS 'true', IGNORE_EXTRA_DATA 'true' ) READ ONLY LOG INTO product_info_err PER NODE REJECT LIMIT 'unlimited'; 返回如下信息表示创建成功: 1 CREATE FOREIGN TABLE 表1 外表各项的设置说明如下 设置项 值 说明 SERVER gsmpp_server 无需修改,即固定设为gsmpp_server。 LOCATION gsfs://192.168.0.90:5000/* 数据源文件位置。 若使用SSL加密传输时,请使用gsfss协议。即为gsfss://192.168.0.90:5000/* FORMAT CSV 数据源文件格式。 ENCODING UTF-8 数据编码格式。 DELIMITER 英文逗号 字段分隔符。 HEADER false(默认值) 此参数用于指定数据文件是否包含标题行。该参数只针对CSV和FIXED格式的数据文件有效。准备数据源文件中的数据文件第一行不是标题行(即表头),故设为“false”。 FILL_MISSING_FIELDS true 当数据导入时,数据源文件中一行的最后一个字段缺失的处理方式。默认为false/off。本教程中设为“true”。 true/on:表示最后一个字段缺失时,把最后一个字段的值设置为NULL,不报错。 false/off:表示最后一个字段缺失时,做如下报错提示:missing data for column "tt"。 例如,源数据文件product_info2.csv中第2条记录的最后一个字段“product_comment_content”缺失。当FILL_MISSING_FIELDS使用false/off时,导入数据时错误表中会有类似如下的错误信息: missing data for column "product_comment_content" IGNORE_EXTRA_DATA true 数据源文件中的字段比外表定义列数多时,是否忽略多出的列。默认为false/off。本教程中设为“true”。 true/on:数据源文件中字段比外表定义列数多,则忽略行尾多出来的列。不报错 false/off:若数据源文件中字段比外表定义列数多,做如下报错提示:extra data after last expected column。 例如,源数据文件product_info2.csv中第3条记录比外表定义列数多。当IGNORE_EXTRA_DATA设为false/off时,导入数据时错误表中会有类似如下的错误信息: extra data after last expected column PER NODE REJECT LIMIT 'value' unlimited 指定本次数据导入过程中每个DN实例上允许出现的数据格式错误的数量,如果有一个DN实例上的错误数量大于设定值,本次导入失败,报错退出。 本教程设置为“unlimited”,即接受导入过程中所有数据格式错误。 READ ONLY - 外表的语法定义通用于导入数据到GaussDB集群和从集群导出数据。数据导入集群时,请将外表设为READ ONLY;导出时,请设为WRITE ONLY。 WITH error_table_name 错误表名称product_info_err。 数据导入过程中出现的数据格式错误信息将被写入product_info_err指定的错误信息表中,可以在并行导入结束后查询此错误信息表,获取详细的错误信息。 完整的选项说明请见 CREATE FOREIGN TABLE (导入导出)。 父主题: 教程:使用GDS从远端服务器导入数据
  • 背景信息 当用户连接数达到上限后,无法建立新的连接。因此,当数据库管理员发现某用户无法连接到数据库时,需要查看是否连接数达到了上限。控制数据库连接的主要以下几种选项。 全局的最大连接数:由运行参数max_connections指定。 某用户的连接数:在创建用户时由CREATE ROLE命令的CONNECTION LIMIT connlimit子句直接设定,也可以在设定以后用ALTER ROLE的CONNECTION LIMIT connlimit子句修改。 某数据库的连接数:在创建数据库时,由CREATE DATABASE的CONNECTION LIMIT connlimit参数指定。 预留连接供gs_clean使用:需要预留连接给gs_clean工具进行残留事务清理,以免由于残留事务长期阻塞系统正常运行,对于有n个CN的集群环境,那么需要至少预留n个连接给各个CN上的gs_clean进行残留事务清理。
  • 操作步骤 连接数据库。 查看全局会话连接数限制。 1 2 3 4 5 postgres=# SHOW max_connections; max_connections ----------------- 800 (1 row) 其中800是最大会话连接数。 查看已使用的会话连接数。 具体命令请参见表1。 除了创建的时候用双引号引起的数据库和用户名称外,以下命令中用到的数据库名称和用户名称,其中包含的英文字母必须使用小写。 表1 查看会话连接数 描述 命令 查看指定用户的会话连接数上限。 执行如下命令查看连接到指定用户omm的会话连接数上限。其中-1表示没有对用户omm设置连接数的限制。 1 2 3 4 5 postgres=# SELECT ROLNAME,ROLCONNLIMIT FROM PG_ROLES WHERE ROLNAME='omm'; rolname | rolconnlimit ----------+-------------- omm | -1 (1 row) 查看指定用户已使用的会话连接数。 执行如下命令查看指定用户omm已使用的会话连接数。其中,1表示omm已使用的会话连接数。 1 2 3 4 5 6 postgres=# SELECT COUNT(*) FROM dv_sessions WHERE USERNAME='omm'; count ------- 1 (1 row) 查看指定数据库的会话连接数上限。 执行如下命令查看连接到指定数据库postgres的会话连接数上限。其中-1表示没有对数据库postgres设置连接数的限制。 1 2 3 4 5 6 postgres=# SELECT DATNAME,DATCONNLIMIT FROM PG_DATABASE WHERE DATNAME='postgres'; datname | datconnlimit ----------+-------------- postgres | -1 (1 row) 查看指定数据库已使用的会话连接数。 执行如下命令查看指定数据库postgres上已使用的会话连接数。其中,1表示数据库postgres上已使用的会话连接数。 1 2 3 4 5 postgres=# SELECT COUNT(*) FROM PG_STAT_ACTIVITY WHERE DATNAME='postgres'; count ------- 1 (1 row) 查看所有用户已使用会话连接数。 执行如下命令查看所有用户已使用的会话连接数。 1 2 3 4 5 postgres=# SELECT COUNT(*) FROM dv_sessions; count ------- 10 (1 row)
  • 语法格式 1 2 3 4 5 VALUES {( expression [, ...] )} [, ...] [ ORDER BY { sort_expression [ ASC | DESC | USING operator ] } [, ...] ] [ LIMIT { count | ALL } ] [ OFFSET start [ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ];
  • 参数说明 expression 用于计算或插入结果表指定地点的常量或者表达式。 在一个出现在INSERT顶层的VALUES列表中,expression可以被DEFAULT替换以表示插入目的字段的缺省值。除此以外,当VALUES出现在其他场合的时候是不能使用DEFAULT的。 sort_expression 一个表示如何排序结果行的表达式或者整数常量。 ASC 指定按照升序排列。 DESC 指定按照降序排列。 operator 一个排序操作符。 count 返回的最大行数。 OFFSET start { ROW | ROWS } 声明返回的最大行数,而start声明开始返回行之前忽略的行数。 FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY FETCH子句限定返回查询结果从第一行开始的总行数,count的缺省值为1。
  • 参数说明 LOCAL 声明该命令只在当前事务中有效。 SESSION 声明这个命令只对当前会话起作用。 取值范围:字符串,要符合标识符的命名规范。 ISOLATION_LEVEL_CLAUSE 指定事务隔离级别,该参数决定当一个事务中存在其他并发运行事务时能够看到什么数据。 在事务中第一个数据修改语句(INSERT,DELETE,UPDATE,FETCH,COPY)执行之后,当前事务的隔离级别就不能再次设置。 取值范围: READ COMMITTED:读已提交隔离级别,只能读到已经提交的数据,而不会读到未提交的数据。这是缺省值。 READ UNCOMMITTED:读未提交隔离级别,可能会读到未提交的数据。提供这个隔离级别可用于在存在某协调节点CN故障等情况下应急使用,建议这种隔离级别下仅作只读操作,避免造成数据不一致。 REPEATABLE READ:可重复读隔离级别,仅仅能看到事务开始之前提交的数据,不能看到未提交的数据,以及在事务执行期间由其它并发事务提交的修改。 SERIALIZABLE:GaussDB目前功能上不支持此隔离级别,等价于REPEATABLE READ。 READ WRITE | READ ONLY 指定事务访问模式(读/写或者只读)。 会话的默认事务特性的访问模式只能在启动数据库时或者通过发送HUP信号进行设置。
  • 语法格式 设置事务的隔离级别、读写模式。 1 2 3 { SET [ LOCAL ] TRANSACTION|SET SESSION CHARACTERISTICS AS TRANSACTION } { ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE | REPEATABLE READ } | { READ WRITE | READ ONLY } } [, ...]
  • 解析器测试 函数ts_parse可以直接测试文本搜索解析器。 1 2 ts_parse(parser_name text, document text, OUT tokid integer, OUT token text) returns setof record ts_parse解析指定的document并返回一系列的记录,一条记录代表一个解析生成的token。每条记录包括标识token类型的tokid,及token文本。例如: 1 2 3 4 5 6 7 8 9 10 postgres=# SELECT * FROM ts_parse('default', '123 - a number'); tokid | token -------+-------- 22 | 123 12 | 12 | - 1 | a 12 | 1 | number (6 rows) 函数ts_token_type返回指定解析器的token类型及其描述信息。 1 2 ts_token_type(parser_name text, OUT tokid integer, OUT alias text, OUT description text) returns setof record ts_token_type返回一个表,这个表描述了指定解析器可以识别的每种token类型。对于每个token类型,表中给出了整数类型的tokid--用于解析器标记对应的token类型;alias——命名分词器命令中的token类型;及简单描述。比如: 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 postgres=# SELECT * FROM ts_token_type('default'); tokid | alias | description -------+-----------------+------------------------------------------ 1 | asciiword | Word, all ASCII 2 | word | Word, all letters 3 | numword | Word, letters and digits 4 | email | Email address 5 | url | URL 6 | host | Host 7 | sfloat | Scientific notation 8 | version | Version number 9 | hword_numpart | Hyphenated word part, letters and digits 10 | hword_part | Hyphenated word part, all letters 11 | hword_asciipart | Hyphenated word part, all ASCII 12 | blank | Space symbols 13 | tag | XML tag 14 | protocol | Protocol head 15 | numhword | Hyphenated word, letters and digits 16 | asciihword | Hyphenated word, all ASCII 17 | hword | Hyphenated word, all letters 18 | url_path | URL path 19 | file | File or path name 20 | float | Decimal notation 21 | int | Signed integer 22 | uint | Unsigned integer 23 | entity | XML entity (23 rows) 父主题: 测试和调试文本搜索
  • 常见问题处理 [UnixODBC][Driver Manager]Can't open lib 'xxx/xxx/psqlodbcw.so' : file not found. 此问题的可能原因: odbcinst.ini文件中配置的路径不正确 确认的方法:'ls'一下错误信息中的路径,以确保该psqlodbcw.so文件存在,同时具有执行权限。 psqlodbcw.so的依赖库不存在,或者不在系统环境变量中 确认的办法:ldd一下错误信息中的路径,如果是缺少libodbc.so.1等UnixODBC的库,那么按照“操作步骤”中的方法重新配置UnixODBC,并确保它的安装路径下的lib目录添加到了LD_LIBRARY_PATH中;如果重装仍无法解决,可以手动将数据库安装包下的unixodbc/lib下的内容拷贝到UnixODBC的安装路径下的lib目录;如果是缺少其他库,请将ODBC驱动包中的lib目录添加到LD_LIBRARY_PATH中。 [UnixODBC]connect to server failed: no such file or directory 此问题可能的原因: 配置了错误的/不可达的数据库地址,或者端口 请检查数据源配置中的Servername及Port配置项。 服务器侦听不正确 如果确认Servername及Port配置正确,请根据“操作步骤”中数据库服务器的相关配置,确保数据库侦听了合适的网卡及端口。 防火墙及网闸设备 请确认防火墙设置,将数据库的通信端口添加到可信端口中。 如果有网闸设备,请确认一下相关的设置。 [unixODBC]The password-stored method is not supported. 此问题可能原因: 数据源中未配置sslmode配置项。 解决办法: 请配置该选项至allow或以上选项。此配置的更多信息,见表3。 Server common name "xxxx" does not match host name "xxxxx" 此问题的原因: 使用了SSL加密的“verify-full”选项,驱动程序会验证证书中的主机名与实际部署数据库的主机名是否一致。 解决办法: 碰到此问题可以使用“verify-ca”选项,不再校验主机名;或者重新生成一套与数据库所在主机名相同的服务端证书。 Driver's SQLAllocHandle on SQL_HANDLE_DBC failed 此问题的可能原因: 可执行文件(比如UnixODBC的isql,以下都以isql为例)与数据库驱动(psqlodbcw.so)依赖于不同的odbc的库版本:libodbc.so.1或者libodbc.so.2。此问题可以通过如下方式确认: ldd `which isql` | grep odbc ldd psqlodbcw.so | grep odbc 这时,如果输出的libodbc.so最后的后缀数字不同或者指向不同的磁盘物理文件,那么基本就可以断定是此问题。isql与psqlodbcw.so都会要求加载libodbc.so,这时如果它们加载的是不同的物理文件,便会导致两套完全同名的函数列表,同时出现在同一个可见域里(UnixODBC的libodbc.so.*的函数导出列表完全一致),产生冲突,无法加载数据库驱动。 解决办法: 确定一个要使用的UnixODBC,然后卸载另外一个(比如卸载库版本号为.so.2的UnixODBC),然后将剩下的.so.1的库,新建一个同名但是后缀为.so.2的软链接,便可解决此问题。 FATAL: Forbid remote connection with trust method! 由于安全原因,数据库CN禁止集群内部其他节点无认证接入。 如果要在集群内部访问CN,请将ODBC程序部署在CN所在机器,服务器地址使用"127.0.0.1"。建议业务系统单独部署在集群外部,否则可能会影响数据库运行性能。 [unixODBC][Driver Manager]Invalid attribute value 在使用SQL on other GaussDB功能时碰到此问题,有可能是unixODBC的版本并非推荐版本,建议通过“odbcinst --version”命令排查环境中的unixODBC版本。 authentication method 10 not supported. 使用开源客户端碰到此问题,可能原因: 数据库中存储的口令校验只存储了SHA256格式哈希,而开源客户端只识别MD5校验,双方校验方法不匹配报错。 数据库并不存储用户口令,只存储用户口令的哈希码。 数据库当用户更新用户口令或者新建用户时,会同时存储两种格式的哈希码,这时将兼容开源的认证协议。 但是当老版本升级到新版本时,由于哈希的不可逆性,所以数据库无法还原用户口令,进而生成新格式的哈希,所以仍然只保留了SHA256格式的哈希,导致仍然无法使用MD5做口令认证。 MD5加密算法安全性低,存在安全风险,建议使用更安全的加密算法。 要解决该问题,可以更新用户口令(参见ALTER USER);或者新建一个用户(参见CREATE USER),赋于同等权限,使用新用户连接数据库。 unsupported frontend protocol 3.51: server supports 1.0 to 3.0 目标数据库版本过低,或者目标数据库为开源数据库。请使用对应版本的数据库驱动连接目标数据库。 FATAL: GSS authentication method is not allowed because XXXX user password is not disabled. 目标CN的pg_hba.conf里配置了当前客户端IP使用"gss"方式来做认证,该认证算法不支持用作客户端的身份认证,请修改到"sha256"后再试。 isql: error while loading shared libraries: xxx 环境缺少该动态库,需要自行安装对应的库。
  • 操作步骤 获取unixODBC源码包。 获取参考地址: https://sourceforge.net/projects/unixodbc/files/unixODBC 下载后请先按照社区提供的完整性校验算法进行完整性校验。 安装unixODBC。如果机器上已经安装了其他版本的unixODBC,可以直接覆盖安装。 目前不支持unixODBC-2.2.1版本。以unixODBC-2.3.0版本为例,在客户端执行如下命令安装unixODBC。默认安装到“/usr/local”目录下,生成数据源文件到“/usr/local/etc”目录下,库文件生成在“/usr/local/lib”目录。 tar zxvf unixODBC-2.3.0.tar.gz cd unixODBC-2.3.0 #修改configure文件,找到LIB_VERSION #将它的值修改为"1:0:0",这样将编译出*.so.1的动态库,与psqlodbcw.so的依赖关系相同。 vim configure ./configure --enable-gui=no #如果要在鲲鹏服务器上编译,请追加一个configure参数: --build=aarch64-unknown-linux-gnu make #安装可能需要root权限 make install 替换客户端GaussDB驱动程序。 将GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Odbc.tar.gz解压。解压后会得到两个文件夹:lib与odbc,在odbc文件夹中还会有一个lib文件夹。将解压后得到的/lib文件夹与/odbc/lib文件夹中的所有动态库都拷贝到“/usr/local/lib”目录下。 配置数据源。 配置ODBC驱动文件。 在“/usr/local/etc/odbcinst.ini”文件中追加以下内容。 [GaussMPP] Driver64=/usr/local/lib/psqlodbcw.so setup=/usr/local/lib/psqlodbcw.so odbcinst.ini文件中的配置参数说明如表1所示。 表1 odbcinst.ini文件配置参数 参数 描述 示例 [DriverName] 驱动器名称,对应数据源DSN中的驱动名。 [DRIVER_N] Driver64 驱动动态库的路径。 Driver64=/xxx/odbc/lib/psqlodbcw.so setup 驱动安装路径,与Driver64中动态库的路径一致。 setup=/xxx/odbc/lib/psqlodbcw.so 配置数据源文件。 在“/usr/local/etc/odbc.ini ”文件中追加以下内容。 [gaussdb] Driver=GaussMPP Servername=127.0.0.1(数据库Server IP) Database=postgres (数据库名) Username=omm (数据库用户名) Password= (数据库用户密码) Port=8000 (数据库侦听端口) Sslmode=allow odbc.ini文件配置参数说明如表2所示。 表2 odbc.ini文件配置参数 参数 描述 示例 [DSN] 数据源的名称。 [gaussdb] Driver 驱动名,对应odbcinst.ini中的DriverName。 Driver=DRIVER_N Servername 服务器的IP地址。 Servername=127.0.0.1 Database 要连接的数据库的名称。 Database=postgres Username 数据库用户名称。 Username=omm Password 数据库用户密码。 Password= 说明: ODBC驱动本身已经对内存密码进行过清理,以保证用户密码在连接后不会再在内存中保留。 但是如果配置了此参数,由于UnixODBC对数据源文件等进行缓存,可能导致密码长期保留在内存中。 推荐在应用程序连接时,将密码传递给相应API,而非写在数据源配置文件中。同时连接成功后,应当及时清理保存密码的内存段。 注意: 配置文件中填写密码时,需要遵循http规则 1. 字符应当采用URL编码规范,如"!"应写作"%21","%"应写作"%25",因此应当注意特殊处理% 2. "+"会被替换为空格" " Port 服务器的端口号。 Port=8000 Sslmode 开启SSL模式 Sslmode=allow UseServerSidePrepare 是否开启数据库端扩展查询协议。 可选值0或1,默认为1,表示打开扩展查询协议。 UseServerSidePrepare=1 UseBatchProtocol 是否开启批量查询协议(打开可提高DML性能);可选值0或者1,默认为1。 当此值为0时,不使用批量查询协议(主要用于与早期数据库版本通信兼容)。 当此值为1,并且数据库support_batch_bind参数存在且为on时,将打开批量查询协议。 UseBatchProtocol=1 ConnectionExtraInfo GUC参数connection_info(参见connection_info)中显示驱动部署路径和进程属主用户的开关。 ConnectionExtraInfo=1 说明: 默认值为0。当设置为1时,ODBC驱动会将当前驱动的部署路径、进程属主用户上报到数据库中,记录在connection_info参数(参见connection_info)里;同时可以在PG_STAT_ACTIVITY和PGXC_STAT_ACTIVITY中查询到。 其中关于Sslmode的选项的允许值,具体信息见下表: 表3 sslmode的可选项及其描述 sslmode 是否会启用SSL加密 描述 disable 否 不使用SSL安全连接。 allow 可能 如果数据库服务器要求使用,则可以使用SSL安全加密连接,但不验证数据库服务器的真实性。 prefer 可能 如果数据库支持,那么首选使用SSL安全加密连接,但不验证数据库服务器的真实性。 require 是 必须使用SSL安全连接,但是只做了数据加密,而并不验证数据库服务器的真实性。 verify-ca 是 必须使用SSL安全连接,并且验证数据库是否具有可信证书机构签发的证书。 verify-full 是 必须使用SSL安全连接,在verify-ca的验证范围之外,同时验证数据库所在主机的主机名是否与证书内容一致。如果不一致,需要使用root用户修改/etc/hosts文件,将连接的数据库节点的IP地址和主机名加入。 SSL模式。 声明如下环境变量,同时保证client.key*系列文件为600权限: export PGSSLCERT="/YOUR/PATH/OF/client.crt" #请修改该路径到client.crt的绝对路径 export PGSSLKEY="/YOUR/PATH/OF/client.key" #请修改该路径到client.key的绝对路径 将根证书cacert.pem文件放至客户端用户home目录下的.postgresql目录下(如果没有请创建该目录),并将cacert.pem重命名为root.crt,文件权限设置为600。 同时将数据源中的Sslmode选项调整至“require”。
  • 列存表 数据按列进行存储,即一列所有数据是连续存储的。单列查询IO小,比行存表占用更少的存储空间。适合数据批量插入、更新较少和以查询为主统计分析类的场景。列存表不适合点查询。 1 2 3 4 5 6 7 8 9 10 postgres=# CREATE TABLE customer_t2 ( state_ID CHAR(2), state_NAME VARCHAR2(40), area_ID NUMBER ) WITH (ORIENTATION = COLUMN); --删除表 postgres=# DROP TABLE customer_t2;
  • 行存表 默认创建表的类型。数据按行进行存储,即一行数据是连续存储。适用于对数据需要经常更新的场景。 1 2 3 4 5 6 7 8 9 postgres=# CREATE TABLE customer_t1 ( state_ID CHAR(2), state_NAME VARCHAR2(40), area_ID NUMBER ); --删除表 postgres=# DROP TABLE customer_t1;
  • 使用方法 设置参数(表倾斜告警阈值table_skewness_warning_threshold和表倾斜告警最小行数table_skewness_warning_rows); 表倾斜告警阈值取值范围0~1,默认值为1,即关闭状态,取其他值时为开启状态。 表倾斜告警最小行数取值范围0~2147483647,默认值为100,000。当导入总行数超过该值与导入DN数之积时,才可能触发告警,从而不会在小数据量导入的场景进行无意义的告警。 1 2 3 4 show table_skewness_warning_threshold; set table_skewness_warning_threshold = xxx; show table_skewness_warning_rows; set table_skewness_warning_rows = xxx; 执行导入,使用INSERT或者COPY; 发现并处理告警,告警信息包括表名、最小行数、最大行数、总行数、平均行数、倾斜率,以及提示信息(检查数据分布或者修改参数)。 WARNING: Skewness occurs, table name: xxx, min value: xxx, max value: xxx, sum value: xxx, avg value: xxx, skew ratio: xxx HINT: Please check data distribution or modify warning threshold
  • 几何函数 area(object) 描述:计算图形的面积。 返回类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT area(box '((0,0),(1,1))') AS RESULT; result -------- 1 (1 row) center(object) 描述:计算图形的中心。 返回类型:point 示例: 1 2 3 4 5 postgres=# SELECT center(box '((0,0),(1,2))') AS RESULT; result --------- (0.5,1) (1 row) diameter(circle) 描述:计算圆的直径。 返回类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT diameter(circle '((0,0),2.0)') AS RESULT; result -------- 4 (1 row) height(box) 描述:矩形的竖直高度。 返回类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT height(box '((0,0),(1,1))') AS RESULT; result -------- 1 (1 row) isclosed(path) 描述:图形是否为闭合路径。 返回类型:Boolean 示例: 1 2 3 4 5 postgres=# SELECT isclosed(path '((0,0),(1,1),(2,0))') AS RESULT; result -------- t (1 row) isopen(path) 描述:图形是否为开放路径。 返回类型:Boolean 示例: 1 2 3 4 5 postgres=# SELECT isopen(path '[(0,0),(1,1),(2,0)]') AS RESULT; result -------- t (1 row) length(object) 描述:计算图形的长度。 返回类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT length(path '((-1,0),(1,0))') AS RESULT; result -------- 4 (1 row) npoints(path) 描述:计算路径的顶点数。 返回类型:int 示例: 1 2 3 4 5 postgres=# SELECT npoints(path '[(0,0),(1,1),(2,0)]') AS RESULT; result -------- 3 (1 row) npoints(polygon) 描述:计算多边形的顶点数。 返回类型:int 示例: 1 2 3 4 5 postgres=# SELECT npoints(polygon '((1,1),(0,0))') AS RESULT; result -------- 2 (1 row) pclose(path) 描述:把路径转换为闭合路径。 返回类型:path 示例: 1 2 3 4 5 postgres=# SELECT pclose(path '[(0,0),(1,1),(2,0)]') AS RESULT; result --------------------- ((0,0),(1,1),(2,0)) (1 row) popen(path) 描述:把路径转换为开放路径。 返回类型:path 示例: 1 2 3 4 5 postgres=# SELECT popen(path '((0,0),(1,1),(2,0))') AS RESULT; result --------------------- [(0,0),(1,1),(2,0)] (1 row) radius(circle) 描述:计算圆的半径。 返回类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT radius(circle '((0,0),2.0)') AS RESULT; result -------- 2 (1 row) width(box) 描述:计算矩形的水平尺寸。 返回类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT width(box '((0,0),(1,1))') AS RESULT; result -------- 1 (1 row)
  • 操作步骤 连接数据库。 查看数据库运行参数当前取值。 方法一:使用SHOW命令。 使用如下命令查看单个参数: 1 postgres=# SHOW server_version; server_version显示数据库版本信息的参数。 使用如下命令查看所有参数: 1 postgres=# SHOW ALL; 方法二:使用pg_settings视图。 使用如下命令查看单个参数: 1 postgres=# SELECT * FROM pg_settings WHERE NAME='server_version'; 使用如下命令查看所有参数: 1 postgres=# SELECT * FROM pg_settings;
  • 数字操作函数 abs(x) 描述:绝对值。 返回值类型:和输入相同。 示例: 1 2 3 4 5 postgres=# SELECT abs(-17.4); abs ------ 17.4 (1 row) acos(x) 描述:反余弦。 返回值类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT acos(-1); acos ------------------ 3.14159265358979 (1 row) asin(x) 描述:反正弦。 返回值类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT asin(0.5); asin ------------------ .523598775598299 (1 row) atan(x) 描述:反正切。 返回值类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT atan(1); atan ------------------ .785398163397448 (1 row) atan2(y, x) 描述:y/x的反正切。 返回值类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT atan2(2, 1); atan2 ------------------ 1.10714871779409 (1 row) bitand(integer, integer) 描述:计算两个数字与运算(&)的结果。 返回值类型:bigint类型数字。 示例: 1 2 3 4 5 postgres=# SELECT bitand(127, 63); bitand -------- 63 (1 row) cbrt(dp) 描述:立方根。 返回值类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT cbrt(27.0); cbrt ------ 3 (1 row) ceil(x) 描述:不小于参数的最小的整数。 返回值类型:整数。 示例: 1 2 3 4 5 postgres=# SELECT ceil(-42.8); ceil ------ -42 (1 row) ceiling(dp or numeric) 描述:不小于参数的最小整数(ceil的别名)。 返回值类型:与输入相同。 示例: 1 2 3 4 5 postgres=# SELECT ceiling(-95.3); ceiling --------- -95 (1 row) cos(x) 描述:余弦。 返回值类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT cos(-3.1415927); cos ------------------- -.999999999999999 (1 row) cot(x) 描述:余切。 返回值类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT cot(1); cot ------------------ .642092615934331 (1 row) degrees(dp) 描述:把弧度转为角度。 返回值类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT degrees(0.5); degrees ------------------ 28.6478897565412 (1 row) div(y numeric, x numeric) 描述:y除以x的商的整数部分。 返回值类型:numeric 示例: 1 2 3 4 5 postgres=# SELECT div(9,4); div ----- 2 (1 row) exp(x) 描述:自然指数。 返回值类型:与输入相同。 示例: 1 2 3 4 5 postgres=# SELECT exp(1.0); exp -------------------- 2.7182818284590452 (1 row) floor(x) 描述:不大于参数的最大整数。 返回值类型:与输入相同。 示例: 1 2 3 4 5 postgres=# SELECT floor(-42.8); floor ------- -43 (1 row) int1(in) 描述:将传入的text参数转换为int1类型值并返回。 返回值类型:int1 示例: 1 2 3 4 5 6 7 8 9 10 postgres=# select int1('123'); int1 ------ 123 (1 row) postgres=# select int1('a'); int1 ------ 0 (1 row) int2(in) 描述:将传入参数转换为int2类型值并返回。支持的入参类型包括:float4,float8,numeric,text。 返回值类型:int2 示例: 1 2 3 4 5 6 7 8 9 10 postgres=# select int2('1234'); int2 ------ 1234 (1 row) postgres=# select int2(25.3); int2 ------ 25 (1 row) int4(in) 描述:将传入参数转换为int4类型值并返回。支持的入参类型包括:bit,boolean,char,duoble precision,numeric,real,smallint,text。 返回值类型:int4 示例: 1 2 3 4 5 6 7 8 9 10 postgres=# select int4('789'); int4 ------ 789 (1 row) postgres=# select int4(99.9); int4 ------ 99 (1 row) radians(dp) 描述:把角度转为弧度。 返回值类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT radians(45.0); radians ------------------ .785398163397448 (1 row) random() 描述:0.0到1.0之间的随机数。 返回值类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT random(); random ------------------ .824823560658842 (1 row) multiply(x double precision or text, y double precision or text) 描述:x和y的乘积。 返回值类型:double precision 示例: 1 2 3 4 5 6 7 8 9 10 postgres=# SELECT multiply(9.0, '3.0'); multiply ------------------- 27 (1 row) postgres=# SELECT multiply('9.0', 3.0); multiply ------------------- 27 (1 row) ln(x) 描述:自然对数。 返回值类型:与输入相同。 示例: 1 2 3 4 5 postgres=# SELECT ln(2.0); ln ------------------- .6931471805599453 (1 row) log(x) 描述:以10为底的对数。 返回值类型:与输入相同。 示例: 1 2 3 4 5 postgres=# SELECT log(100.0); log -------------------- 2.0000000000000000 (1 row) log(b numeric, x numeric) 描述:以b为底的对数。 返回值类型:numeric 示例: 1 2 3 4 5 postgres=# SELECT log(2.0, 64.0); log -------------------- 6.0000000000000000 (1 row) mod(x,y) 描述: x/y的余数(模) 如果x是0,则返回y。 返回值类型:与参数类型相同。 示例: 1 2 3 4 5 postgres=# SELECT mod(9,4); mod ----- 1 (1 row) 1 2 3 4 5 postgres=# SELECT mod(9,0); mod ----- 9 (1 row) pi() 描述:“π”常量。 返回值类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT pi(); pi ------------------ 3.14159265358979 (1 row) power(a double precision, b double precision) 描述:a的b次幂。 返回值类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT power(9.0, 3.0); power ---------------------- 729.0000000000000000 (1 row) round(x) 描述:离输入参数最近的整数。 返回值类型:与输入相同。 示例: 1 2 3 4 5 6 7 8 9 10 11 postgres=# SELECT round(42.4); round ------- 42 (1 row) postgres=# SELECT round(42.6); round ------- 43 (1 row) round(v numeric, s int) 描述:保留小数点后s位,s后一位进行四舍五入。 返回值类型:numeric 示例: 1 2 3 4 5 postgres=# SELECT round(42.4382, 2); round ------- 42.44 (1 row) setseed(dp) 描述:为随后的random()调用设置种子(-1.0到1.0之间,包含)。 返回值类型:void 示例: 1 2 3 4 5 postgres=# SELECT setseed(0.54823); setseed --------- (1 row) sign(x) 描述:输出此参数的符号。 返回值类型:-1表示负数,0表示0,1表示正数。 示例: 1 2 3 4 5 postgres=# SELECT sign(-8.4); sign ------ -1 (1 row) sin(x) 描述:正弦。 返回值类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT sin(1.57079); sin ------------------ .999999999979986 (1 row) sqrt(x) 描述:平方根。 返回值类型:与输入相同。 示例: 1 2 3 4 5 postgres=# SELECT sqrt(2.0); sqrt ------------------- 1.414213562373095 (1 row) tan(x) 描述:正切。 返回值类型:double precision 示例: 1 2 3 4 5 postgres=# SELECT tan(20); tan ------------------ 2.23716094422474 (1 row) trunc(x) 描述:截断(取整数部分)。 返回值类型:与输入相同。 示例: 1 2 3 4 5 postgres=# SELECT trunc(42.8); trunc ------- 42 (1 row) trunc(v numeric, s int) 描述:截断为s位小数。 返回值类型:numeric 示例: 1 2 3 4 5 postgres=# SELECT trunc(42.4382, 2); trunc ------- 42.43 (1 row) width_bucket(op numeric, b1 numeric, b2 numeric, count int) 描述:返回一个桶,这个桶是在一个有count个桶,上界为b1下界为b2的等深柱图中operand将被赋予的那个桶。 返回值类型:int 示例: 1 2 3 4 5 postgres=# SELECT width_bucket(5.35, 0.024, 10.06, 5); width_bucket -------------- 3 (1 row) width_bucket(op dp, b1 dp, b2 dp, count int) 描述:返回一个桶,这个桶是在一个有count个桶,上界为b1下界为b2的等深柱图中operand将被赋予的那个桶。 返回值类型:int 示例: 1 2 3 4 5 postgres=# SELECT width_bucket(5.35, 0.024, 10.06, 5); width_bucket -------------- 3 (1 row) int1abs 描述:返回uint8类型数据的绝对值。 参数:tinyint 返回值类型:tinyint int1and 描述:返回两个uint8类型数据按位与的结果。 参数:tinyint, tinyint 返回值类型:tinyint int1cmp 描述:返回两个uint8类型数据比较的结果,若第一个参数大,则返回1;若第二个参数大,则返回-1;若相等,则返回0。 参数:tinyint, tinyint 返回值类型:integer int1div 描述:返回两个uint8类型数据相除的结果,结果为float8类型。 参数:tinyint, tinyint 返回值类型:tinyint int1eq 描述:比较两个uint8类型数据是否相等。 参数:tinyint, tinyint 返回值类型:boolean int1ge 描述:判断两个uint8类型数据是否第一个参数大于等于第二个参数。 参数:tinyint, tinyint 返回值类型:boolean int1gt 描述:无符号1字节整数做大于运算。 参数:tinyint, tinyint 返回值类型:boolean int1larger 描述:返回两个无符号一字节整数中较大值。 参数:tinyint, tinyint 返回值类型:tinyint int1le 描述:判断无符号一字节整数是否小于等于。 参数:tinyint, tinyint 返回值类型:boolean int1lt 描述:判断无符号一字节整数是否小于。 参数:tinyint, tinyint 返回值类型:boolean int1smaller 描述:返回两个无符号一字节整数中较小的数。 参数:tinyint, tinyint 返回值类型:tinyint int1inc 描述:无符号一字节整数加一。 参数:tinyint 返回值类型:tinyint int1mi 描述:无符号一字节整数做差运算。 参数:tinyint, tinyint 返回值类型:tinyint int1mod 描述:无符号一字节整数做取余运算。 参数:tinyint, tinyint 返回值类型:tinyint int1mul 描述:无符号一字节整数做乘法运算。 参数:tinyint, tinyint 返回值类型:tinyint int1ne 描述:无符号一字节整数不等于运算。 参数:tinyint, tinyint 返回值类型:boolean int1pl 描述:无符号一字节整数加法。 参数:tinyint, tinyint 返回值类型:tinyint int1um 描述:无符号一字节数去相反数并返回有符号二字节整数。 参数:tinyint 返回值类型:smallint int1xor 描述:无符号一字节整数异或操作。 参数:tinyint, tinyint 返回值类型:tinyint cash_div_int1 描述:对money类型进行除法运算。 参数:money, tinyint 返回值类型:money cash_mul_int1 描述:对money类型进行乘法运算。 参数:money, tinyint 返回值类型:money int1not 描述:无符号一字节整数二进制位翻转。 参数:tinyint 返回值类型:tinyint int1or 描述:无符号一字节整数或运算。 参数:tinyint, tinyint 返回值类型:tinyint int1shl 描述:无符号一字节整数左移指定位数。 参数:tinyint, integer 返回值类型:tinyint int1shr 描述:无符号一字节整数右移指定位数。 参数:tinyint, integer 返回值类型:tinyint
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 --创建dev_mask和bob_mask用户。 postgres=# CREATE USER dev_mask PASSWORD 'dev@1234'; postgres=# CREATE USER bob_mask PASSWORD 'bob@1234'; --创建一个表tb_for_masking postgres=# CREATE TABLE tb_for_masking(col1 text, col2 text, col3 text); --创建资源标签标记敏感列col1 postgres=# CREATE RESOURCE LABEL mask_lb1 ADD COLUMN(tb_for_masking.col1); --创建资源标签标记敏感列col2 postgres=# CREATE RESOURCE LABEL mask_lb2 ADD COLUMN(tb_for_masking.col2); --对访问敏感列col1的操作创建脱敏策略 postgres=# CREATE MASKING POLICY maskpol1 maskall ON LABEL(mask_lb1); --创建仅对用户dev_mask和bob_mask,客户端工具为psql和gsql,IP地址为'10.20.30.40', '127.0.0.0/24'场景下生效的脱敏策略。 postgres=# CREATE MASKING POLICY maskpol2 randommasking ON LABEL(mask_lb2) FILTER ON ROLES(dev_mask, bob_mask), APP(psql, gsql), IP('10.20.30.40', '127.0.0.0/24');
  • 参数说明 policy_name 审计策略名称,需要唯一,不可重复。 取值范围:字符串,要符合标识符的命名规范。 label_name 资源标签名称。 masking_clause 指出使用何种脱敏函数来脱敏被label_name标签标记的数据库资源。 policy_filter 指出该脱敏策略对何种身份的用户生效,若为空表示对所用用户生效。 FILTER_TYPE 描述策略过滤的条件类型,包括IP | APP | ROLES。 filter_value 指具体过滤信息内容,例如具体的IP,具体的APP名称,具体的用户名。 ENABLE|DISABLE 可以打开或关闭脱敏策略。若不指定ENABLE|DISABLE,语句默认为ENABLE。
  • 语法格式 1 CREATE MASKING POLICY policy_name masking_clause[, ...]* policy_filter [ENABLE | DISABLE]; masking_clause: 1 masking_function ON LABEL(label_name[, ...]*) masking_function: maskall | randommasking | creditcardmasking | basicemailmasking | fullemailmasking | shufflemasking | alldigitsmasking
  • 简化输入 简化输入到CSV日志文件,可以通过如下操作: 设置log_filename和log_rotation_age,为日志文件提供一个一致的、可预测的命名方案。通过日志文件名,预测一个独立的日志文件完成并进入准备导入状态的时间。 将log_rotation_size设为0来终止基于尺寸的日志回滚,因为基于尺寸的日志回滚让预测日志文件名变得非常的困难。 将log_truncate_on_rotation设为on以便区分在同一日志文件中旧的日志数据和新的日志数据。
  • csvlog定义 以“逗号分隔值” 即CSV(Comma Separated Value)的形式发出日志。 以下是简单的用来存储CSV形式日志输出的表定义: 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 CREATE TABLE postgres_log ( log_time timestamp(3) with time zone, node_name text, user_name text, database_name text, process_id bigint, connection_from text, "session_id" text, session_line_num bigint, command_tag text, session_start_time timestamp with time zone, virtual_transaction_id text, transaction_id bigint, query_id bigint, module text, error_severity text, sql_state_code text, message text, detail text, hint text, internal_query text, internal_query_pos integer, context text, query text, query_pos integer, location text, application_name text ); 详细说明请参见表1。 表1 csvlog字段含义表 字段名 字段含义 字段名 字段含义 log_time 毫秒级的时间戳 module 日志所属模块 node_name 节点名称 error_severity ERRORSTATE代码 user_name 用户名 sql_state_code SQLSTATE代码 database_name 数据库名 message 错误消息 process_id 进程ID detail 详细错误消息 connection_from 客户主机:端口号 hint 提示 session_id 会话ID internal_query 内部查询(查询那些导致错误的信息,如果有的话) session_line_num 每个会话的行数 internal_query_pos 内部查询指针 command_tag 命令标签 context 环境 session_start_time 会话开始时间 query 错误发生位置的字符统计 virtual_transaction_id 常规事务 query_pos 错误发生位置指针 transaction_id 事务ID location 在GaussDB源代码中错误的位置(如果log_error_verbosity的值设为verbose ) query_id 查询ID application_name 应用名称 使用COPY FROM命令将日志文件导入这个表: 1 COPY postgres_log FROM '/opt/data/pg_log/logfile.csv' WITH csv; 此处的日志名“logfile.csv”要换成实际生成的日志的名称。
  • 注意事项 EXPLAIN PLAN不支持在DN上执行。 对于执行错误的SQL语句无法进行计划信息的收集。 PLAN_TABLE中的数据是session级生命周期并且session隔离和用户隔离,用户只能看到当前session、当前用户的数据。 PLAN_TABLE无法与GDS外表进行关联查询。 对于不能下推的查询,无法收集到具体的object信息,object只能收集到REMOTE_QUERY或CTE等信息。详见示例 2。
  • 参数说明 EXPLAIN中的PLAN选项表示需要将计划信息存储于PLAN_TABLE中,存储成功将返回“EXPLAIN SUCCESS”。 用户可通过STATEMENT_ID对查询设置标签,输入的标签信息也将存储于PLAN_TABLE中。 用户在执行EXPLAIN PLAN时,如果没有设置STATEMENT_ID,则默认为空值。同时,用户可输入的STATEMENT_ID最大长度为30个字节,超过长度将会产生报错。
  • 处理查询 GaussDB提供了函数和操作符用来操作tsquery类型的查询。 tsquery && tsquery 返回两个给定查询tsquery的与结果。 tsquery || tsquery 返回两个给定查询tsquery的或结果。 !! tsquery 返回给定查询tsquery的非结果。 numnode(query tsquery) returns integer 返回tsquery中的节点数目(词素加操作符),这个函数在检查查询是否有效(返回值大于0),或者只包含停用词(返回值等于0)时,是有用的。例如: 1 2 3 4 5 6 7 8 9 10 11 postgres=# SELECT numnode(plainto_tsquery('the any')); NOTICE: text-search query contains only stop words or doesn't contain lexemes, ignored CONTEXT: referenced column: numnode numnode --------- 0 postgres=# SELECT numnode('foo & bar'::tsquery); numnode --------- 3 querytree(query tsquery) returns text 返回可用于索引搜索的tsquery部分,该函数对于检测非索引查询是有用的(例如只包含停用词或否定项)。例如: 1 2 3 4 5 postgres=# SELECT querytree(to_tsquery('!defined')); querytree ----------- T (1 row) 父主题: 附加功能
  • 属性 游标的属性用于控制程序流程或者了解程序的状态。当运行DML语句时,PL/SQL打开一个内建游标并处理结果,游标是维护查询结果的内存中的一个区域,游标在运行DML语句时打开,完成后关闭。显式游标的属性为: %FOUND布尔型属性:当最近一次读记录时成功返回,则值为TRUE。 %NOTFOUND布尔型属性:与%FOUND相反。 %ISOPEN布尔型属性:当游标已打开时返回TRUE。 %ROWCOUNT数值型属性:返回已从游标中读取的记录数。
共100000条