华为云用户手册

  • PG_AGGREGATE PG_AGGREGATE系统表存储与聚集函数有关的信息。PG_AGGREGATE里的每条记录都是一条pg_proc里面的记录的扩展。PG_PROC记录承载该聚集的名称、输入和输出数据类型,以及其它一些和普通函数类似的信息。 表1 PG_AGGREGATE字段 名称 类型 引用 描述 aggfnoid regproc PG_PROC.proname 此聚集函数的PG_PROC proname。 aggtransfn regproc PG_PROC.proname 转换函数。 aggcollectfn regproc PG_PROC.proname 收集函数。 aggfinalfn regproc PG_PROC.proname 最终处理函数(如果没有则为零)。 aggsortop oid PG_OPERATOR.oid 关联排序操作符(如果没有则为零)。 aggtranstype oid PG_TYPE.oid 此聚集函数的内部转换(状态)数据的数据类型。 可能取值及其含义见于pg_type.h中type定义,主要分为多态(isPolymorphicType)和非多态两类。 agginitval text - 转换状态的初始值。这是一个文本数据域,它包含初始值的外部字符串表现形式。如果数据域是null,则转换状态值从null开始。 agginitcollect text - 收集状态的初始值。这是一个文本数据域,它包含初始值的外部字符串表现形式。如果数据域是null,则收集状态值从null开始。 aggkind "char" - 此聚集函数类型: 'n' :表示Normal Agg 'o' :表示Ordered Set Agg aggnumdirectargs smallint - Ordered Set Agg类型聚集函数的直接参数(非聚集相关参数)数量。对Normal Agg类型聚集函数,该值为0。 父主题: 系统表
  • ADM_SOURCE ADM_SOURCE视图显示数据库中所有存储过程、函数、触发器、包的定义信息。默认只有系统管理员权限才可以访问此系统视图,普通用户需要授权才可以访问。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 ADM_SOURCE字段 名称 类型 描述 owner name 对象的所有者。 name name 对象名字。 type name 对象类型。取值范围:function、package、package body、procedure、trigger。 line numeric 此行在定义信息中的行号。 text text 存储对象的文本来源。 origin_con_id character varying(256) 暂不支持,值为0。 父主题: 系统视图
  • PG_STAT_USER_FUNCTIONS PG_STAT_USER_FUNCTIONS视图显示命名空间中用户自定义函数(函数语言为非内部语言)的状态信息。 表1 PG_STAT_USER_FUNCTIONS字段 名称 类型 描述 funcid oid 函数标识。 schemaname name 模式的名称。 funcname name 函数名称。 calls bigint 函数被调用的次数。 total_time double precision 函数的总执行时长。 self_time double precision 当前线程调用函数的总的时长。 父主题: 系统视图
  • 创建数据库用户 默认只有数据库安装时创建的管理员用户可以访问初始数据库,您还可以创建其他数据库用户账号。 1 gaussdb=# CREATE USER joe WITH PASSWORD "********"; 当结果显示为如下信息,则表示创建成功。 1 CREATE ROLE 如上创建了一个用户名为joe,密码为********的用户。 如下命令为设置joe用户为系统管理员。 gaussdb=# GRANT ALL PRIVILEGES TO joe; 使用GRANT命令进行相关权限设置,具体操作请参见GRANT。 关于数据库用户的更多信息请参见用户及权限。 父主题: 操作数据库
  • GS_SHARED_MEMORY_DETAIL 查询当前节点所有已产生的共享内存上下文的使用信息。 表1 GS_SHARED_MEMORY_DETAIL字段 名称 类型 描述 contextname text 内存上下文的名称。 level smallint 内存上下文的级别。 parent text 上级内存上下文。 totalsize bigint 共享内存总大小(单位:字节)。 freesize bigint 共享内存剩余大小(单位:字节)。 usedsize bigint 共享内存使用大小(单位:字节)。 父主题: Memory
  • SELECT 【规则】SELECT语句中禁用通配符字段“*”。 使用通配符字段查询表时,如果因业务或数据库升级导致表结构发生变化,可能出现与业务语句不兼容的情况。因此业务应指明所需查询的表字段名称,避免使用通配符。 【规则】避免对大字段(如VARCHAR(2000))执行ORDER BY、DISTINCT、GROUP BY、UNION等会引起排序的操作。 此类操作将消耗大量的CPU和内存资源,执行效率低下。 【规则】禁止使用LOCK TABLE语句加锁,仅允许使用 SELECT .. FOR UPDATE语句。 LOCK TABLE提供多种锁级别,但如果对数据库原理和业务理解不足,误用表锁可能触发死锁,导致数据库不可用。 【建议】考虑使用UNION ALL,少使用UNION,注意考虑去重。 UNION ALL不去重,少了排序操作,速度相对UNION更快。如果没有去重的需求,优先使用UNION ALL。 【建议】避免频繁使用count()获取大表行数,该操作资源消耗较大,影响并行作业执行效率。 如果不需要实时的行数统计信息,可以尝试使用如下语句来获取表行数。 SELECT reltules FROM pg_class WHERE relname = 'tablename'; pg_class中所记录的表行数信息只会在对该表执行ANALYZE以后才会更新。 目前ANALYZE有两种触发条件: 业务主动发送ANALYZE语句,例如: --分析连接库中所有表 ANALYZE;--分析指定表ANALYZE tablename; 借助AUTO VACUUM机制,在每间隔一定时间或表的增删达到一定行数时触发。间隔时间和增删比例可通过GUC参数设置。 父主题: 数据库编程规范
  • 参数说明 INDEX 重新建立指定的索引。 TABLE 重新建立指定表的所有索引,如果表有从属的“TOAST”表,则这个表也会重建索引。如果表上有索引已经被alter unusable失效,则这个索引无法被重新创建。当指定CONCURRENTLY选项时,暂不支持重建从属“TOAST”表上的索引。 DATABASE 重建当前数据库里的所有索引。当指定CONCURRENTLY选项时,暂不支持重建数据库中表的从属“TOAST”表上的索引。 SYSTEM 在当前数据库上重建所有系统表上的索引。不会处理在用户表上的索引。 CONCURRENTLY 以不阻塞DML的方式重建索引(加ShareUpdateExclusiveLock锁)。重建索引时,一般会阻塞其他语句对该索引所依赖表的访问。指定此关键字,可以实现重建过程中不阻塞DML。不支持在线重建系统表上的索引。不支持REINDEX INTERNAL TABLE CONCURRENTLY和REINDEX SYSTEM CONCURRENTLY。当执行REINDEX DATABASE CONCURRENTLY时,在线重建当前数据库中用户表上的所有索引(不会处理系统表上的索引)。REINDEX CONCURRENTLY不可以在事务内执行。在线重建索引只支持B-tree索引和UB-tree索引,只支持普通索引、GLOBAL索引、LOCAL索引。在线并行重建索引只支持Astore的普通索引、GLOBAL索引、LOCAL索引,Ustore索引不支持在线并行重建。如果在线重建索引失败,可能会留下非法的新索引,在系统无法自动清理失败新索引的情况下(比如数据库宕机),需要尽快手动清除(使用DROP INDEX语句)非法新索引,以防占用更多资源。一般来说,非法的新索引的后缀名为_ccnew。REINDEX INDEX CONCURRENTLY对表加4级会话锁,且其前几个阶段与CREATE INDEX CONCURRENTLY相似,因此也可能产生卡住或死锁的问题,具体场景与CREATE INDEX CONCURRENTLY相似(比如两个会话同时对同一个索引或表进行REINDEX CONCURRENTLY操作,会引发死锁问题),详见CONCURRENTLY章节。 name 需要重建索引的索引、表、数据库的名称。表和索引可以有模式修饰。 REINDEX DATABASE和SYSTEM只能重建当前数据库的索引,所以name必须和当前数据库名称相同。 FORCE 废弃选项,仅为保持前向兼容,故继续保留。 partition_name 需要重建索引的分区的名称或者索引分区的名称。 取值范围: 如果前面是REINDEX INDEX,则这里应该指定索引分区的名称; 如果前面是REINDEX TABLE,则这里应该指定分区的名称; REINDEX DATABASE和SYSTEM这种形式的重建索引不能在事务块中执行。
  • 原型 PGresult* PQexecPreparedBatch(PGconn* conn, const char* stmtName, int nParams, int nBatchCount, const char* const* paramValues, const int* paramLengths, const int* paramFormats, int resultFormat);
  • 参数 表1 PQexecPreparedBatch参数 关键字 参数说明 conn 连接句柄。 stmtName stmt名称,可以用""或者NULL来引用未命名语句,否则它必须是一个现有预备语句的名字。 nParams 参数个数。 nBatchCount 批量数。 paramValues 参数的实际值。 paramLengths 参数的实际数据长度。 paramFormats 参数的格式(文本或二进制)。 resultFormat 结果的格式(文本或二进制)。
  • global_rto_status global_rto_status视图显示关于主机和备机的日志流控信息(本节点除外、备DN上不可使用)。 表1 global_rto_status字段 参数 类型 描述 node_name text 节点的名称,包含主机和备机。 rto_info text 流控的信息,包含了备机当前的日志流控时间(单位:秒),备机通过GUC参数设置的预期流控时间(单位:秒),为了达到这个预期主机所需要的睡眠时间(单位:微秒)。 父主题: RTO & RPO
  • 背景信息 当用户对数据库中的一张或者多张表的某些字段的组合感兴趣,而又不想每次键入这些查询时,用户就可以定义一个视图,以便解决此问题。 视图与基本表不同,不是物理上实际存在的,是一个虚拟表。数据库中仅存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,从视图中查询出的数据也随之改变。视图就像一个窗口,透过它可以看到数据库中用户感兴趣的数据及变化。视图每次被引用的时候都会运行一次。
  • upgrade_mode 参数说明:升级模式。 该参数属于INTERNAL类型参数,为固定参数,用户无法修改此参数,只能查看。 取值范围:整数,0~INT_MAX 0表示不在升级过程中。 1表示在就地升级过程中。 2表示在灰度升级过程中。 默认值:0 特殊情况:在使用灰度升级的情况下,若选择策略为大版本升级,即需要执行升级脚本和替换二进制包,会将upgrade_mode设置为2,选择策略为小版本升级,只替换二进制包,则不会设置upgrade_mode设置为2。
  • 示例 EXEC SQL SET DESCRIPTOR indesc COUNT = 1; EXEC SQL SET DESCRIPTOR indesc VALUE 1 DATA = 2; EXEC SQL SET DESCRIPTOR indesc VALUE 1 DATA = :val1; EXEC SQL SET DESCRIPTOR indesc VALUE 2 INDICATOR = :val1, DATA = 'some string'; EXEC SQL SET DESCRIPTOR indesc VALUE 2 INDICATOR = :val2null, DATA = :val2;
  • query_log_directory(废弃) 参数说明:enable_slow_query_log设置为on时,query_log_directory决定存放服务器慢查询日志文件的目录,仅sysadmin用户可以访问。它可以是绝对路径,或者是相对路径(相对于数据目录的路径),在该版本中已废弃。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 当配置文件中query_log_directory的值为非法路径时,会导致数据库实例无法重新启动。 合法路径:用户对此路径有读写权限 非法路径:用户对此路径无读写权限 取值范围:字符串 默认值:安装时指定。
  • track_stmt_standby_chain_size 参数说明:组合参数,控制备机快/慢SQL记录的最大占用内存与磁盘空间。仅SysAdmin用户可以访问。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符型 该参数分为四部分,形式为'Full SQL memory size, Full SQL disk size, Slow SQL memory size, Slow SQL disk size' 。 Full SQL与Slow SQL分开存放于不同位置,因此额外使用了四个值进行控制。 Full SQL memory size 为保留的快SQL的最大内存占用空间,取值范围为 [16, 1024],单位为MB。 Full SQL disk size 为保留的快SQL的最大磁盘占用空间,取值范围为 [512, 1048576],单位为MB。 Slow SQL memory size 为保留的慢SQL的最大内存占用空间,取值范围为 [16, 1024],单位为MB。 Slow SQL disk size 为保留的慢SQL的最大磁盘占用空间,取值范围为 [512, 1048576],单位为MB。 其中内存值不可大于磁盘值。 默认值:32, 1024, 16, 512
  • enable_instr_cpu_timer 参数说明:是否捕获sql执行的cpu时间消耗。 在x86架构集中式部署下,硬件配置规格为32核CPU/256GB内存,使用Benchmark SQL 5.0工具测试性能,开关此参数性能影响约3.5%。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on:表示捕获sql执行的cpu时间消耗。 off:表示不捕获sql执行的cpu时间消耗。 默认值:on
  • query_log_file(废弃) 参数说明:GUC参数enable_slow_query_log设置为ON,表示需要将慢查询记录写进日志文件中,query_log_file决定服务器慢查询日志文件的名称,仅sysadmin用户可以访问。通常日志文件名是按照strftime模式生成,因此可以用系统时间定义日志文件名,用%转义字符实现,在该版本中已废弃。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 建议使用%转义字符定义日志文件名称,否则难以对日志文件进行有效的管理。 取值范围:字符串 默认值:slow_query_log-%Y-%m-%d_%H%M%S.log
  • track_stmt_retention_time 参数说明:组合参数,控制全量/慢SQL记录的保留时间。以60秒为周期读取该参数,并执行清理超过保留时间的记录,仅sysadmin用户可以访问。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符型,该参数分为两部分,形式为'full sql retention time, slow sql retention time' full sql retention time为全量SQL保留时间,取值范围为0 ~ 86400,单位为秒。 slow sql retention time为慢SQL的保留时间,取值范围为0 ~ 604800,单位为秒。 默认值:3600,604800
  • track_stmt_parameter 参数说明:开启track_stmt_parameter后,在statement_history中记录的执行语句不再进行归一化操作,可以显示完整SQL语句信息,辅助DBA进行问题定位。其中对于简单查询,显示完整语句信息;对于PBE语句,显示完整语句信息的同时,追加每个变量数值信息,格式为“query string;parameters:$1=value1,$2=value2,...”。该参数提供目的是为用户呈现完整SQL信息,不受track_activity_query_size参数控制。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on:表示开启显示完整SQL语句信息的功能 off:表示关闭显示完整SQL语句信息的功能 默认值:off
  • asp_log_directory 参数说明:asp_flush_mode设置为all或者file时,asp_log_directory决定存放服务器asp日志文件的目录。它可以是绝对路径,或者是相对路径(相对于数据目录的路径),仅sysadmin用户可以访问。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 当配置文件中asp_log_directory的值为非法路径时,会导致数据库实例无法重新启动。 合法路径:用户对此路径有读写权限。 非法路径:用户对此路径无读写权限。 取值范围:字符串 默认值:安装时指定。
  • enable_auto_clean_unique_sql 参数说明:当系统中产生的unique sql条目数量大于等于instr_unique_sql_count时,是否启用unique sql自动淘汰功能。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 默认值:off 由于快照有部分信息是来源于unique sql,所以开启自动淘汰的情况下,在生成wdr报告时,如果选择的起始快照和终止快照跨过了淘汰发生的时间,会导致无法生成wdr报告。
  • instr_unique_sql_count 参数说明:控制系统中unique sql信息实时收集功能。配置为0表示不启用unique sql信息收集功能。 该值由大变小将会清空系统中原有的数据重新统计(备机不支持此能力);从小变大不受影响。 当系统中产生的unique sql信息(由dbe_perf.statement/dbe_perf.summary_statement统计)大于instr_unique_sql_count时,系统产生的unique sql信息不被统计。 在x86架构集中式部署下,硬件配置规格为32核CPU/256GB内存,使用Benchmark SQL 5.0工具测试性能,开关此参数性能影响约3%。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,0~2147483647 默认值:200000
  • enable_stmt_track 参数说明:控制是否启用Full /Slow SQL特性。 在x86架构集中式部署下,硬件配置规格为32核CPU/256GB内存,使用Benchmark SQL 5.0工具测试性能,开关此参数性能影响约1.2%。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on:表示开启Full /Slow SQL捕获 off:表示关闭Full /Slow SQL捕获 默认值:on
  • GS_SESSION_MEMORY GS_SESSION_MEMORY视图显示Session级别的内存使用情况,包含执行作业在数据节点上gaussdb线程和Stream线程分配的所有内存。当GUC参数enable_memory_limit的值为off时,本视图不可用。 表1 GS_SESSION_MEMORY字段 名称 类型 描述 sessid text 线程启动时间+线程标识。 init_mem integer 当前正在执行作业进入执行器前已分配的内存,单位MB。 used_mem integer 当前正在执行作业已分配的内存,单位MB。 peak_mem integer 当前正在执行作业已分配的内存峰值,单位MB。 父主题: 系统视图
  • 构造范围 每一种范围类型都有一个与其同名的构造器函数。使用构造器函数常常比写一个范围文字常数更方便,因为它避免了对界限值的额外引用。构造器函数接受两个或三个参数。两个参数的形式以标准的形式构造一个范围(下界是包含的,上界是排除的),而三个参数的形式按照第三个参数指定的界限形式构造一个范围。第三个参数必须是下列字符串之一: “()”、 “(]”、 “[)”或者 “[]”。 例如: --完整形式是:下界、上界以及指示界限包含性/排除性的文本参数。 gaussdb=# SELECT numrange(1.0, 14.0, '(]'); numrange ------------ (1.0,14.0] (1 row) --如果第三个参数被忽略,则假定为 '[)'。 gaussdb=# SELECT numrange(1.0, 14.0); numrange ------------ [1.0,14.0) (1 row) --尽管这里指定了 '(]',显示时该值将被转换成标准形式,因为int8range是一种离散范围类型。 gaussdb=# SELECT int8range(1, 14, '(]'); int8range ----------- [2,15) (1 row) --为一个界限使用NULL导致范围在那一边是无界的。 gaussdb=# SELECT numrange(NULL, 2.2); numrange ---------- (,2.2) (1 row)
  • 离散范围类型 一种范围的元素类型具有一个良定义的“步长”,例如integer或date。在这些类型中,如果两个元素之间没有合法值,它们可以被说成是相邻。这与连续范围相反,连续范围中总是(或者几乎总是)可以在两个给定值之间标识其他元素值。例如,numeric类型之上的一个范围就是连续的,timestamp上的范围也是(尽管timestamp具有有限的精度,并且在理论上可以被当做离散的,但是可以认为它是连续的,因为通常并不关心它的步长)。 另一种考虑离散范围类型的方法是对每一个元素值都有一个清晰的“下一个”或“上一个”值。了解了这种思想之后,通过选择原来给定的下一个或上一个元素值来取代它,就可以在一个范围界限的包含和排除表达之间转换。例如,在一个整数范围类型中,[4,8]和(3,9)表示相同的值集合,但是对于 numeric 上的范围就不是这样。 一个离散范围类型应该具有一个正规化函数,它知道元素类型期望的步长。正规化函数负责把范围类型的相等值转换成具有相同的表达,特别是与包含或者排除界限一致。如果没有指定一个正规化函数,那么具有不同格式的范围将总是会被当作不等,即使它们实际上是表达相同的一组值。 内建的范围类型int4range、int8range和daterange都使用一种正规的形式,该形式包括下界并且排除上界,也就是[)。不过,用户定义的范围类型可以使用其他形式。
  • 定义新的范围类型 用户可以定义自己的范围类型。这样做最常见的原因是为了使用内建范围类型中提供的subtype上没有的范围。例如,要创建一个subtype float8的范围类型: CREATE TYPE floatrange AS RANGE ( subtype = float8, subtype_diff = float8mi ); SELECT '[1.234, 5.678]'::floatrange; floatrange --------------- [1.234,5.678] (1 row) DROP TYPE floatrange; 因为float8没有有意义的“步长”,在这个例子中没有定义一个正规化函数。 定义自己的范围类型也允许用户指定使用一个不同的子类型B-树操作符类或者集合, 以便更改排序顺序来决定哪些值会落入到给定的范围中。 如果subtype被认为是具有离散值而不是连续值,CREATE TYPE命令应当指定一个canonical函数。正规化函数接收一个输入的范围值,并且必须返回一个可能具有不同界限和格式的等价的范围值。对于两个表示相同值集合的范围(例如[1, 7]和[1, 8)),正规的输出必须一样。选择哪一种表达作为正规的没有关系,只要两个具有不同格式的等价值总是能被映射到具有相同格式的相同值就行。除了调整包含/排除界限格式外,假使期望的补偿比subtype能够存储的要大,一个正规化函数可能会舍入边界值。例如,一个timestamp之上的范围类型可能被定义为具有一个一小时的步长,这样正规化函数可能需要对不是一小时的倍数的界限进行舍入,或者可能直接抛出一个错误。 subtype差异函数采用两个subtype输入值,并且返回表示为一个float8值的差(即X减Y)。在上面的例子中,可以使用常规float8减法操作符之下的函数。但是对于任何其他subtype,可能需要某种类型转换。还可能需要一些关于如何把差异表达为数字的创新型想法。为了最大的可扩展性,subtype_diff函数应该同意选中的操作符类和排序规则所蕴含的排序顺序,也就是说,只要它的第一个参数根据排序顺序大于第二个参数,它的结果就应该是正值。 subtype_diff函数相关示例: CREATE FUNCTION time_subtype_diff(x time, y time) RETURNS float8 AS 'SELECT EXTRACT(EPOCH FROM (x - y))' LANGUAGE sql STRICT IMMUTABLE; CREATE TYPE timerange AS RANGE ( subtype = time, subtype_diff = time_subtype_diff ); SELECT '[11:10, 23:00]'::timerange; timerange --------------------- [11:10:00,23:00:00] (1 row) DROP TYPE timerange; DROP FUNCTION time_subtype_diff; 更多关于创建范围类型的信息请参考CREATE TYPE。
  • 无限(无界)范围 一个范围的下界可以被忽略,意味着所有小于上界的值都被包括在范围中。 同样,如果范围的上界被忽略,那么所有比下界大的值都被包括在范围中。如果上下界都被忽略,该元素类型的所有值都被认为在该范围中。 规定缺失的包括界限自动转换为排除。 用户可以认为这些缺失值为 +/- 无穷大,但它们是特殊范围类型值,并且被视为超出任何范围元素类型的 +/- 无穷大值。 具有“infinity”概念的元素类型可以用它们作为显式边界值。例如,在时间戳范围,[today,infinity)不包括特殊的timestamp值infinity,尽管 [today,infinity] 包括它,就好比 [today,) 和 [today,]。 函数lower_inf和upper_inf分别测试一个范围的无限上下界。
  • 包含和排除边界 每一个非空范围都有两个界限,下界和上界。上下界之间的所有点都被包括在范围内。一个包含界限意味着边界点本身也被包括在范围内,而一个排除边界意味着边界点不被包括在范围内。 在一个范围的文本形式中,一个包含下界被表达为“[”而一个排除下界被表达为“(”。同样,一个包含上界被表达为“]”而一个排除上界被表达为“)”(详见范围输入/输出)。 函数lower_inc和upper_inc分别测试一个范围值的上下界。
  • 范围输入/输出 一个范围值的输入必须遵循下列模式之一: (lower-bound,upper-bound) (lower-bound,upper-bound] [lower-bound,upper-bound) [lower-bound,upper-bound] empty 一个范围值的输出必须遵循下列模式之一: [lower-bound,upper-bound) empty 圆括号或方括号指示上下界是否为排除的或者包含的。注意最后一个模式是empty,它表示一个空范围(一个不包含点的范围)。 lower-bound可以是作为subtype的合法输入的一个字符串,或者是空表示没有下界。同样,upper-bound可以是作为 subtype 的合法输入的一个字符串,或者是空表示没有上界。 每个界限值可以使用"(双引号)字符引用。如果界限值包含圆括号、方括号、逗号、双引号或反斜线时,这样做是必须的,否则那些字符会被认作范围语法的一部分。要把一个双引号或反斜线放在一个被引用的界限值中,就在它前面放一个反斜线(还有,在一个双引号引用的界限值中的一对双引号表示一个双引号字符,这与 SQL 字符串中的单引号规则类似)。此外,用户可以避免引用或者使用反斜线转义来保护所有数据字符,否则它们会被当做范围语法的一部分。还有,要写一个是空字符串的界限值,则可以写成"",因为什么都不写表示一个无限界限。 范围值前后允许有空格,但是圆括号或方括号之间的任何空格会被当做上下界值的一部分(取决于元素类型,它可能是也可能不是有意义的)。 例子: --包括3,不包括7之间的所有点。 gaussdb=# SELECT '[3,7)'::int4range; int4range ----------- [3,7) (1 row) --既不包括3也不包括7之间的所有点。 gaussdb=# SELECT '(3,7)'::int4range; int4range ----------- [4,7) (1 row) --只包括单独一个点4。 gaussdb=# SELECT '[4,4]'::int4range; int4range ----------- [4,5) (1 row) --不包括点(并且将被标准化为 '空')。 gaussdb=# SELECT '[4,4)'::int4range; int4range ----------- empty (1 row)
共100000条
提示

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