华为云用户手册

  • PG_OPERATOR PG_OPERATOR系统表存储有关操作符的信息。 表1 PG_OPERATOR字段 名称 类型 引用 描述 oid oid - 行标识符(隐含属性,必须明确选择)。 oprname name - 操作符的名称。 oprnamespace oid PG_NAMESPACE.oid 包含此操作符的名称空间的OID。 oprowner oid PG_AUTHID.oid 操作符所有者。 oprkind "char" - b:表示中缀(“两边”)。 l:表示前缀(“左边”)。 r:表示后缀(“右边”)。 oprcanmerge boolean - 这个操作符是否支持合并连接。 t(true):表示支持合并连接。 f(false):表示不支持合并连接。 oprcanhash boolean - 这个操作符是否支持Hash连接。 t(true):表示支持Hash连接。 f(false):表示不支持Hash连接。 oprleft oid PG_TYPE.oid 左操作数的类型。 oprright oid PG_TYPE.oid 右操作数的类型。 oprresult oid PG_TYPE.oid 结果类型。 oprcom oid PG_OPERATOR.oid 若存在,值为此操作符的交换符。 若不存在,值为0。 oprnegate oid PG_OPERATOR.oid 若存在,值为此操作符的反转器。 若不存在,值为0。 oprcode regproc PG_PROC.proname 实现这个操作符的函数。 oprrest regproc PG_PROC.proname 此操作符的约束选择性计算函数。 oprjoin regproc PG_PROC.proname 此操作符的连接选择性计算函数。 父主题: 系统表
  • PG_USER PG_USER视图显示数据库用户的信息,默认只有初始化用户和具有sysadmin属性的用户可以查看,其余用户需要赋权后才可以查看。 表1 PG_USER字段 名称 类型 描述 usename name 用户名。 usesysid oid 用户的ID。 usecreatedb boolean 用户是否可以创建数据库。 t(true):表示是。 f(false):表示否。 usesuper boolean 用户是否是拥有最高权限的初始系统管理员。 t(true):表示是。 f(false):表示否。 usecatupd boolean 用户是否可以直接更新系统表。只有usesysid=10的初始系统管理员拥有此权限。其他用户无法获得此权限。 t(true):表示是。 f(false):表示否。 userepl boolean 用户是否可以复制数据流。 t(true):表示是。 f(false):表示否。 passwd text 密文存储后的用户密码,始终为********。 valbegin timestamp with time zone 账户的有效开始时间。如果没有设置有效开始时间,则为NULL。 valuntil timestamp with time zone 账户的有效结束时间。如果没有设置有效结束时间,则为NULL。 respool name 用户所在的资源池。 parent oid 父用户OID。 spacelimit text 永久表的存储空间限额,单位KB。 useconfig text[] 运行时配置项的默认值。 tempspacelimit text 临时表的存储空间限额,单位KB。 spillspacelimit text 算子的落盘空间限额,单位KB。 nodegroup name 用户关联的逻辑数据库名称,如果该用户没有管理逻辑数据库,则该字段为空。 usemonitoradmin boolean 用户是否是监控管理员。 t(true):表示是。 f(false):表示否。 useoperatoradmin boolean 用户是否是运维管理员。 t(true):表示是。 f(false):表示否。 usepolicyadmin boolean 用户是否是安全策略管理员。 t(true):表示是。 f(false):表示否。 父主题: 系统视图
  • 现象描述 查询与销售部所有员工的信息: 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 --建表。 CREATE TABLE staffs (staff_id NUMBER(6) NOT NULL, first_name VARCHAR2(20), last_name VARCHAR2(25), employment_id VARCHAR2(10), section_id NUMBER(4), state_name VARCHAR2(10), city VARCHAR2(10)); CREATE TABLE sections(section_id NUMBER(4), place_id NUMBER(4), section_name VARCHAR2(20)); CREATE TABLE states(state_id NUMBER(4)); CREATE TABLE places(place_id NUMBER(4), state_id NUMBER(4)); --优化前查询。 EXPLAIN SELECT staff_id,first_name,last_name,employment_id,state_name,city FROM staffs,sections,states,places WHERE sections.section_name='Sales' AND staffs.section_id = sections.section_id AND sections.place_id = places.place_id AND places.state_id = states.state_id ORDER BY staff_id; --创建索引。 CREATE INDEX loc_id_pk ON places(place_id); CREATE INDEX state_c_id_pk ON states(state_id); --优化后查询。 EXPLAIN SELECT staff_id,first_name,last_name,employment_id,state_name,city FROM staffs,sections,states,places WHERE sections.section_name='Sales' AND staffs.section_id = sections.section_id AND sections.place_id = places.place_id AND places.state_id = states.state_id ORDER BY staff_id;
  • GS_SQL_PATCH GS_SQL_PATCH系统表存储所有SQL_PATCH的状态信息。 表1 GS_SQL_PATCH字段 名称 类型 描述 patch_name name PATCH名称。 unique_sql_id bigint 查询全局唯一ID。 owner oid PATCH的创建用户ID。 enable boolean PATCH是否生效。 status "char" PATCH的状态(预留字段)。 abort boolean 是否是AbortHint。 hint_string text Hint文本。 hint_node pg_node_tree Hint解析&序列化的结果。 original_query text 原始语句(预留字段)。 patched_query text PATCH之后的语句(预留字段)。 original_query_tree pg_node_tree 原始语句的解析结果(预留字段)。 patched_query_tree pg_node_tree PATCH之后语句的解析结果(预留字段)。 description text PATCH的备注。 parent_unique_sql_id bigint PATCH生效的SQL语句的外层语句的全局唯一ID,存储过程外的语句该值为0,存储过程内的语句该值为调用该存储过程语句的全局唯一ID。 父主题: 系统表
  • 参数说明 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。
  • 语法格式 VALUES {( expression [, ...] )} [, ...] [ ORDER BY { sort_expression [ ASC | DESC | USING operator ] } [, ...] ] [ LIMIT { count | ALL } ] [ OFFSET start [ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ];
  • java.sql.PreparedStatement java.sql.PreparedStatement是预处理语句接口。 表1 对java.sql.PreparedStatement的支持情况 方法名 返回值类型 支持JDBC 4 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()。 executeLargeUpdate()方法必须在JDBC4.2及以上版本使用。 父主题: JDBC接口参考
  • DBE_PLDEBUGGER.turn_off 用于去掉turn_on添加的调试标记,返回值表示成功或失败。可通过DBE_PLDEBUGGER.local_debug_server_info查找已经turn_on的存储过程oid。 函数原型为: 1 2 DBE_PLDEBUGGER.turn_off(Oid) RETURN boolean; 表1 turn_off 入参和返回值列表 名称 类型 描述 func_oid IN oid 函数oid turn_off OUT boolean turn off是否成功 父主题: DBE_PLDEBUGGER Schema
  • GS_CLIENT_GLOBAL_KEYS GS_CLIENT_GLOBAL_KEYS系统表记录密态等值特性中客户端加密主密钥相关信息,每条记录对应一个客户端加密主密钥。 表1 GS_CLIENT_GLOBAL_KEYS字段 名称 类型 描述 oid oid 行标识符(隐含字段)。 global_key_name name 客户端加密主密钥(cmk)名称。 key_namespace oid 包含此客户端加密主密钥(cmk)的命名空间OID。 key_owner oid 客户端加密主密钥(cmk)的所有者。 key_acl aclitem[] 创建该密钥时所拥有的访问权限。 create_date timestamp without time zone 创建密钥的时间。 父主题: 系统表
  • date_part date_part函数是在传统的Ingres函数的基础上制作的(该函数等效于SQL标准函数extract): date_part('field', source) 这里的field参数必须是一个字符串,而不是一个名称。有效的field与extract一样,详细信息请参见EXTRACT。 示例: 1 2 3 4 5 gaussdb=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 16 (1 row) 1 2 3 4 5 gaussdb=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes'); date_part ----------- 4 (1 row)
  • EXTRACT EXTRACT(field FROM source) extract函数从日期或时间的数值里抽取子域,比如年、小时等。source必须是一个timestamp、time或interval类型的值表达式(类型为date的表达式转换为timestamp,因此也可以用)。field是一个标识符或者字符串,它指定从源数据中抽取的域。extract函数返回类型为double precision的数值。field的取值范围如下所示。 century 世纪。 第一个世纪从0001-01-01 00:00:00 AD开始。这个定义适用于所有使用阳历的国家。没有0世纪,直接从公元前1世纪到公元1世纪。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13'); date_part ----------- 20 (1 row) day 如果source为timestamp,表示月份里的日期(1-31)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 16 (1 row) 如果source为interval,表示天数。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(DAY FROM INTERVAL '40 days 1 minute'); date_part ----------- 40 (1 row) decade 年份除以10。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 200 (1 row) dow 每周的星期几,星期天(0)到星期六(6)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 5 (1 row) doy 一年的第几天(1~365/366)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(DOY FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 47 (1 row) epoch 如果source为timestamp with time zone,表示自1970-01-01 00:00:00-00 UTC以来的秒数(结果可能是负数); 如果source为date和timestamp,表示自1970-01-01 00:00:00-00当地时间以来的秒数; 如果source为interval,表示时间间隔的总秒数。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40.12-08'); date_part -------------- 982384720.12 (1 row) 1 2 3 4 5 gaussdb=# SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours'); date_part ----------- 442800 (1 row) 将epoch值转换为时间戳的方法。 1 2 3 4 5 gaussdb=# SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 982384720.12 * INTERVAL '1 second' AS RESULT; result --------------------------- 2001-02-17 12:38:40.12+08 (1 row) hour 小时域(0-23)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 20 (1 row) isodow 一周的第几天(1-7)。 星期一为1,星期天为7。 除了星期天外,都与dow相同。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(ISODOW FROM TIMESTAMP '2001-02-18 20:38:40'); date_part ----------- 7 (1 row) isoyear 日期中的ISO 8601标准年(不适用于间隔)。 每个带有星期一开始的周中包含1月4日的ISO年,所以在年初的1月或12月下旬的ISO年可能会不同于阳历的年。详细信息请参见后续的week描述。 1 2 3 4 5 6 7 8 9 10 gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01'); date_part ----------- 2005 (1 row) gaussdb=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2006-01-01 00:00:40'); date_part ----------- 52 (1 row) gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02'); date_part ----------- 2006 (1 row) gaussdb=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2006-01-02 00:00:40'); date_part ----------- 1 (1 row) microseconds 秒域(包括小数部分)乘以1,000,000。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MICROSECONDS FROM TIME '17:12:28.5'); date_part ----------- 28500000 (1 row) millennium 千年。 20世纪(19xx年)里面的年份在第二个千年里。第三个千年从2001年1月1日零时开始。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 3 (1 row) milliseconds 秒域(包括小数部分)乘以1000。请注意它包括完整的秒。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5'); date_part ----------- 28500 (1 row) minute 分钟域(0-59)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MINUTE FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 38 (1 row) month 如果source为timestamp,表示一年里的月份数(1-12)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 2 (1 row) 如果source为interval,表示月的数目,然后对12取模(0-11)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months'); date_part ----------- 1 (1 row) quarter 该天所在的该年的季度(1-4)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(QUARTER FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 1 (1 row) second 秒域,包括小数部分(0-59)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(SECOND FROM TIME '17:12:28.5'); date_part ----------- 28.5 (1 row) timezone 与UTC的时区偏移量,单位为秒。正数对应UTC东边的时区,负数对应UTC西边的时区。 timezone_hour 时区偏移量的小时部分。 timezone_minute 时区偏移量的分钟部分。 week 该天在所在的年份里是第几周。ISO 8601定义一年的第一周包含该年的一月四日(ISO-8601 的周从星期一开始)。换句话说,一年的第一个星期四在第一周。 在ISO定义里,一月的头几天可能是前一年的第52或者第53周,十二月的后几天可能是下一年第一周。比如,2006-01-01是2005年的第52周,而2006-01-02是2006年的第1周。建议isoyear字段和week一起使用以得到一致的结果。 1 2 3 4 5 6 7 8 9 10 gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01'); date_part ----------- 2005 (1 row) gaussdb=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2006-01-01 00:00:40'); date_part ----------- 52 (1 row) gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02'); date_part ----------- 2006 (1 row) gaussdb=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2006-01-02 00:00:40'); date_part ----------- 1 (1 row) year 年份域。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 2001 (1 row)
  • TIMESTAMPDIFF TIMESTAMPDIFF(unit , timestamp_expr1, timestamp_expr2) timestampdiff函数是计算两个日期时间之间(timestamp_expr2-timestamp_expr1)的差值,并以unit形式返回结果。timestamp_expr1,timestamp_expr2必须是一个timestamp、timestamptz、date类型的值表达式。unit表示的是两个日期差的单位。 等效于timestamp_diff(text, timestamp, timestamp)。 该函数仅在 GaussDB 兼容MY类型时(即dbcompatibility = 'B')有效,其他类型不支持该函数。 year 年份。 1 2 3 4 5 gaussdb=# 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 gaussdb=# SELECT age(timestamp '2001-04-10', timestamp '1957-06-13'); age ------------------------- 43 years 9 mons 27 days (1 row) age(timestamp) 描述:当前SQL执行开始时刻的系统时间和参数相减,入参可以带或者不带timezone。 返回值类型:interval 示例: 1 2 3 4 5 gaussdb=# SELECT age(timestamp '1957-06-13'); age ------------------------- 60 years 2 mons 18 days (1 row) clock_timestamp() 描述:返回当前函数被调用时的系统时间的时间戳。volatile函数,每次扫描都会取最新的时间戳,因此在一次查询中每次调用结果不相同。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 gaussdb=# SELECT clock_timestamp(); clock_timestamp ------------------------------- 2017-09-01 16:57:36.636205+08 (1 row) current_date 描述:返回当前本条SQL启动的系统时间的日期。 返回值类型:date 示例: 1 2 3 4 5 gaussdb=# SELECT current_date; date ------------ 2017-09-01 (1 row) 此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下返回值类型为timestamp。 current_time 描述:当前事务的开始时刻的系统时间。 返回值类型:time with time zone 示例: 1 2 3 4 5 gaussdb=# SELECT current_time; timetz -------------------- 16:58:07.086215+08 (1 row) current_timestamp 描述:返回的结果为当前SQL启动的系统时间。在PL/SQL中,简单的赋值语句如:time1 := current_timestamp,被认为是表达式,所以会返回上一条SQL语句启动时间。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 gaussdb=# SELECT current_timestamp; pg_systimestamp ------------------------------ 2017-09-01 16:58:19.22173+08 (1 row) current_timestamp(precision) 描述:返回的结果为当前事务启动的系统时间,并将结果的微秒圆整为指定小数位。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 gaussdb=# SELECT current_timestamp(1); timestamptz ------------------------------ 2017-09-01 16:58:19.2+08 (1 row) 此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下,precision参数支持numeric类型的整值,否则仅支持int输入。 微秒末位的0不显示。如 2017-09-01 10:32:19.212000 输出显示为 2017-09-01 10:32:19.212。 pg_systimestamp() 描述:当前日期和时间(当前语句的开始)。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 gaussdb=# 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 gaussdb=# SELECT date_part('hour', timestamp '2001-02-16 20:38:40'); date_part ----------- 20 (1 row) date_part(text, interval) 描述:获取日期/时间值中子域的值。获取月份值时,如果月份值大于12,则取与12的模。等效于extract(field from timestamp)。 返回值类型:double precision 示例: 1 2 3 4 5 gaussdb=# 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 gaussdb=# 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 gaussdb=# 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 gaussdb=# SELECT trunc(timestamp '2001-02-16 20:38:40', 'hour'); trunc --------------------- 2001-02-16 20:00:00 (1 row) round(arg1, arg2) 描述:四舍五入到arg2指定的精度。 arg1类型:timestamp without time zone arg2类型:text 返回值类型:timestamp without time zone 示例: 1 2 3 4 gaussdb=# SELECT round(timestamp '2001-02-16 20:38:40', 'hour'); round --------------------- 2001-02-16 21:00:00 (1 row) 此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。 daterange(arg1, arg2) 描述:获取时间边界信息。arg1和arg2的类型为date。 返回值类型:daterange 示例: 1 2 3 4 5 gaussdb=# 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 gaussdb=# 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 gaussdb=# 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 gaussdb=# SELECT extract(month from interval '2 years 3 months'); date_part ----------- 3 (1 row) isfinite(date) 描述:判断日期是否为有限值,是则返回t,否则返回f。 返回值类型:Boolean 示例: 1 2 3 4 5 6 7 8 9 10 gaussdb=# SELECT isfinite(date '2001-02-16'); isfinite ---------- t (1 row) gaussdb=# SELECT isfinite(date 'infinity'); isfinite ---------- f (1 row) isfinite(timestamp) 描述:判断时间戳是否为有限值,是则返回t,否则返回f。 返回值类型:Boolean 示例: 1 2 3 4 5 6 7 8 9 10 gaussdb=# SELECT isfinite(timestamp '2001-02-16 21:28:30'); isfinite ---------- t (1 row) gaussdb=# SELECT isfinite(timestamp 'infinity'); isfinite ---------- f (1 row) isfinite(interval) 描述:判断时间间隔是否为有限值,是则返回t,暂不支持返回f,输入'infinity'会报错。 返回值类型:Boolean 示例: 1 2 3 4 5 gaussdb=# SELECT isfinite(interval '4 hours'); isfinite ---------- t (1 row) justify_days(interval) 描述:将时间间隔以月(30天为一月)为单位。 返回值类型:interval 示例: 1 2 3 4 5 gaussdb=# SELECT justify_days(interval '35 days'); justify_days -------------- 1 mon 5 days (1 row) justify_hours(interval) 描述:将时间间隔以天(24小时为一天)为单位。 返回值类型:interval 示例: 1 2 3 4 5 gaussdb=# 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 gaussdb=# SELECT JUSTIFY_INTERVAL(INTERVAL '1 MON -1 HOUR'); justify_interval ------------------ 29 days 23:00:00 (1 row) localtime 描述:当前事务的开始时刻的系统时间。 返回值类型:time 示例: 1 2 3 4 5 gaussdb=# SELECT localtime AS RESULT; result ---------------- 16:05:55.664681 (1 row) localtimestamp 描述:返回当前本条SQL执行开始时刻的系统日期和时间。 返回值类型:timestamp 示例: 1 2 3 4 5 gaussdb=# SELECT localtimestamp; timestamp ---------------------------- 2017-09-01 17:03:30.781902 (1 row) now() 描述:当前事务的开始时刻的系统的日期及时间,同一个事务内返回结果相同。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 gaussdb=# SELECT now(); now ------------------------------- 2017-09-01 17:03:42.549426+08 (1 row) timenow() 描述:返回当前本条SQL执行开始时刻的系统日期和时间。 返回值类型:abstime 示例: 1 2 3 4 5 gaussdb=# SELECT timenow(); timenow ------------------------ 2020-06-23 20:36:56+08 (1 row) dbtimezone 描述:当前数据库的时区。 返回值类型:text 示例: 1 2 3 4 5 gaussdb=# SELECT dbtimezone; dbtimezone ------------------------ PRC (1 row) 此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效。 numtodsinterval(num, interval_unit) 描述:将数字转换为interval类型。num为numeric类型数字,interval_unit为固定格式字符串('DAY' | 'HOUR' | 'MINUTE' | 'SECOND')。 可以通过设置GUC参数IntervalStyle为a,兼容该函数interval输出格式。 返回值类型:interval 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 gaussdb=# SELECT numtodsinterval(100, 'HOUR'); numtodsinterval ----------------- 100:00:00 (1 row) gaussdb=# SET intervalstyle = a; SET gaussdb=# SELECT numtodsinterval(100, 'HOUR'); numtodsinterval ------------------------------- +000000004 04:00:00.000000000 (1 row) 此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下:当参数interval_unit为 'DAY' 时,参数num超过1000000000会报错。 numtoyminterval(num, interval_unit) 描述:将数字转换为interval类型。num为numeric类型数字,interval_unit为固定格式字符串('YEAR' | 'MONTH')。 可以通过设置GUC参数IntervalStyle为a,兼容该函数interval输出格式。 返回值类型:interval 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 gaussdb=# SELECT numtoyminterval(100, 'MONTH'); numtoyminterval ----------------- 8 years 4 mons (1 row) gaussdb=# SET intervalstyle = 'a'; SET gaussdb=# SELECT numtoyminterval(100, 'MONTH'); numtoyminterval ----------------- 8-4 (1 row) 此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效。 new_time(date, timezone1,timezone2) 描述:当timezone1所表示时区的日期时间为date的时候,返回此时timezone2所表示时区的日期时间值。 返回值类型:timestamp 示例: 1 2 3 4 5 6 7 8 9 10 gaussdb=# SELECT new_time('1997-10-10','AST','EST'); new_time --------------------- 1997-10-09 23:00:00 (1 row) gaussdb=# SELECT NEW_TIME(TO_TIMESTAMP ('10-Sep-02 14:10:10.123000','DD-Mon-RR HH24:MI:SS.FF'), 'AST', 'PST'); new_time ------------------------- 2002-09-10 10:10:10.123 (1 row) 此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。 sessiontimezone 描述:当前会话的时区,无入参。 返回值类型:text。 示例: 1 2 3 4 5 6 7 8 9 10 gaussdb=# SELECT SESSIONTIMEZONE; session_time_zone ------------------- PST8PDT (1 row) gaussdb=# SELECT LOWER(SESSIONTIMEZONE); lower ----------- @ 8 hours (1 row) 此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。 当set session time zone的值为GMT+08:00/GMT-08:00格式时,正值的偏移量被用于格林威治以西的位置,例如GMT+08:00表示西八区,GMT-08:00表示东八区。 sys_extract_utc(timestamp| timestamptz) 描述:从具有时区偏移量或时区区 域名 称的日期时间值中提取UTC(协调世界时-以前称为格林威治平均时间)。如果未指定时区,则日期时间与会话时区关联。入参有timestmp和timestamp两种形式。 返回值类型:timestamp。 示例: 1 2 3 4 5 6 7 8 9 10 gaussdb=# SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00'); sys_extract_utc --------------------- 2000-03-28 03:30:00 (1 row) gaussdb=# SELECT SYS_EXTRACT_UTC(TIMESTAMPTZ '2000-03-28 11:30:00.00 -08:00'); sys_extract_utc --------------------- 2000-03-28 19:30:00 (1 row) 此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效。 tz_offset('time_zone_name' | '(+/-)hh:mi' | SESSIONTIMEZONE | DBTIMEZONE) 描述:入参有以上四种形式,返回入参所表示时区的UTC偏移量。 返回值类型:text。 示例: 1 2 3 4 5 6 7 8 9 10 gaussdb=# SELECT TZ_OFFSET('US/Pacific'); tz_offset ----------- -08:00 (1 row) gaussdb=# SELECT TZ_OFFSET(sessiontimezone); tz_offset ----------- +08:00 (1 row) 此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。 pg_sleep(seconds) 描述:服务器线程延迟时间,单位为秒。 返回值类型:void 示例: 1 2 3 4 5 gaussdb=# SELECT pg_sleep(10); pg_sleep ---------- (1 row) statement_timestamp() 描述:当前日期和时间(当前语句的开始)。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 gaussdb=# SELECT statement_timestamp(); statement_timestamp ------------------------------- 2017-09-01 17:04:39.119267+08 (1 row) sysdate 描述:返回当前本条SQL执行时刻的系统日期和时间。 返回值类型:timestamp 示例: 1 2 3 4 5 gaussdb=# SELECT sysdate; sysdate --------------------- 2017-09-01 17:04:49 (1 row) current_sysdate 描述:返回当前本条SQL执行开始时刻的系统日期和时间。 返回值类型:timestamp 示例: 1 2 3 4 5 gaussdb=# SELECT current_sysdate(); current_sysdate --------------------- 2023-06-20 20:09:02 (1 row) timeofday() 描述:返回当前函数被调用时的系统时间的时间时间戳(像clock_timestamp,但是返回时为text)。 返回值类型:text 示例: 1 2 3 4 5 gaussdb=# SELECT timeofday(); timeofday ------------------------------------- Fri Sep 01 17:05:01.167506 2017 CS T (1 row) transaction_timestamp() 描述:当前事务开始的系统的日期及时间。 返回值类型:timestamp with time zone 示例: 1 2 3 4 5 gaussdb=# 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 gaussdb=# 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) 此函数在A兼容模式数据库中且参数a_format_version值为10c和a_format_dev_version值为s1的情况下: 当计算结果大于公元9999年时会报错。 参数n入参若为小数则不会被四舍五入,而是被截断。 last_day(d) 描述:用于计算时间点d当月最后一天的时间。 返回值类型:timestamp 示例: 1 2 3 4 5 gaussdb=# 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。 要尽量避免在查询中使用 'now'::date、'now'::timestamp、'now'::timestamptz字符串常量强转以及text_date('now')的类似表达式来获取数据库当前时间或者将当前时间值作为函数入参场景,在这些场景下,优化器会提前算出常量时间,造成查询结果不正确。 gaussdb=# EXPLAIN SELECT * FROM t1 WHERE b='now'::date; QUERY PLAN ----------------------------------------------------- Seq Scan on t1 (cost=0.00..13.60 rows=1 width=310) Filter: ((b)::text = '2024-11-09 15:07:56'::text) (2 rows) gaussdb=# EXPLAIN SELECT * FROM t1 WHERE b=text_date('now'); QUERY PLAN ----------------------------------------------------- Seq Scan on t1 (cost=0.00..13.60 rows=1 width=310) Filter: ((b)::text = '2024-11-09'::text) (2 rows) 推荐使用now()、currenttimestamp()函数作为获取数据库当前时间的方法。 gaussdb=# EXPLAIN SELECT * FROM t1 WHERE b=now(); QUERY PLAN ----------------------------------------------------- Seq Scan on t1 (cost=0.00..14.80 rows=1 width=310) Filter: ((b)::text = (now())::text) (2 rows) gaussdb=# EXPLAIN SELECT * FROM t1 WHERE b=text_date(now()); QUERY PLAN ---------------------------------------------------------- Seq Scan on t1 (cost=0.00..16.00 rows=1 width=310) Filter: ((b)::text = (text_date((now())::text))::text) (2 rows) 用户在使用时间和日期操作符时,对应的操作数请使用明确的类型前缀修饰,以确保数据库在解析操作数的时候能够与用户预期一致,不会产生用户非预期的结果。 比如下面示例没有明确数据类型就会出现异常错误。 1 SELECT date '2001-10-01' - '7' AS RESULT;
  • MY_TYPES MY_TYPES视图用于描述当前用户所拥有的所有对象类型。所有用户都可以访问该视图。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 MY_TYPES字段 名称 类型 描述 type_name character varying(128) 类型名称。 type_oid raw 类型的标识符(OID)。 typecode character varying(128) 类型的类型代码。 attributes numeric 类型中的属性数。 methods numeric 暂不支持,值为0。 predefined character varying(3) 表示该类型是否是内置类型。 incomplete character varying(3) 表示类型是否为不完整类型。 final character varying(3) 暂不支持,值为NULL。 instantiable character varying(3) 暂不支持,值为NULL。 persistable character varying(3) 暂不支持,值为NULL。 supertype_owner character varying(128) 暂不支持,值为NULL。 supertype_name character varying(128) 暂不支持,值为NULL。 local_attributes numeric 暂不支持,值为NULL。 local_methods numeric 暂不支持,值为NULL。 typeid raw 暂不支持,值为NULL。 父主题: 系统视图
  • PG_TS_DICT PG_TS_DICT系统表包含定义文本搜索字典的记录。字典取决于文本搜索模板,该模板声明所有需要的实现函数;字典本身提供模板支持的用户可设置的参数的值。 这种分工允许字典通过非权限用户创建。参数由文本字符串dictinitoption指定,参数的格式和意义取决于模板。 表1 PG_TS_DICT字段 名称 类型 引用 描述 oid oid - 行标识符(隐含属性,必须明确选择)。 dictname name - 文本搜索字典名。 dictnamespace oid PG_NAMESPACE.oid 包含这个字典的名称空间的OID。 dictowner oid PG_AUTHID.oid 字典的所有者。 dicttemplate oid PG_TS_TEMPLATE.oid 这个字典的文本搜索模板的OID。 dictinitoption text - 该模板的初始化选项字符串。 父主题: 系统表
  • PG_STATIO_ALL_TABLES PG_STATIO_ALL_TABLES视图可用来查询当前数据库中每个表(包括TOAST表)的I/O统计信息。 表1 PG_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表索引命中缓存数(如果存在)。 父主题: 系统视图
  • PARALLEL_DECODE_THREAD_INFO PARALLEL_DECODE_THREAD_INFO视图用于查看当前节点上进行并行解码的线程信息。 表1 PARALLEL_DECODE_THREAD_INFO字段 名称 类型 描述 thread_id bigint 线程id。 slot_name text 复制槽名。 thread_type text 线程种类(共三种,sender代表发送线程,reader代表读取线程,decoder代表解码线程)。 seq_number integer 当前复制槽中同种线程的序号(从1开始)。 父主题: Utility
  • GLOBAL_PLANCACHE_STATUS GLOBAL_PLANCACHE_STATUS视图显示GPC全局计划缓存状态信息。 表1 GLOBAL_PLANCACHE_STATUS字段 名称 类型 描述 nodename text 所属节点名称。 query text 查询语句text。 refcount integer 被引用次数。 valid bool 是否合法。 databaseid oid 所属数据库id。 schema_name text 所属schema。 params_num integer 参数数量。 func_id oid 该plancache所在存储过程oid,如果不属于存储过程则为0。 pkg_id oid 该plancache所在存储过程所属的Package,如果不属于Package则为0。 stmt_id integer 显示存储过程内语句计划的序号。 父主题: Global Plancache
  • 日志诊断场景 ODBC日志分为unixODBC驱动管理器日志和psqlODBC驱动端日志。前者可以用于追溯应用程序API的执行是否成功,后者是底层实现过程中的一些DFX日志,用来帮助定位问题。 unixODBC日志需要在odbcinst.ini文件中配置: 1 2 3 4 5 6 7 [ODBC] Trace=Yes TraceFile=/path/to/odbctrace.log [GaussMPP] Driver64=/usr/local/lib/psqlodbcw.so setup=/usr/local/lib/psqlodbcw.so psqlODBC日志只需要在odbc.ini加上如下内容: [gaussdb] Driver=GaussMPP Servername=10.10.0.13 #数据库Server IP ... Debug=1 #打开驱动端debug日志 unixODBC日志将会生成在TraceFile配置的路径下,psqlODBC会在系统/tmp/下生成mylog_xxx.log。
  • PG_PLTEMPLATE PG_PLTEMPLATE系统表存储过程语言的“模板”信息。 表1 PG_PLTEMPLATE字段 名称 类型 描述 tmplname name 这个模板所应用的语言的名称。 tmpltrusted boolean 如果语言被认为是可信的,则为真。否则为假。 tmpldbacreate boolean 如果语言是由数据库所有者创建的,则为真。否则为假。 tmplhandler text 调用处理器函数的名称。 tmplinline text 匿名块处理器的名称,若没有则为NULL。 tmplvalidator text 校验函数的名称,如果没有则为NULL。 tmpllibrary text 实现语言的共享库的路径。 tmplacl aclitem[] 模板的访问权限(未使用)。 父主题: 系统表
  • 处理步骤 显式游标处理需六个PL/SQL步骤: 定义静态游标:就是定义一个游标名,以及与其相对应的SELECT语句。 定义静态游标的语法图,请参见图1。 图1 static_cursor_define::= 或 图2 static_cursor_define::= 参数说明: cursor_name:定义的游标名。 parameter:游标参数,只能为输入参数,其格式为: parameter_name datatype select_statement:查询语句。 根据执行计划的不同,系统会自动判断该游标是否可以用于以倒序的方式检索数据行。 语法上支持parameter为输出参数,但其行为与输入参数保持一致。 定义动态游标:指ref游标,可以通过一组静态的SQL语句动态的打开游标。首先定义ref游标类型,然后定义该游标类型的游标变量,在打开游标时通过OPEN FOR动态绑定SELECT语句。 定义动态游标的语法图,请参见图3和图4。 图3 cursor_typename::= 图4 dynamic_cursor_define::= 打开静态游标:就是执行游标所对应的SELECT语句,将其查询结果放入工作区,并且指针指向工作区的首部,标识游标结果集合。如果游标查询语句中带有FOR UPDATE选项,OPEN语句还将锁定数据库表中游标结果集合对应的数据行。 打开静态游标的语法图,请参见图5。 图5 open_static_cursor::= 打开动态游标:可以通过OPEN FOR语句打开动态游标,动态绑定SQL语句。 打开动态游标的语法图,请参见图6。 图6 open_dynamic_cursor::= PL/SQL程序不能用OPEN语句重复打开一个游标。 提取游标数据:检索结果集合中的数据行,放入指定的输出变量中。 提取游标数据的语法图,请参见图7。 图7 fetch_cursor::= 对该记录进行处理。 继续处理,直到活动集合中没有记录。 关闭游标:当提取和处理完游标结果集合数据后,应及时关闭游标,以释放该游标所占用的系统资源,并使该游标的工作区变成无效,不能再使用FETCH语句获取其中数据。关闭后的游标可以使用OPEN语句重新打开。 关闭游标的语法图,请参见图8。 图8 close_cursor::=
  • 属性 游标的属性用于控制程序流程或者了解程序的状态。当运行DML语句时,PL/SQL打开一个内建游标并处理结果,游标是维护查询结果的内存中的一个区域,游标在运行DML语句时打开,完成后关闭。显式游标的属性为: %FOUND布尔型属性:当最近一次读记录时成功返回,则值为TRUE。 %NOTFOUND布尔型属性:当最近一次读记录时失败返回,则值为TRUE。 %ISOPEN布尔型属性:当游标已打开时返回TRUE。 %ROWCOUNT数值型属性:返回已从游标中读取的记录数。
  • 算子说明 Stream是GaussDB的SMP(对称多处理)中使用的一种技术,SMP采用多线程并行算法,在算子内并行执行,充分利用现代服务器单机多核的特点,提高执行效率。SMP分为计划生成与执行两部分: SMP计划生成。一阶段计划生成:在路径生成阶段,加入并行路径,最终根据代价,决定所选择的计划。两阶段计划生成:第一步生成原有的串行计划,第二步再将串行计划改造成适应并行的计划 。 SMP执行过程。为并行执行线程之间进行数据分配、交换和汇总。 SMP的执行依赖Stream算子,不同类型的Stream算子配合完成SMP的执行过程。Stream算子的集中式类型主要分为: Local Gather :DN内数据分配,实现DN内部并行线程的数据汇总。 Local Redistribute :DN内数据分配,在DN内部各线程之间,按照分布键进行数据重分布。 Local Broadcast : DN内数据分配,将数据广播到DN内部的每个线程。 Local RoundRobin :DN内数据分配,在DN内部各线程之间实现数据轮询分发。 GaussDB通过broadcast与redistribute对数据进行多线程处理,然后通过gather汇总数据并处理返回。
  • GLOBAL_SESSION_STAT 各节点上以会话线程或AutoVacuum线程为单位,统计会话状态信息。 表1 GLOBAL_SESSION_STAT字段 名称 类型 描述 node_name name 节点名称。 sessid text 线程启动时间+线程标识。 statid integer 统计编号。 statname text 统计会话名称。 statunit text 统计会话单位。 value bigint 统计会话值。 父主题: Session/Thread
  • STATIO_SYS_SEQUEN CES STATIO_SYS_SEQUENCES显示命名空间中所有系统序列的I/O状态信息。 表1 STATIO_SYS_SEQUENCES字段 名称 类型 描述 relid oid 序列OID。 schemaname name 序列中模式名。 relname name 序列名。 blks_read bigint 从序列中读取的磁盘块数。 blks_hit bigint 序列中缓存命中数。 父主题: Cache/IO
  • max_stack_depth 参数说明:设置GaussDB执行堆栈的最大安全深度。需要这个安全界限是因为在服务器里,并非所有程序都检查了堆栈深度,只是在可能递规的过程,比如表达式计算这样的过程里面才进行检查。 该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,100~INT_MAX,单位为KB。 默认值: (ulimit -s的设置)- 640 KB的值大于等于2MB时,此参数的默认值为2MB。 (ulimit -s的设置)- 640 KB的值小于2MB时,此参数的默认值为(ulimit -s的设置)- 640 KB。 设置原则: 数据库需要预留640KB堆栈深度,因此,此参数的最佳设置是等于操作系统内核允许的最大值(就是ulimit -s的设置)- 640KB。 数据库未运行前设置的该参数值大于(ulimit -s的设置)- 640 KB时会导致数据库启动失败;数据库运行阶段设置该参数值大于(ulimit -s的设置)- 640 KB时该值不生效。 若(ulimit -s的设置)-640KB小于此参数取值范围的最小值时会导致数据库启动失败。 如果设置此参数的值大于实际的内核限制,则一个正在运行的递归函数可能会导致一个独立的服务器进程崩溃。 因为并非所有的操作都能够检测,所以建议用户在此设置一个明确的值。 默认值最大为2MB,这个值相对比较小,不容易导致系统崩溃。
  • resilience_memory_reject_percent 参数说明:用于控制内存过载逃生的动态内存占用百分比。该参数仅在GUC参数use_workload_manager和enable_memory_limit打开时生效。该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串,长度大于0 该参数分为recover_memory_percent,、overload_memory_percent 2部分,这2个部分的具体含义如下: recover_memory_percent:内存从过载状态恢复正常状态的动态内存使用占最大动态内存的百分比,当动态内存使用小于最大动态内存乘以该值对应的百分比后,停止过载逃生并放开新连接接入,取值为0~100,设置为多少表示百分之多少。 overload_memory_percent:内存过载时动态内存使用占最大动态内存的百分比,当动态内存使用大于最大动态内存乘以该值对应的百分比后,表示当前内存已经过载,触发过载逃生kill会话并禁止新连接接入,取值为0~100,设置为多少表示百分之多少。 默认值:'0,0',表示关闭内存过载逃生功能。 示例: resilience_memory_reject_percent = '70,90' 表示内存使用超过最大内存上限的90%后禁止新连接接入并kill堆积的会话,kill会话过程中内存恢复到最大内存的70%以下时停止kill会话并允许新连接接入。 最大动态内存和已使用的动态内存可以通过gs_total_memory_detail视图查询获得,最大动态内存:max_dynamic_memory,已使用的动态内存:dynamic_used_memory。 该参数如果设置的百分比过小,则会频繁触发内存过载逃生流程,会使正在执行的会话被强制退出,新连接短时间接入失败,需要根据实际内存使用情况慎重设置。 recover_memory_percent和overload_memory_percent的值可以同时为0,除此之外,recover_memory_percent的值必须要小于overload_memory_percent,否则会设置不生效。
  • maintenance_work_mem 参数说明:设置在维护性操作(比如VACUUM、CREATE INDEX、ALTER TABLE ADD FOREIGN KEY等)中可使用的最大的内存。该参数的设置会影响VACUUM、VACUUM FULL、CLUSTER、CREATE INDEX的执行效率。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,1024~INT_MAX,单位为KB。 默认值: 2GB(196核CPU/1536G内存,128核CPU/1024G内存,104核CPU/1024G内存,96核CPU/1024G内存,96核CPU/768G内存,80核CPU/640G内存,64核CPU/512G内存,60核CPU/480G内存);1GB(32核CPU/256G内存);512MB(16核CPU/128G内存);256MB(8核CPU/64G内存);128MB(4核CPU/32G内存);64MB(4核CPU/16G内存) 设置建议: 建议设置此参数的值大于work_mem,可以改进清理和恢复数据库转储的速度。因为在一个数据库会话里,任意时刻只有一个维护性操作可以执行,并且在执行维护性操作时不会有太多的会话。 当自动清理线程运行时,autovacuum_max_workers倍数的内存将会被分配,所以此时设置maintenance_work_mem的值应该不小于work_mem。 如果进行大数据量的cluster等,可以在session中调大该值。
  • local_syscache_threshold 参数说明:系统表cache在单个session缓存的大小。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 如果enable_global_plancache已打开,为保证GPC生效,local_syscache_threshold设置值小于16MB时不会生效,最小为16MB。 如果enable_global_syscache和enable_thread_pool打开,该参数描述的是当前线程和绑定到当前线程上的session缓存的总大小。 取值范围:整型,1*1024~512*1024,单位为KB。 默认值: 32MB(196核CPU/1536G内存);16MB(128核CPU/1024G内存,104核CPU/1024G内存,96核CPU/1024G内存,96核CPU/768G内存,80核CPU/640G内存,64核CPU/512G内存,60核CPU/480G内存,32核CPU/256G内存,16核CPU/128G内存,8核CPU/64G内存,4核CPU/32G内存,4核CPU/16G内存)
共100000条
提示

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