华为云用户手册

  • java.sql.PreparedStatement java.sql.PreparedStatement是预处理语句接口。 表1 对java.sql.PreparedStatement的支持情况 方法名 返回值类型 支持JDBC4 clearParameters() void Yes execute() boolean Yes executeQuery() ResultSet Yes excuteUpdate() int Yes executeLargeUpdate() long No getMetaData() ResultSetMetaData Yes getParameterMetaData() ParameterMetaData Yes setArray(int parameterIndex, Array x) void Yes setAsciiStream(int parameterIndex, InputStream x, int length) void Yes setBinaryStream(int parameterIndex, InputStream x) void Yes setBinaryStream(int parameterIndex, InputStream x, int length) void Yes setBinaryStream(int parameterIndex, InputStream x, long length) void Yes setBlob(int parameterIndex, InputStream inputStream) void Yes setBlob(int parameterIndex, InputStream inputStream, long length) void Yes setBlob(int parameterIndex, Blob x) void Yes setCharacterStream(int parameterIndex, Reader reader) void Yes setCharacterStream(int parameterIndex, Reader reader, int length) void Yes setClob(int parameterIndex, Reader reader) void Yes setClob(int parameterIndex, Reader reader, long length) void Yes setClob(int parameterIndex, Clob x) void Yes setDate(int parameterIndex, Date x, Calendar cal) void Yes setNull(int parameterIndex, int sqlType) void Yes setNull(int parameterIndex, int sqlType, String typeName) void Yes setObject(int parameterIndex, Object x) void Yes setObject(int parameterIndex, Object x, int targetSqlType) void Yes setObject(int parameterIndex, Object x, int targetSqlType, int scaleOrLength) void Yes setSQLXML(int parameterIndex, SQLXML xmlObject) void Yes setTime(int parameterIndex, Time x) void Yes setTime(int parameterIndex, Time x, Calendar cal) void Yes setTimestamp(int parameterIndex, Timestamp x) void Yes setTimestamp(int parameterIndex, Timestamp x, Calendar cal) void Yes setUnicodeStream(int parameterIndex, InputStream x, int length) void Yes setURL(int parameterIndex, URL x) void Yes setBoolean(int parameterIndex, boolean x) void Yes setBigDecimal(int parameterIndex, BigDecimal x) void Yes setByte(int parameterIndex, byte x) void Yes setBytes(int parameterIndex, byte[] x) void Yes setDate(int parameterIndex, Date x) void Yes setDouble(int parameterIndex, double x) void Yes setFloat(int parameterIndex, float x) void Yes setInt(int parameterIndex, int x) void Yes setLong(int parameterIndex, long x) void Yes setShort(int parameterIndex, short x) void Yes setString(int parameterIndex, String x) void Yes setNString(int parameterIndex, String x) void Yes addBatch() void Yes executeBatch() int[] Yes addBatch()、execute()必须在clearBatch()之后才能执行。 调用executeBatch()方法并不会清除batch。用户必须显式使用clearBatch()清除。 在添加了一个batch的绑定变量后,用户若想重用这些值(再次添加一个batch),无需再次使用set*()方法。 以下方法是从java.sql.Statement继承而来:close、execute、executeQuery、executeUpdate、getConnection、getResultSet、getUpdateCount、isClosed、setMaxRows、setFetchSize、enableStreamingResults。 executeLargeUpdate()方法必须在JDBC4.2及以上版本使用。 父主题: JDBC接口参考
  • GS_MY_ILMPOLICIES GS_MY_ILMPOLICIES视图反映ILM策略的概要信息,包含策略名称、类型、启用禁用状态、删除状态。 表1 GS_MY_ILMPOLICIES 名称 类型 描述 policy_name character varying(128) ADO策略名称,系统自动生成,规则为:p+策略ID。 policy_type character varying(13) 策略类型。 tablespace character varying(30) 表空间名称,当该策略制定在表空间上时此处有值。当前版本值为null。 enabled character varying(6) 策略是否开启。 deleted character varying(7) 策略是否被删除。 node_name name 数据来源节点的名称。 父主题: OLTP表压缩
  • 操作步骤 向表中插入数据前,请确保表已创建成功。创建表的步骤请参见管理表。 向表customer_t1中插入一行数据。 数据值是按照这些字段在表中出现的顺序列出的,并且用逗号分隔。通常数据值是文本(常量),但也允许使用表达式。 1 gaussdb=# INSERT INTO customer_t1(c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', 'Grace'); 如果用户已经知道表中字段的顺序,也可无需列出表中的字段。例如以下命令与上面的命令效果相同。 1 gaussdb=# INSERT INTO customer_t1 VALUES (3769, 'hello', 'Grace'); 如果用户不知道所有字段的数值,可以忽略其中的一些。如果INSERT语句中,用户没有显示指定目标表的字段名字,那么VALUES子句中待插入的多个值,将按照列号和目标表的字段一一对应,即VALUES子句的第一个值对应目标表的第一列,VALUES子句的第二个值对应目标表的第二列,以此类推,没有VALUES数值对应的列自动填充缺省值或NULL。没有数值的字段将被填充为字段的缺省值。例如: 1 2 3 gaussdb=# INSERT INTO customer_t1 (c_customer_sk, c_first_name) VALUES (3769, 'Grace'); gaussdb=# INSERT INTO customer_t1 VALUES (3769, 'hello'); 用户也可以对独立的字段或者整个行明确缺省值: 1 2 3 gaussdb=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', DEFAULT); gaussdb=# INSERT INTO customer_t1 DEFAULT VALUES; 如果需要在表中插入多行,请执行如下命令: 1 2 3 4 gaussdb=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES (6885, 'maps', 'Joes'), (4321, 'tpcds', 'Lily'), (9527, 'world', 'James'); 如果需要向表中插入多条数据,除此命令外,也可以多次执行插入一行数据命令实现。但是建议使用此命令以提升效率。 如果从指定表插入数据到当前表,例如在数据库中创建了一个表customer_t1的备份表customer_t2,现在需要将表customer_t1中的数据插入到表customer_t2中,则可以执行如下命令: 1 2 3 4 5 6 7 8 9 gaussdb=# CREATE TABLE customer_t2 ( c_customer_sk integer, c_customer_id char(5), c_first_name char(6), c_last_name char(8) ); gaussdb=# INSERT INTO customer_t2 SELECT * FROM customer_t1; 从指定表插入数据到当前表时,若指定表与当前表对应的字段数据类型之间不存在隐式转换,则这两种数据类型必须相同。 使用不带AS的表别名向表中插入数据。 1 2 3 gaussdb=# CREATE TABLE table_name(a int,b text,c timestamp,d float); gaussdb=# INSERT INTO table_name alias_name VALUES(1,'ha','1997-01-01 10:00:00'::timestamp,1.234); gaussdb=# INSERT INTO table_name alias_name(b,c,d) VALUES('ha','1997-01-01 10:00:00'::timestamp,1.234); INSERT不带AS的表别名不能为关键字(如SELECT、VALUE)或者表达式,别名要求符合标识符命名规则。 INSERT不带AS的表别名不支持INSERT INTO table_name alias_name(alias_name.col1,...,alias_name.coln) VALUES(xxx)格式。 INSERT的分区表不带AS的表别名不支持指定分区插入操作。 删除备份表。 1 gaussdb=# DROP TABLE customer_t2 CASCADE; 在删除表的时候,若当前需删除的表与其他表有依赖关系,需先删除关联的表,然后再删除当前表。
  • 背景信息 服务端与客户端使用不同的字符集时,两者字符集中单个字符的长度也会不同,客户端输入的字符串会以服务端字符集的格式进行处理,所以产生的最终结果可能会与预期不一致。 表1 客户端和服务端设置字符集的输出结果对比 操作过程 服务端和客户端编码一致 服务端和客户端编码不一致 存入和取出过程中没有对字符串进行操作 输出预期结果 输出预期结果(客户端编码保持不变)。 存入取出过程对字符串有做一定的操作(如字符串函数操作) 输出预期结果 根据对字符串具体操作可能产生非预期结果。 存入过程中对超长字符串有截断处理 输出预期结果 字符集中字符编码长度是否一致,如果不一致可能会产生非预期的结果。 上述字符串函数操作与自动截断机制存在叠加影响风险。例如:在客户端与服务端字符集不一致的场景下,当同时存在字符串函数处理操作和自动截断机制时,系统将在完成字符串处理后继续执行二次截断,从而引发非预期结果。详细的示例请参见表2。 数据库DBCOMPATIBILITY设为兼容TD(Teradata)模式,且GUC参数td_compatible_truncation设置为on的情况下,才会对超长字符串进行截断。 执行如下命令建立示例中需要使用的表table1、table2。 1 2 gaussdb=# CREATE TABLE table1(id int, a char(6), b varchar(6),c varchar(6)); gaussdb=# CREATE TABLE table2(id int, a char(20), b varchar(20),c varchar(20)); 表2 示例 编号 1 2 3 4 服务端字符集 SQL_ASCII SQL_ASCII SQL_ASCII SQL_ASCII 客户端字符集 UTF8 UTF8 UTF8 UTF8 是否启用自动截断 是 是 是 否 示例 1 gaussdb=# INSERT INTO table1 VALUES(1,reverse('123AAA78'),reverse('123AA78'),reverse('123AA78')); 1 gaussdb=# INSERT INTO table1 VALUES(2,reverse('123A78'),reverse('123A78'),reverse('123A78')); 1 gaussdb=# INSERT INTO table1 VALUES(3,'87A123','87A123','87A123'); 1 2 gaussdb=# INSERT INTO table2 VALUES(1,reverse('123AA78'),reverse('123AA78'),reverse('123AA78')); gaussdb=# INSERT INTO table2 VALUES(2,reverse('123A78'),reverse('123A78'),reverse('123A78')); 结果 1 2 3 id |a|b|c ----+------+------+------ 1 | 87| 87| 87 1 2 3 id |a|b|c ----+------+------+------ 2 | 873| 873| 873 1 2 3 id | a | b | c ----+-------+-------+------- 3 | 87A1 | 87A1 | 87A1 1 2 3 4 id |a|b|c ----+-------------------+--------+-------- 1 | 87 321| 87 321 | 87 321 2 | 87321| 87321| 87321 说明 字符串在服务端翻转后,并进行截断,由于服务端和客户端的字符集不一致,字符A在客户端由多个字节表示,结果产生异常。 字符串翻转后,又进行了自动截断,所以产生了非预期的效果。 由于字符串类型字段的长度是客户端字符编码长度的整数倍,所以截断后产生结果正常。 与示例1类似,多字节字符翻转之后不再表示原来的字符。
  • Hint使用准备 为了方便了解hint的使用场景,手册提供了所有查询改写hint的应用示例,请参见Hint使用说明,相关建表语句和环境准备如下: 会话设置: SET client_encoding = 'UTF8'; CREATE SCHEMA rewrite_rule_test; SET current_schema = rewrite_rule_test; SET enable_codegen= off;
  • 功能描述 优化器支持一系列查询改写规则,可以对SQL语句进行等价的逻辑改写,从而生成更好的执行计划。但在一些场景下,用户并不希望改写SQL语句、或者优化器的改写会导致计划跳变,对于这些特定的场景,需要能够使用hint对改写规则进行控制,让优化器按照特定的方式进行改写。目前数据库支持对ANY/EXISTS的子链接、简单子查询、消减ORDER BY、HAVING子句下推、延迟聚合等多种场景的SQL进行hint控制,具体请参见:Hint使用说明。 部分查询改写规则同时受查询改写的hint和GUC参数控制,通常查询改写的hint优先级高于GUC参数控制,涉及到受GUC参数控制的改写规则会在Hint使用说明相关章节进行描述。 每条查询改写规则受一对互斥的hint控制,如:子查询展开的规则同时受EXPAND_SUBQUERY和NO_EXPAND_SUBQUERY控制,其中,EXPAND_SUBQUERY Hint表示允许应用该规则对SQL进行改写,NO_EXPAND_SUBQUERY表示禁止使用该规则对SQL进行改写。且当同一个查询块(queryblock)中同时存在两个互斥的hint时,以获取的首个hint为准,例如:/*+ EXPAND_SUBQUERY NO_EXPAND_SUBQUERY */,则EXPAND_SUBQUERY Hint生效。 查询改写的hint允许重复,但对于重复的hint数据库只会使用第一个,对于其他未使用的hint则会报"unused hint" Warning提示。例如:/*+ EXPAND_SUBLINK EXPAND_SUBLINK */,由于数据库只使用第一个EXPAND_SUBLINK hint,所以仍然会报"unused hint" Warning提示。
  • 查询改写Hint列表 表1 查询改写支持的hint列表 序号 Hint名称 描述 1 EXPAND_SUBLINK_HAVING 允许HAVING子句中的子链接提升。 2 NO_EXPAND_SUBLINK_HAVING 禁止HAVING子句中的子链接提升。 3 EXPAND_SUBLINK 允许对ANY/EXISTS类型子链接进行提升。 4 NO_EXPAND_SUBLINK 禁止对ANY/EXISTS类型子链接进行提升。 5 EXPAND_SUBLINK_TARGET 允许对TargetList中的子链接进行提升。 6 NO_EXPAND_SUBLINK_TARGET 禁止对TargetList中的子链接进行提升。 7 USE_MAGIC_SET 从主查询下推条件到子查询,先针对子查询的关联字段进行分组聚集,再和主查询进行关联,减少相关子链接的重复扫描,提升查询效率。 8 NO_USE_MAGIC_SET 禁止从主查询下推条件到子查询,将带有聚集算子的子查询提前和主查询进行关联。 9 EXPAND_SUBLINK_UNIQUE_CHECK 允许对无agg的子链接进行提升,子链接提升需要保证对于每个条件只有一行输出。 10 NO_EXPAND_SUBLINK_UNIQUE_CHECK 禁止对无agg的子链接进行提升。 11 NO_SUBLINK_DISABLE_REPLICATED 允许带有复制表的fast query shipping或者Stream场景的表达式子链接提升。 12 SUBLINK_DISABLE_REPLICATED 禁止带有复制表的fast query shipping或者Stream场景的表达式子链接提升。 13 NO_SUBLINK_DISABLE_EXPR 允许对表达式类型的子链接进行提升。 14 SUBLINK_DISABLE_EXPR 禁止对表达式类型的子链接进行提升。 15 ENABLE_SUBLINK_ENHANCED 允许子链接提升增强,支持对OR表达式等相关或非相关子链接提升。 16 NO_ENABLE_SUBLINK_ENHANCED 禁用子链接提升增强,禁止对OR表达式等相关或非相关子链接提升。 17 PARTIAL_PUSH Stream场景支持对listagg和arrayagg添加gather算子。 18 NO_PARTIAL_PUSH Stream场景禁止对listagg和arrayagg添加gather算子。 19 REDUCE_ORDER_BY 消减冗余的ORDER BY,外层查询对内层查询结果无排序要求时,可以减少不必要的ORDER BY提升查询效率。 20 NO_REDUCE_ORDER_BY 禁止消减不必要的ORDER BY。 21 REMOVE_NOT_NULL 消减不必要的NOT NULL条件,当列属性为NOT NULL时,可以消减查询条件中的IS NOT NULL判断。 22 NO_REMOVE_NOT_NULL 禁止消减IS NOT NULL条件判断。 23 LAZY_AGG 子查询与外层查询存在同样的GROUP BY条件,两层聚集运算可能导致查询效率低下,消除子查询中的聚集运算,以此提高查询效率。 24 NO_LAZY_AGG 禁用消除子查询中的聚集运算规则。 25 EXPAND_SUBQUERY 子查询提升,将子查询提升与上层做JOIN连接,优化查询效率。 26 NO_EXPAND_SUBQUERY 禁用子查询提升。 27 PUSHDOWN_HAVING 下推HAVING条件表达式。 28 NO_PUSHDOWN_HAVING 禁止下推HAVING表达式。 29 INLIST_TO_JOIN 控制使用inlist-to-join对SQL进行改写。 30 NO_INLIST_TO_JOIN 控制禁止使用inlist-to-join对SQL进行改写。 31 ROWNUM_PUSHDOWN 允许行号下推。 32 NO_ROWNUM_PUSHDOWN 禁止行号下推。 33 WINDOWAGG_PUSHDOWN 允许父查询中窗口函数的过滤条件下推到子查询。 34 NO_WINDOWAGG_PUSHDOWN 禁止父查询中窗口函数的过滤条件下推到子查询。 35 CS E_REWRITE_OPT 允许使用公共子表达式CSE查询重写将having公共子查询重写为窗口聚集函数。 36 NO_CSE_REWRITE_OPT 禁止使用公共子表达式CSE查询重写将having公共子查询重写为窗口聚集函数。 37 GROUPBY_PUSHDOWN_SUBQUERY 允许使用groupby-pushdown-subquery查询重写将groupby聚集函数下推到子查询。 38 NO_GROUPBY_PUSHDOWN_SUBQUERY 禁止使用groupby-pushdown-subquery查询重写将groupby聚集函数下推到子查询。
  • PG_GET_SENDERS_CATCHUP_TIME PG_GET_SENDERS_CATCHUP_TIME视图显示DN上当前活跃的主备发送线程的追赶信息。具体字段信息如表1所示。 表1 PG_GET_SENDERS_CATCHUP_TIME字段 名称 类型 描述 pid bigint 当前sender的线程ID。 lwpid integer 当前sender的lwpid。 local_role text 本地的角色。 peer_role text 对端的角色。 state text 当前sender的复制状态。 Startup:启动状态。 Backup:备份状态。 Catchup:追赶状态,表示备节点正在追赶主节点。 Streaming:流复制状态,当备节点追上主节点后维持Streaming状态。 type text 当前sender的类型。 Wal:预写入日志类型。 Data:数据类型。 catchup_start timestamp with time zone catchup启动的时间。 catchup_end timestamp with time zone catchup结束的时间。 父主题: 其他系统视图
  • gs_fault_inject(int64, text, text, text, text, text) 描述:该函数不能调用,调用时会报WARNING信息:"unsupported fault injection",并不会对数据库产生任何影响和改变。 参数:int64注入故障类型(0:C LOG 扩展页面;1:读取CLOG页面;2:强制死锁)。 text第二个入参在第一入参为2的模式下若为“1”则死锁,其余不死锁;第二个入参在第一入参为0、1时,表示CLOG开始扩展或读取的起始页面号。 text第三个入参在第一入参为0、1时,表示扩展或读取的页面个数。 text第四到六入参为预留参数。 返回值类型:int64
  • 方式二:国密TLS双向认证 前置条件:用户已经获取服务端所需要的国密TLS证书和私钥文件,并完成服务端配置;同时已经获取客户端所需要的client.key.pk8、client_enc.key.pk8、client.crt、client_enc.crt、cacert.pem证书与私钥文件,以下步骤4介绍如何将证书配置在客户端。 关于证书生成和获取,请联系管理员。服务端配置证书的具体操作,请联系管理员。 使用国密TLS双向认证的方式连接数据库的步骤如下:
  • 方式一:国密TLS单向认证 前置条件:用户已经获取服务端所需要的国密TLS证书和私钥文件,并完成服务端配置;同时已经获取客户端所需要的cacert.pem根证书,以下步骤4介绍如何将根证书配置在客户端。 关于证书生成和获取,请联系管理员。服务端配置证书的具体操作,请联系管理员。 使用国密TLS单向认证的方式连接数据库的步骤如下: 导入java.sql.Connection、java.sql.DriverManager、java.util.Properties。 此外,用户需要根据实际的应用场景,再导入其他的接口和类,详见JDBC接口参考。 import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; 指定数据库urls($ip、$port、database需要用户自行修改)、用户名和密码。 从环境变量EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV获取的用户名和密码设置为Properties对象的属性值。 String urls = "jdbc:gaussdb://$ip:$port/database"; String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); Properties urlProps = new Properties(); urlProps.setProperty("user", userName); urlProps.setProperty("password", password); 设置SSL属性为true,设置sslmode为verify-ca。 urlProps.setProperty("ssl", "true"); urlProps.setProperty("sslmode", "verify-ca"); 在客户端配置cacert.pem根证书,sslgmcipher仅允许配置为ECC_SM4_SM3。 sslrootcert和sslgmcipher参数的具体说明,详见sslrootcert和sslgmcipher。 urlProps.setProperty("sslrootcert", "cacert.pem"); urlProps.setProperty("sslgmcipher", "ECC_SM4_SM3"); 加载驱动。 在代码运行工具(如IDE)中添加gaussdbjdbc.jar包。 执行以下命令加载数据库驱动程序“com.huawei.gaussdb.jdbc.Driver”。 Class.forName("com.huawei.gaussdb.jdbc.Driver"); 创建数据库连接。 调用DriverManager.getConnection(String url, Properties info),进行数据库连接。 Connection conn = DriverManager.getConnection(urls,urlProps);
  • PGXC_COMM_RECV_STREAM PGXC_COMM_RECV_STREAM视图展示所有DN上的通信库接收流状态。 表1 PGXC_COMM_RECV_STREAM字段 名称 类型 描述 node_name text 节点名称。 local_tid bigint 使用此通信流的线程ID。 remote_name text 连接对端节点名称。 remote_tid bigint 连接对端线程ID。 idx integer 通信对端DN在本DN内的标识编号。 sid integer 通信流在物理连接中的标识编号。 tcp_sock integer 通信流所使用的tcp通信socket。 state text 通信流当前的状态。 UNKNOWN:当前逻辑连接状态未知。 READY:逻辑连接已就绪。 RUN:逻辑连接发送报文正常。 HOLD:逻辑连接发送报文等待中。 CLOSED:关闭逻辑连接。 TO_CLOSED:将会关闭逻辑连接。 query_id bigint 通信流对应的debug_query_id编号。 pn_id integer 通信流所执行查询的plan_node_id编号。 send_smp integer 通信流所执行查询send端的smpid编号。 recv_smp integer 通信流所执行查询recv端的smpid编号。 recv_bytes bigint 通信流接收的数据总量。单位:Byte。 time bigint 通信流当前生命周期使用时长。单位:ms。 speed bigint 通信流的平均接收速率。单位:Byte/s。 quota bigint 通信流当前的通信配额值。单位:Byte。 buff_usize bigint 通信流当前缓存的数据大小。单位:Byte。 父主题: 通信
  • 变量赋值示例 1 2 3 4 5 6 7 8 9 10 11 12 13 DECLARE emp_id INTEGER := 7788;--赋值 BEGIN emp_id := 5;--赋值 DBE_OUTPUT.PRINT_LINE(emp_id); emp_id := 5*7784; DBE_OUTPUT.PRINT_LINE(emp_id); END; / --结果如下: 5 38920 ANONYMOUS BLOCK EXECUTE
  • 语法格式 SELECT select_expressions INTO [STRICT] target FROM ... SELECT INTO [STRICT] target [FROM ..] EXECUTE [IMMEDIATE] select_expressions BULK COLLECT INTO target ... 对以上语法格式的解释如下: select_expressions:查询的SQL语句。通过基础SQL命令加INTO子句可以将单行或多列的结果赋值给一个变量(记录、行类型和标量变量列表)。 target :目标变量。可以是一个记录变量、一个行变量或一个有逗号分隔的简单变量和记录/行域列表。 STRICT:可选。在开启GUC参数behavior_compat_options = 'select_into_return_null'的前提下(默认未开启),若指定该选项则该查询必须刚好返回一行不为空的结果集,否则会报错,报错信息可能是NO_DATA_FOUND(没有行)、TOO_MANY_ROWS(多于一行)或QUERY_RETURNED_NO_ROWS(没有数据返回)。若不指定该选项则没有该限定,且支持返回空结果集。 BULK COLLECT INTO只支持批量赋值给数组或集合类型,合理使用LIMIT字段避免操作过量数据导致性能下降。 INTO/BULK COLLECT INTO只支持4层以下Record类型直接嵌套。 返回空结果集需要数据库初始化使用PG兼容参数,设置GUC参数behavior_compat_options = 'select_into_return_null' 为开启。设置GUC参数behavior_compat_options = '' 则关闭。 对于数组变量,小括号()将优先识别为下标,因此对于带括号的表达式,不支持写在数组变量后面。如对于SELECT (1+3) INTO va(5),不支持写为SELECT INTO va(5) (1+3)或SELECT INTO va[5] (1+3)。 BULK COLLECT INTO 只支持在ORA兼容性数据库下使用。 IMMEDIATE关键字仅用作语法兼容,无实际意义。
  • 示例 gaussdb=# DROP TABLE IF EXISTS customers; gaussdb=# CREATE TABLE customers(id int,name varchar); gaussdb=# INSERT INTO customers VALUES(1,'ab'); gaussdb=# DECLARE my_id integer; BEGIN select id into my_id from customers limit 1; -- 赋值 END; / ANONYMOUS BLOCK EXECUTE gaussdb=# DECLARE type id_list is varray(6) of customers.id%type; id_arr id_list; BEGIN select id bulk collect into id_arr from customers order by id DESC limit 20; -- 批量赋值 END; / ANONYMOUS BLOCK EXECUTE gaussdb=# DECLARE TYPE id_list IS varray(6) OF customers.id%type; id_arr id_list; sql_qry varchar2(150); BEGIN sql_qry := 'SELECT id FROM customers ORDER BY id DESC LIMIT 20'; EXECUTE IMMEDIATE sql_qry BULK COLLECT INTO id_arr; -- 批量赋值 END; / ANONYMOUS BLOCK EXECUTE
  • resilience_threadpool_reject_cond 参数说明:用于控制线程池过载逃生的线程池使用率比例。该参数仅在GUC参数enable_thread_pool和use_workload_manager打开时生效。 参数类型:字符串 参数单位:无 取值范围: 该参数分为两部分,'recover_threadpool_percent、overload_threadpool_percent',这两个部分的具体含义如下: recover_threadpool_percent:线程池恢复正常状态时的线程池使用率,当线程池使用率小于该值时,停止过载逃生并放开新连接接入,取值为0~INT_MAX,设置为多少表示百分之多少。 overload_threadpool_percent:线程池过载时的线程池使用率,当线程池使用率大于该值时,表示当前线程池已经过载,触发过载逃生kill会话并禁止新连接接入,取值为0~INT_MAX,设置为多少表示百分之多少。 示例: resilience_threadpool_reject_cond = '50,90' 表示线程池使用率超过90%后,禁止新连接接入并kill堆积的会话,kill会话过程中线程池使用率下降到50%时,停止kill会话并允许新连接接入。 默认值:'0,0',表示关闭线程池逃生功能。 设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。 线程池使用率可以通过DBE_PERF.local_threadpool_status视图查询获得;线程池设置的初始线程池线程数目可以通过查询thread_pool_attr参数获得。 该参数如果设置的百分比过小,则会频繁触发线程池过载逃生流程,会使正在执行的会话被强制退出,新连接短时间接入失败,需要根据实际线程池使用情况慎重设置。 recover_threadpool_percent和overload_threadpool_percent的值可以同时为0,除此之外,recover_threadpool_percent的值必须要小于overload_threadpool_percent,否则不会生效。 use_workload_manager参数关闭的情况下,如果打开bypass_workload_manager,该参数也会生效,但是因为bypass_workload_manager是SIGHUP类型,用reload方式设置后需要重启数据库才会使得当前功能生效。
  • thread_pool_stream_attr 参数说明:用于控制stream线程池功能的详细属性,stream线程只在DN生效,该参数仅在enable_thread_pool打开后生效,仅sysadmin用户可以访问。 参数类型:字符串 参数单位:无 取值范围: 该参数分为四个部分,'stream_thread_num, stream_proc_ratio ,group_num ,cpubind_info',这四个部分的具体含义如下: stream_thread_num:stream线程池中的线程总数,取值范围是0~4096。其中0的含义是数据库根据系统CPU core的数量来自动配置线程池的线程数,如果参数值大于0,线程池中的线程数等于stream_thread_num。线程池大小推荐根据硬件配置设置,计算公式如下:stream_thread_num = CPU核数*(3~5),stream_thread_num最大值为4096。 stream_proc_ratio:预留给stream线程的proc数量比例,浮点类型,默认为0.2,预留proc计算方式为:stream_proc_ratio * stream_thread_num。 group_num:线程池中的线程分组个数,取值范围是0~64。其中0的含义是数据库根据系统NUMA组的个数来自动配置线程池的线程分组个数,如果参数值大于0,线程池中的线程组个数等于group_num。thread_pool_stream_attr的group_num需与thread_pool_attr的group_num配置和使用保持一致,若设置为不同值,以thread_pool_attr的group_num为准。 cpubind_info:线程池是否绑核的配置参数。可选择的配置方式有:1. '(nobind)' ,线程不做绑核;2. '(allbind)',利用当前系统所有能查询到的CPU core做线程绑核;3. '(nodebind: 1, 2)',利用NUMA组1、2中的CPU core进行绑核;4. '(cpubind: 0-30)',利用0-30号CPU core进行绑核;5. '(numabind: 0-30)',在NUMA组内利用0-30号CPU core进行绑核。该参数不区分大小写。thread_pool_stream_attr的cpubind_info需与thread_pool_attr的cpubind_info配置和使用保持一致,若设置为不同值,以thread_pool_attr的cpubind_info为准。 默认值: stream_thread_num:16 stream_proc_ratio:0.2 group_num、cpubind_info:详情请参见thread_pool_attr。 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:在内存充足且CPU性能好的情况下,当业务需要更多并发性能时可以增加该参数值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • static_thread_pool_num 参数说明:线程个数,表示用于创建静态线程池(静态池)的线程个数。该参数仅在enable_thread_pool打开后的分布式CN上生效。 参数类型:整型 参数单位:无 取值范围:0 ~ 1024 默认值:10% * group_num * thread_num,其中group_num和thread_num请参见thread_pool_attr。 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。 创建静态线程池用于防止DN实例耗尽CN线程池线程,保证有可用线程连接DN执行业务。 必须确保thread_pool_attr配置的线程数与static_thread_pool_num配置的线程数之和不超过min(4096, max_connections),且static_thread_pool_num必须大于DN分片数乘以group_num,否则无法成功创建静态池。 static_thread_pool_num为虚拟值,设置后不会立刻生效。当CN线程池满载或者耗尽,CN会主动创建static_thread_pool_num个线程,这些线程构成静态池。 CN静态池用于单DN连接业务,静态池对集群每个DN分片线程数量均分,计算公式为:static_thread_pool_num/n(n为DN分片数量), 使用超过计算公式的固定配额线程数则报错。 若静态池线程被多DN连接业务持有则报错并归还线程。 静态池创建不支持多租模式下非默认group线程组。 static_thread_pool_num参数为0表示关闭静态池功能,若业务不希望由静态池管控多DN连接可以考虑关闭该功能。 创建静态线程池功能约束:前提为分布式CN开启线程池,当前功能解决DN分片故障的场景,保障CN仍有可用的线程给业务使用,实现业务不中断。由单CN查询导致的线程池占满不在设计解决范围内,同时对业务仅在单CN查询的情况不纳入管控和统计。
  • enable_thread_pool 参数说明:控制是否使用线程池功能。 参数类型:布尔型 参数单位:无 取值范围: on:表示开启线程池功能。 off:表示不开启线程池功能。 默认值:on 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:在低并发长连接性能敏感场景下,建议关闭该参数,其他场景下建议打开该参数。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • thread_pool_attr 参数说明:用于控制线程池功能的详细属性,该参数仅在enable_thread_pool打开后生效,仅sysadmin用户可以访问。 参数类型:字符串 参数单位:无 取值范围: 该参数分为三个部分,'thread_num, group_num, cpubind_info',这三个部分的具体含义如下: thread_num:线程池中的初始线程总数,可以动态扩充,取值范围是0~4096。其中0的含义是数据库根据系统CPU core的数量来自动配置线程池的线程数,如果参数值大于0,线程池中的线程数等于thread_num。线程池大小建议根据硬件配置设置,计算公式如下:thread_num = CPU核数*(3~5),thread_num最大值为4096。 group_num:线程池中的线程分组个数,取值范围是0~64。其中0的含义是数据库根据系统NUMA组的个数来自动配置线程池的线程分组个数,如果参数值大于0,线程池中的线程组个数等于group_num。 cpubind_info:线程池是否绑核的配置参数。可选择的配置方式有:1. '(nobind)' ,线程不做绑核;2. '(allbind)',利用当前系统所有能查询到的CPU core做线程绑核;3. '(nodebind: 1, 2)',利用NUMA组1、2中的CPU core进行绑核;4. '(cpubind: 0-30)',利用0-30号CPU core进行绑核;5. '(numabind: 0-30)',在NUMA组内利用0-30号CPU core进行绑核。该参数不区分大小写。 默认值: 独立部署:'1024,2,(nobind)'(64核CPU/512G内存,60核CPU/480G内存,32核CPU/256G内存);'512,2,(nobind)'(16核CPU/128G内存);'256,2,(nobind)'(8核CPU/64G内存,8核CPU/32G内存);'128,2,(nobind)'(4核CPU/32G内存);'64,2,(nobind)'(4核CPU/16G内存) 混合部署 CN: '512,2,(nobind)'(64核CPU/512G内存); '256,2,(nobind)'(32核CPU/256G内存);'128,2,(nobind)'(16核CPU/128G内存) DN: '4096,2,(nobind)'(64核CPU/512G内存);'2048,2,(nobind)'(32核CPU/256G内存);'1024,2,(nobind)'(16核CPU/128G内存) 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:内存充足且CPU性能好的情况,当业务需要更多连接时可以增加该参数值。 设置不当的风险与影响:默认值即推荐值,不建议修改。修改必须详细确认参数的规格限制,并考虑硬件资源是否足够,否则可能导致集群异常。 必须确保thread_pool_attr配置的线程数与static_thread_pool_num配置的线程数之和不超过min(4096, max_connections),且static_thread_pool_num必须大于DN分片数乘以group_num,否则无法成功创建静态池。
  • 参数说明 configuration_parameter 运行时参数的名称。 取值范围:可以使用SHOW ALL命令查看运行时参数。 部分通过SHOW ALL查看的参数不能通过SET设置,如max_datanodes。 CURRENT_SCHEMA 当前模式。 TIME ZONE 时区。 TRANSACTION ISOLATION LEVEL 事务的隔离级别。 SESSION AUTHORIZATION 当前会话的用户标识符。 ALL 所有运行时参数。
  • 示例 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 --显示timezone参数值。 gaussdb=# SHOW timezone; TimeZone ---------- PRC (1 row) --显示当前模式。 gaussdb=# SHOW CURRENT_SCHEMA; current_schema ---------------- "$user",public (1 row) --显示事务的隔离级别。 gaussdb=# SHOW TRANSACTION ISOLATION LEVEL; transaction_isolation ----------------------- read committed (1 row) --显示当前会话的用户标识符。 gaussdb=# SHOW SESSION AUTHORIZATION; session_authorization ----------------------- omm1 (1 row) --显示所有参数。 gaussdb=# SHOW ALL; --显示参数名中包含”var”的所有参数。 gaussdb=# SHOW VARIABLES LIKE var;
  • DBE_SQL_UTIL.drop_remote_sql_patch drop_remote_sql_patch是用于指定CN删除SQL PATCH的接口函数,返回执行是否成功,如表1所示。 限制:仅初始用户、sysadmin、opradmin和monadmin用户有权限调用。 表1 DBE_SQL_UTIL.drop_remote_sql_patch入参和返回值列表 参数 类型 描述 node_name IN text 目标节点名。 patch_name IN name PATCH名称。 result OUT bool 执行是否成功。 父主题: DBE_SQL_UTIL Schema
  • STATIO_USER_TABLES STATIO_USER_TABLES视图显示命名空间中所有用户关系表的I/O状态信息,如表1所示。 表1 STATIO_USER_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表索引命中缓冲区数(如果存在)。 last_updated timestamp with time zone 视图中该对象监控数据最后一次更新的时间。 父主题: Cache/IO
  • 语法 RAISE有以下五种语法格式: 图1 raise_format::= 图2 raise_condition::= 图3 raise_sqlstate::= 图4 raise_option::= 图5 raise::= 参数说明: level选项用于指定错误级别,有DEBUG、LOG、INFO、NOTICE、WARNING以及EXCEPTION(默认值)。EXCEPTION抛出一个正常终止当前事务的异常,其他的仅产生不同异常级别的信息。特殊级别的错误信息是否报告到客户端、写到服务器日志由log_min_messages和client_min_messages这两个GUC参数控制。 format:格式字符串,指定要报告的错误消息文本。格式字符串后可跟表达式,用于向消息文本中插入。在格式字符串中,%由format后面跟着的参数的值替换,%%用于打印出%。例如: --v_job_id 将替换字符串中的 %: RAISE NOTICE 'Calling cs_create_job(%)',v_job_id; option = expression:向错误报告中添加另外的信息。关键字option可以是MESSAGE、DETAIL、HINT以及ERRCODE,并且每一个expression可以是任意的字符串。 MESSAGE,指定错误消息文本,这个选项不能用于在USING前包含一个格式字符串的RAISE语句中。 DETAIL,说明错误的详细信息。 HINT,用于打印出提示信息。 ERRCODE,向报告中指定错误码(SQLSTATE)。可以使用条件名称或者直接用五位字符的SQLSTATE错误码。 condition_name:错误码对应的条件名。 sqlstate:错误码。 如果在RAISE EXCEPTION命令中既没有指定条件名也没有指定SQLSTATE,默认用RAISE EXCEPTION (P0001)。如果没有指定消息文本,默认用条件名或者SQLSTATE作为消息文本。 当由SQLSTATE指定了错误码,则不局限于已定义的错误码,可以选择任意包含五个数字或者大写的ASCII字母的错误码,而不是00000。建议避免使用以三个0结尾的错误码,因为这种错误码是类别码,会被整个种类捕获。 兼容ORA模式下,SQLCODE等于SQLSTATE。 图5所示的语法不接受任何参数。这种形式仅用于一个BEGIN块中的EXCEPTION语句,它使得错误重新被处理。
  • 三权分立 默认权限机制和管理员两节的描述基于的是集群创建之初的默认情况。默认情况下拥有SYSADMIN属性的系统管理员,具备系统最高权限。 在实际业务管理中,为了避免系统管理员拥有过度集中的权利带来高风险,可以设置三权分立,将系统管理员的用户管理和审计管理的权限分别授予安全管理员和审计管理员。 三权分立后,系统管理员将不再具有CREATEROLE属性(安全管理员)和AUDITADMIN属性(审计管理员),即不再拥有创建角色和用户的权限,也不再拥有查看和维护数据库审计日志的权限。关于CREATEROLE属性和AUDITADMIN属性的更多信息请参考CREATE ROLE。 初始用户的权限不受三权分立设置影响。因此建议仅将此初始用户作为DBA管理用途,而非业务应用。 使用时请联系华为技术工程师提供技术支持。 如需使用三权分立权限管理模型,应在数据库初始化阶段指定,不建议来回切换权限管理模型。需要注意的是,当需从非三权分立权限管理模型切换至三权分立权限管理模型时,应重新审视已有用户的权限集合。如用户具备系统管理员权限和审计管理员权限,则需要进行权限裁剪。 三权分立后,系统管理员对其他用户的非系统模式不再具有权限,因此在未被授予其他用户模式的权限前,也不能访问放在其他用户模式下的对象。三权分立前的权限详情及三权分立后的权限变化,请分别参见表1和表2。 表1 默认的用户权限 对象名称 初始用户(id为10) 系统管理员 安全管理员 审计管理员 普通用户 表空间 具有所有的权限。 对表空间有创建、修改、删除、访问、分配操作的权限。 不具有对表空间进行创建、修改、删除、分配的权限,访问需要被授权。 模式 对除dbe_perf以外的所有模式有所有的权限。 对自己的模式有所有的权限,对其他用户的非系统模式无权限。 自定义函数 对所有用户自定义函数有所有的权限。 对自己的函数有所有的权限,对其他用户的函数仅有调用权限。 自定义表或视图 对所有用户自定义表或视图有所有的权限。 对自己的表或视图有所有的权限,对其他用户的表或视图无权限。 表2 三权分立较非三权分立权限变化说明 对象名称 初始用户(id为10) 系统管理员 安全管理员 审计管理员 普通用户 表空间 无变化。 依然具有所有的权限。 无变化 无变化 模式 权限缩小。 对自己的模式有所有的权限,对其他用户的非系统模式无权限。 无变化 自定义函数 在未被授予其他用户的非系统模式的权限前,不能访问放在其他用户模式下的函数。 无变化 自定义表或视图 在未被授予其他用户的非系统模式的权限前,不能访问放在其他用户模式下的表或视图。 无变化 PG_STATISTIC系统表和PG_STATISTIC_EXT系统表存储了统计对象的一些敏感信息,如高频值MCV。进行三权分立后系统管理员仍可以通过访问这两张系统表,获取统计信息里的敏感信息。 父主题: 用户及权限
  • GS_LIBCOMM_MEMORY_INFO 记录当前libcomm通信库内部内存使用的基础配置信息。查询该视图需要PUBLIC权限。 表1 GS_LIBCOMM_MEMORY_INFO字段 名称 类型 描述 node_name text DN实例名。 current_used_memory bigint libcomm通信库使用内存,单位为字节(byte)。 current_data_item_num bigint libcomm无锁队列数据块个数。 init_mailbox_memory bigint libcomm初始化mailbox使用的内存,单位为字节(byte)。 max_datanode bigint libcomm通信库支持的最大DN个数。 max_stream bigint libcomm单个TCP连接支持的最大数据流个数。 max_quota_size bigint libcomm逻辑连接的buffer总大小,单位为字节(byte)。 max_usable_memory bigint libcomm通信库缓存最大可使用内存,单位为字节(byte)。 max_memory_pool bigint libcomm通信库在每个DN上可以使用的内存资源池总大小,单位为字节(byte)。 父主题: 通信
  • \COPY命令示例 \COPY的导出命令与COPY命令的区别为把命令中的COPY换成\COPY即可,此处提供一个简单的CSV格式COPY导出命令转换为\COPY导出命令的示例: 1 2 3 4 5 6 7 --COPY命令。 COPY {data_source} to '/path/export.csv' encoding {server_encoding} csv; COPY {data_source} from '/path/export.csv' encoding {server_encoding} csv; --对应的\COPY命令。 \COPY {data_source} to '/path/export.csv' encoding {server_encoding} csv; \COPY {data_source} from '/path/export.csv' encoding {server_encoding} csv;
  • 并行导入命令示例 1 2 3 4 5 6 7 8 9 10 11 12 --data_destination只能是一个表名称 --file_encoding表示该二进制文件导出时指定的编码格式。 --parallel_num表示数据导入时的客户端数量,在集群资源较为充足时建议此值为8 --CSV格式的导入命令 \COPY {data_destination} FROM '/path/export.txt' ENCODING {file_encoding} PARALLEL {parallel_num} CSV; --FIXED格式的导入命令 \COPY {data_destination} FROM '/path/export.txt' ENCODING {file_encoding} PARALLEL {parallel_num} FIXED; --TEXT格式的导入命令 \COPY {data_destination} FROM '/path/export.txt' ENCODING {file_encoding} PARALLEL {parallel_num};
  • ADM_IND_SUBPARTITIONS ADM_IND_SUBPARTITIONS视图显示数据库中所有二级分区表Local索引的索引分区信息(不包含分区表全局索引)。数据库中每个二级分区表的Local索引的索引分区(如果存在的话)都会在ADM_IND_SUBPARTITIONS里有一行记录。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。分布式暂不支持二级分区,该表字段目前全置NULL。 表1 ADM_IND_SUBPARTITIONS字段 名称 类型 描述 index_owner character varying(128) 暂不支持,值为NULL。 index_name character varying(128) 暂不支持,值为NULL。 partition_name character varying(128) 暂不支持,值为NULL。 subpartition_name character varying(128) 暂不支持,值为NULL。 high_value text 暂不支持,值为NULL。 high_value_length numeric 暂不支持,值为NULL。 partition_position numeric 暂不支持,值为NULL。 subpartition_position numeric 暂不支持,值为NULL。 status character varying(8) 暂不支持,值为NULL。 tablespace_name character varying(30) 暂不支持,值为NULL。 pct_free numeric 暂不支持,值为NULL。 ini_trans numeric 暂不支持,值为NULL。 max_trans numeric 暂不支持,值为NULL。 initial_extent numeric 暂不支持,值为NULL。 next_extent numeric 暂不支持,值为NULL。 min_extent numeric 暂不支持,值为NULL。 max_extent numeric 暂不支持,值为NULL。 max_size numeric 暂不支持,值为NULL。 pct_increase numeric 暂不支持,值为NULL。 freelists numeric 暂不支持,值为NULL。 freelist_groups numeric 暂不支持,值为NULL。 logging character varying(7) 暂不支持,值为NULL。 compression character varying(13) 暂不支持,值为NULL。 blevel numeric 暂不支持,值为NULL。 leaf_blocks numeric 暂不支持,值为NULL。 distinct_keys numeric 暂不支持,值为NULL。 avg_leaf_blocks_per_key numeric 暂不支持,值为NULL。 avg_data_blocks_per_key numeric 暂不支持,值为NULL。 clustering_factor numeric 暂不支持,值为NULL。 num_rows numeric 暂不支持,值为NULL。 sample_size numeric 暂不支持,值为NULL。 last_analyzed date 暂不支持,值为NULL。 buffer_pool character varying(7) 暂不支持,值为NULL。 flash_cache character varying(7) 暂不支持,值为NULL。 cell_flash_cache character varying(7) 暂不支持,值为NULL。 user_stats character varying(3) 暂不支持,值为NULL。 global_stats character varying(3) 暂不支持,值为NULL。 interval character varying(3) 暂不支持,值为NULL。 segment_created character varying(3) 暂不支持,值为NULL。 domidx_opstatus character varying(6) 暂不支持,值为NULL。 parameters character varying(1000) 暂不支持,值为NULL。 父主题: 分区表
共100000条
提示

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