华为云用户手册

  • dirty_page_percent_max 参数说明:增量检查点打开后,设置脏页数量占shared_buffers的最大期望百分比。达到这个设定值时,后台刷页线程将以设置的max_io_capacity刷脏。 参数类型:浮点型 参数单位:无 取值范围:0.1 ~ 1 默认值:0.9 设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • pagewriter_sleep 参数说明:增量检查点模式下,设置pagewriter刷页线程的刷脏周期。 参数类型:整型 参数单位:ms(毫秒) 取值范围:0 ~ 3600000 默认值:2000(即2s) 设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 设置建议:不宜设置大于2s。脏页产生很快的情况下,建议设置100ms - 500ms,因为设置过大会导致redo点推进过慢,影响xlog回收。 设置不当的风险与影响:设置过大时,会导致刷页速度降低,redo点推进过慢,从而影响xlog回收;同时,由于停止实例时需要等待该参数设置的时间,设置过大时可能导致进程退出超时。
  • max_io_capacity 参数说明:设置后端pagewriter刷页线程批量刷脏每秒的I/O上限。 参数类型:整型 参数单位:kB 取值范围:30720 ~ 10485760 默认值:512000(即500MB) 设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。取值不带单位,则默认为kB;取值如果要带单位,必须为kB、MB、GB。例如:max_io_capacity=512000,max_io_capacity=512000kB,max_io_capacity=500MB都表示设置max_io_capacity为500MB。 设置建议:根据具体业务场景和磁盘I/O能力进行设置。比如磁盘I/O带宽为500MB,建议设置带宽为500MB以内。要求更小的RTO时间或者在大容量场景,可以调大max_io_capacity,例如设置为2GB。 设置不当的风险与影响:设置过小时,刷脏速度慢于业务产生脏页的速度,会导致缓冲区脏页满,从而导致性能劣化。设置过大时,会导致写放大,影响存储设备寿命。
  • enable_consider_usecount 参数说明:设置缓冲区的页面淘汰算法是否考虑页面冷热程度。 参数类型:布尔型 参数单位:无 取值范围: on:表示考虑页面冷热程度。 off:表示不考虑页面冷热程度。 默认值:off 设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 设置建议:建议大容量场景等频繁执行单页面淘汰的场景开启此参数。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • postmaster_parallel_init_thread_num 参数说明:设置数据库启动时可使用的并行线程数量。 参数类型:整型 参数单位:无 取值范围:1 ~ 256 默认值:16 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:该数值表示并行初始化的线程数量,因此建议设置值不超过(环境CPU核数量-1)。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • dw_file_num 参数说明:设置批量双写文件的数量。 参数类型:整型 参数单位:无 取值范围:1 ~ 16 默认值:1 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:该参数值与pagewriter_thread_num有关,不会大于pagewriter_thread_num。如果dw_file_num设置过大,内部会纠正为pagewriter_thread_num大小。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • candidate_buf_percent_target 参数说明:当增量检查点打开时,设置干净页面候选链表占整体缓冲区页面数量百分比的期望值。若当干净页面链表中的页面比例小于该值,bgwriter线程会启动,扫描缓冲区页面将干净的页面放入链表,把脏页刷盘后再放入链表。 参数类型:浮点型 参数单位:无 取值范围:0.1 ~ 0.85 默认值:0.3 设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 设置建议:该参数直接影响bgwriter线程刷页个数。当数据量大于shared_buffers时,candidate_buf_percent_target设置过小,会影响性能。若数据量是shared_buffers的2倍及以上,该值不宜小于默认值;其他场景下,若要降低I/O,可适当调小该参数。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • bgwriter_lru_maxpages 参数说明:设置后端写线程每次脏页刷盘的脏页数量上限。 参数类型:整型 参数单位:无 取值范围:0 ~ 1000。0表示禁用后端写功能,禁用后端写功能不会对checkpoints产生影响。 默认值:100 设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • bgwriter_delay 参数说明:定期循环逐块扫描缓冲区刷脏的时间间隔。全量checkpoint模式下,根据bgwriter_lru_maxpages参数控制每次写的量,然后休眠bgwriter_delay毫秒后才再次启动;增量checkpoint模式下,根据设定candidate_buf_percent_target计算目标空闲缓冲页面个数,当候选缓冲页面不足时,每隔bgwriter_delay毫秒扫描一次10GB的缓冲区页面,当遇到脏页时把脏页刷盘后再放进候选链表,当遇到干净的页面直接放进候选链表。在许多系统上,休眠延时的有效分辨率是10毫秒。因此,设置一个不是10倍数的数值与把它设置为一个10的倍数是一样的效果。 参数类型:整型 参数单位:ms(毫秒) 取值范围:10 ~ 10000 默认值:2000(即2s) 设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 设置建议: 增量checkpoint模式:数据量是shared_buffers多倍时,bgwriter_delay设置值不宜大于2s;数据量比shared_buffers小时,如果为了节省I/O,bgwriter_delay可以适当调大。 全量checkpoint模式:保持默认值即可,但是磁盘能力差的,可以适当调大。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • GS_SPM_BASELINE GS_PLAN_BASELINE系统表是用于存储baseline相关信息的系统表,具备sysadmin权限的用户可以对该系统表进行读操作,但只有初始用户才可以对该系统表进行写操作。 表1 GS_SPM_BASELINE字段 名称 类型 描述 sql_namespace oid schema oid。 sql_hash bigint SPM中SQL的唯一标识。 plan_hash bigint 当前SQL下的plan的唯一标识。 outline text outline文本,可固定当前计划的一组Hint。 cost double precision 计划的总代价。 user oid 创建baseline的用户。 status integer baseline的状态,可选取值有: 0(UNACC):表示未接受的计划。 1(ACC):表示已经接受的计划。 2(FIXED):一种特殊的ACC状态的计划,计划的匹配优先级高于ACC状态的计划。 source text baseline的来源。 gplan boolean 是否是gplan。 creation_time timestamp with time zone baseline的创建时间。 last_used_time timestamp with time zone 计划最近使用时间。 modification_time timestamp with time zone baseline的修改时间。 jump_intercept_cnt bigint 当前baseline拦截计划跳变次数。 invalid boolean 当前baseline是否无效。 父主题: SPM计划管理
  • 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
  • 语法格式 CREATE ROLE role_name [ [ WITH ] option [ ... ] ] [ ENCRYPTED | UNENCRYPTED ] { PASSWORD | IDENTIFIED BY } { 'password' [EXPIRED] | DISABLE }; 其中角色信息设置子句option语法为: {SYSADMIN | NOSYSADMIN} | {MONADMIN | NOMONADMIN} | {OPRADMIN | NOOPRADMIN} | {POLADMIN | NOPOLADMIN} | {AUDITADMIN | NOAUDITADMIN} | {CREATEDB | NOCREATEDB} | {USEFT | NOUSEFT} | {CREATEROLE | NOCREATEROLE} | {INHERIT | NOINHERIT} | {LOGIN | NOLOGIN} | {REPLICATION | NOREPLICATION} | {PERSISTENCE | NOPERSISTENCE} | CONNECTION LIMIT connlimit | VALID BEGIN 'timestamp' | VALID UNTIL 'timestamp' | RESOURCE POOL 'respool' | USER GROUP 'groupuser' | PERM SPACE 'spacelimit' | TEMP SPACE 'tmpspacelimit' | SPILL SPACE 'spillspacelimit' | NODE GROUP logic_cluster_name | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid | DEFAULT TABLESPACE tablespace_name | PROFILE DEFAULT | PROFILE profile_name | PGUSER
  • ADM_SCHEDULER_PROG RAM S ADM_SCHEDULER_PROGRAMS视图显示数据库中所有可以调度的程序信息。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_SCHEDULER_PROGRAMS字段 名称 类型 描述 owner name 调度程序的所有者。 program_name text 调度程序的名称。 program_type character varying(16) 调度程序的类型,可用类型为: PLSQL_BLOCK:匿名存储过程块。 STORED_PROCEDURE:保存的存储过程。 EXTERNAL_SCRIPT:外部脚本。 program_action text 调度程序执行的操作。 number_of_arguments numeric 调度程序参数个数。 enabled character varying(5) 调度程序是否启用。 comments text 调度程序的备注。 detached character varying(5) 暂不支持,值为NULL。 schedule_limit interval day to second(0) 暂不支持,值为NULL。 priority numeric 暂不支持,值为NULL。 weight numeric 暂不支持,值为NULL。 max_runs numeric 暂不支持,值为NULL。 max_failures numeric 暂不支持,值为NULL。 max_run_duration interval day to second(0) 暂不支持,值为NULL。 has_constraints character varying(5) 暂不支持,值为NULL。 nls_env character varying(4000) 暂不支持,值为NULL。 父主题: 其他系统视图
  • GLOBAL_OS_THREADS 提供数据库中所有正常节点下的线程状态信息,如表1所示。多租场景下,non-PDB访问该视图时返回全部信息,PDB访问该视图时仅返回该PDB相关信息。 表1 GLOBAL_OS_THREADS字段 名称 类型 描述 node_name text 节点名称。 pid bigint 当前节点进程中正在运行的线程号。 lwpid integer 与pid对应的轻量级线程号。 thread_name text 与pid对应的线程名称。 creation_time timestamp with time zone 与pid对应的线程创建的时间。 dbid oid 线程所属的数据库id。 父主题: OS
  • 数据库级字符集和字符序 创建一个新的数据库时,可以指定数据库的字符集字符序,创建数据库操作请参见CREATE DATABASE。 CREATE DATABASE [IF NOT EXISTS] database_name [ ENCODING [=] encoding ] | [ LC_COLLATE [=] lc_collate ] | [ LC_CTYPE [=] lc_ctype ] |; 语法说明: database_name 数据库名称。 取值范围:字符串,要符合标识符的命名规范。 ENCODING [ = ] encoding 指定数据库使用的字符编码,可以是字符串(如'SQL_ASCII')、整数编号。 LC_COLLATE [ = ] ‘lc_collate’ 指定新数据库使用的字符集。例如,通过lc_collate = 'zh_CN.gbk'设定该参数。 该参数的使用会影响到对字符串的排序(如使用ORDER BY执行,以及在文本列上使用索引的顺序)。默认是使用模板数据库的排序。 取值范围:操作系统支持的字符集。 LC_CTYPE [ = ] ‘lc_ctype’ 指定新数据库使用的字符分类。例如,通过lc_ctype = 'zh_CN.gbk'设定该参数。该参数的使用会影响到字符的分类,如大写、小写和数字。默认是使用模板数据库的字符分类。 取值范围:操作系统支持的字符分类。 数据库级字符集、字符序语法所有模式均可使用,详细语法请参见CREATE DATABASE。 LC_COLLATE/LC_CTYPE语法不支持指定B模式特有的字符序,参数的取值范围取决于本地环境支持的字符集,可通过locale -a查看。 父主题: 字符集与字符序
  • 常见问题处理 [UnixODBC][Driver Manager]Can't open lib 'xxx/xxx/gsqlodbcw.so':file not found. 此问题的可能原因: odbcinst.ini文件中配置的路径不正确 确认的方法:执行ls命令查询错误信息中的路径,以确保该gsqlodbcw.so文件存在,同时具有执行权限。 gsqlodbcw.so的依赖库不存在,或者不在系统环境变量中 确认的方法:执行ldd命令查询错误信息中的路径,如果是缺少libodbc.so.1等UnixODBC的库,那么按照“操作步骤”中的方法重新配置UnixODBC,并确保它的安装路径下的lib目录添加到了LD_LIBRARY_PATH中。如果是缺少其他库,请将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”选项,不再校验主机名,或者重新生成一套与数据库所在主机名相同的CA证书。 Driver's SQLAllocHandle on SQL_HANDLE_DBC failed 此问题的可能原因: 可执行文件(比如UnixODBC的isql,以下都以isql为例)与数据库驱动(gsqlodbcw.so)依赖于不同的ODBC的库版本:libodbc.so.1或者libodbc.so.2。此问题可以通过如下方式确认: ldd `which isql` | grep odbc ldd gsqlodbcw.so | grep odbc 这时,如果输出的libodbc.so最后的后缀数字不同或者指向不同的磁盘物理文件,那么基本就可以断定是此问题。isql与gsqlodbcw.so都会要求加载libodbc.so,这时如果它们加载的是不同的物理文件,便会导致两套完全同名的函数列表,同时出现在同一个可见域里(UnixODBC的libodbc.so.*的函数导出列表完全一致),产生冲突,无法加载数据库驱动。 解决办法: 确定一个要使用的UnixODBC,卸载另外一个(比如卸载库版本号为.so.2的UnixODBC),然后将剩下的.so.1的库,新建一个同名但是后缀为.so.2的软链接,便可解决此问题。 FATAL: Forbid remote connection with trust method! 由于安全原因,数据库主节点禁止数据库内部其他节点无认证接入。 如果要在数据库内部访问数据库主节点,请将ODBC程序部署在数据库主节点所在机器,服务器地址使用"127.0.0.1"。建议业务系统单独部署在数据库外部,否则可能会影响数据库运行性能。 [unixODBC][Driver Manager]Invalid attribute value 有可能是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. 目标数据库主节点的gs_hba.conf里配置了当前客户端IP使用"gss"方式来做认证,该认证算法不支持用作客户端的身份认证,请修改到"sha256"后再试。 isql:error while loading shared libraries:xxx 环境缺少该动态库,需要自行安装对应的库。
  • 操作步骤 安装unixODBC(默认unixODBC源码包已在环境准备中获取)。如果机器上已经安装了其他版本的unixODBC,可以直接覆盖安装。 以unixODBC-2.3.7版本为例,在客户端执行如下命令安装unixODBC。 tar zxvf unixODBC-2.3.7.tar.gz cd unixODBC-2.3.7 ./configure --enable-gui=no #如果要在ARM服务器上编译,请追加一个configure参数: --build=aarch64-unknown-linux-gnu make #安装可能需要root权限 make install 目前不支持unixODBC-2.2.1版本。 默认安装到“/usr/local”目录下,生成数据源文件到 “/usr/local/etc”目录下,库文件生成在“/usr/local/lib”目录。 通过编译带有--enable-fastvalidate=yes选项的unixODBC来获得更高性能。但此选项可能会导致向ODBC API传递无效句柄的应用程序发生故障,而不是返回SQL_INVALID_HANDLE错误。 替换客户端 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/gsqlodbcw.so setup=/usr/local/lib/gsqlodbcw.so odbcinst.ini文件中的配置参数说明如表1所示。 表1 odbcinst.ini文件配置参数 参数 描述 示例 [DriverName] 驱动器名称,对应数据源DSN中的驱动名。 [GaussMPP] Driver64 驱动动态库的路径。 Driver64=/usr/local/lib/gsqlodbcw.so setup 驱动安装路径,与Driver64中动态库的路径一致。 setup=/usr/local/lib/gsqlodbcw.so 配置数据源文件。 在“/usr/local/etc/odbc.ini”文件中追加以下内容。 [gaussdb] Driver=GaussMPP Servername=127.0.0.1 #数据库Server IP Database=db1 #数据库名 Username=omm #数据库用户名 Password= #数据库用户密码 Port=8000 #数据库侦听端口 Sslmode=allow odbc.ini文件配置参数说明如表2所示。 表2 odbc.ini文件配置参数 参数 描述 示例 [DSN] 数据源的名称。 [gaussdb] Driver 驱动名,对应odbcinst.ini中的DriverName。 Driver=GaussMPP Servername 服务器的IP地址。可配置多个IP地址。支持IPv4和IPv6。 Servername=127.0.0.1 Database 要连接的数据库的名称。 Database=db1 Username 数据库用户名称。 Username=omm Password 数据库用户密码。 说明: ODBC驱动本身已经对内存密码进行过清理,以保证用户密码在连接后不会再在内存中保留。 但是如果配置了此参数,由于UnixODBC对数据源文件等进行缓存,可能导致密码长期保留在内存中。 推荐在应用程序连接时,将密码传递给相应API,而非写在数据源配置文件中。同时连接成功后,应当及时清理保存密码的内存段。 须知: 配置文件中填写密码时,需要遵循http规则: 字符应当采用URL编码规范,如"!"应写作"%21","%"应写作"%25",因此应当特别注意字符。 "+"会被替换为空格" "。 Password=******** Port 服务器的端口号。 Port=8000 Sslmode 是否启用 SSL 连接。 说明: 关于Sslmode的选项的允许值,具体信息如表3 Sslmode的可选项及其描述所示。 Sslmode=allow Debug 是否启用调试模式。 取值范围:0 ~ INT_MAX 设置为0时表示不开启。 设置为大于0时表示将会打印gsqlodbc驱动的mylog,日志生成目录为/tmp/。 默认值为0。 Debug=1 UseServerSidePrepare 是否开启数据库端扩展查询协议。 取值范围:0,1 取值为0表示不开启。 取值为1表示开启。 默认值为1。 UseServerSidePrepare=1 UseBatchProtocol 是否开启批量查询协议(打开可提高DML性能)。 取值范围:0,1 取值为0时,不使用批量查询协议(主要用于与早期数据库版本通信兼容)。 取值为1,并且数据库support_batch_bind参数存在且为on时,将打开批量查询协议。 默认值为1。 UseBatchProtocol=1 ForExtensionConnector 此开关控制着savepoint是否发送,savepoint相关问题可以注意此开关, 取值范围:0,1 取值为0时表示发送savepoint。 取值为1时表示不发送savepoint。 默认值为1。 ForExtensionConnector=1 ConnectionExtraInfo GUC参数connection_info中显示驱动部署路径和进程属主用户的开关。 取值范围:0,1 取值为0时表示不打开此开关。 取值为1时表示打开此开关。 默认值为0。 说明: 当设置为1时,ODBC驱动会将当前驱动的部署路径、进程属主用户上报到数据库中,记录在GUC参数connection_info里,同时可以在PG_STAT_ACTIVITY中查询到。 ConnectionExtraInfo=1 BoolsAsChar 是否将布尔值作为字符处理。 取值范围:0,1 取值为0时表示Bools值将会映射为SQL_BIT。 取值为1时表示Bools值将会映射为SQL_CHAR。 默认值为1。 BoolsAsChar = 1 RowVersioning 是否在更新一行数据时,允许应用检测数据有没有被其他用户进行修改。 取值范围:0,1 取值为0时表示不允许应用检测。 取值为1时表示允许应用检测。 默认值为0。 RowVersioning=1 ShowSystemTables 是否将默认系统表格视为普通SQL表格。 取值范围:0,1 取值为0时驱动不会将默认系统表格视为普通SQL表格。 取值为1时驱动将默认系统表格视为普通SQL表格。 默认值为0。 ShowSystemTables=1 MaxCacheQueries 控制每个连接缓存的预编译语句个数。 取值范围:0 ~ 4096 默认值为0。 说明: 如果设置为0,则不开启客户端预编译语句缓存池。设置为大于4096的值会限制为4096。如果执行过的语句个数超过MaxCacheQueries设置的上限,则淘汰最近最少使用的语句。 MaxCacheQueries=128 MaxCacheSizeMiB 控制每个连接缓存的预编译语句总大小,在MaxCacheQueries大于0时生效。 取值范围:0 ~ 4096 默认值为1。 说明: 如果缓存的语句总长度大于MaxCacheSizeMiB则淘汰最近最少使用的语句。单位为MB,设置为大于4096的值会限制为4096。 MaxCacheSizeMiB=10 TcpUserTimeout 在支持TCP_USER_TIMEOUT套接字选项的操作系统上,指定传输的数据在TCP连接被强制关闭之前可以保持未确认状态的最大时长。 取值范围:0 ~ INT_MAX 默认值为0。 说明: 0表示使用系统缺省。通过Unix域套接字做的连接忽略这个参数。单位为毫秒。 TcpUserTimeout=5000 TargetServerType 设定连接的主机的类型。主机的类型和设定的值一致时才能连接成功。设置规则如下: primary(默认值):仅对主备系统中的主节点进行连接。 standby:仅对主备系统中的备节点进行连接。 prefer-standby:首先尝试与主备系统中的备节点进行连接。如果与hosts列表的所有备节点都连接失败,则尝试any模式进行连接。 read-write:仅对可读写的主机进行连接。 read-only:仅对只读的主机进行连接。 any:可以对所有类型的主机进行连接。 cluster-primary:仅支持对主数据库主节点进行连接。 cluster-standby:仅支持对主数据库备节点进行连接。 cluster-mainnode:仅支持对主节点或首备节点(容灾主节点)进行连接。 说明: cluster-primary、cluster-standby和cluster-mainnode选项仅支持流式容灾。 TargetServerType=primary KeepaliveTime 在TCP应该发送一个保持激活的信息给服务器之后,控制不活动的秒数。通过Unix域套接字做的连接或者如果禁用了保持激活则忽略这个参数。 取值范围:0 ~ INT_MAX 默认值为0。 KeepaliveTime=2 KeepaliveInterval 在TCP保持激活信息没有被应该传播的服务器承认之后,控制秒数。通过Unix域套接字做的连接或者如果禁用了保持激活则忽略这个参数。 取值范围:0 ~ INT_MAX 默认值为0。 KeepaliveInterval=2 KeepaliveCount 控制TCP发送保持激活信息的次数。通过Unix域套接字做的连接或者如果禁用了保持激活则忽略这个参数。 取值范围:0 ~ INT_MAX 默认值为0。 KeepaliveCount=2 SocketTimeout 用于控制客户端与服务端建立连接完全成功后的socket读写超时时间。单位为秒,默认为0。 说明: 该参数包括了数据库语句执行的超时时间,设置的过小可能导致语句执行时间本身发生超时,因此默认为0,需根据场景配置,建议设置非0值。 SocketTimeout=5 SocketTimeoutInConnect 用于控制TCP三次握手成功后,客户端与服务端建立连接阶段的socket读写超时时间。单位为秒,默认为5。 说明: 该参数区别于SocketTimeout:由于三次握手成功后的客户端与服务端建立连接阶段可能存在阻塞,因此需要设置不影响语句执行超时的socket读写超时时间。 SocketTimeoutInConnect=5 CancelTimeout 用于控制应用端发送cancel消息的超时时间。单位为秒,默认为0。 CancelTimeout=5 TcpSYNRetries 用于控制TCP三次握手阶段时SYN最多重传的次数,超过该次数仍未建连成功即报错。默认为0次。 说明: 该参数在支持TCP_SYNCNT套接字选项的操作系统上,指定客户端建立连接三次握手阶段SYN包发送失败而重传的次数。0值表示使用系统缺省。通过Unix域套接字的连接忽略这个参数。 TcpSYNRetries=3 TextAsLongVarchar 若TextAsLongVarchar=1,则将内核侧text类型映射为驱动侧的SQL_LONGVARCHAR类型;TextAsLongVarchar=0,则将内核侧text类型映射为驱动侧的SQL_VARCHAR类型。默认值为1。 TextAsLongVarchar=1 MaxLongVarcharSize 驱动侧的SQL_LONGVARCHAR类型的最大长度。默认值为8190。 MaxLongVarcharSize=8190 MaxVarcharSize 驱动侧的SQL_VARCHAR类型的最大长度。默认值为255。 MaxVarcharSize=255 EnableUpdateCursorCache 是否开启可更新游标缓存能力,默认开启,仅支持数据库为A兼容模式。 EnableUpdateCursorCache=1 EnableHostCache 是否开启节点缓存功能,0表示不开启,1表示开启。默认开启。 EnableHostCache=1 表3 Sslmode的可选项及其描述 Sslmode 是否会启用SSL加密 描述 disable 否 不使用SSL安全连接。 allow 可能 如果数据库服务器要求使用,则可以使用SSL安全加密连接,但不验证数据库服务器的真实性。 prefer 可能 如果数据库支持,那么首选使用SSL安全加密连接,但不验证数据库服务器的真实性。 require 是 必须使用SSL安全连接,但是只做了 数据加密 ,并不验证数据库服务器的真实性。 verify-ca 是 必须使用SSL安全连接,并且验证数据库是否具有可信证书机构签发的证书。 verify-full 是 必须使用SSL安全连接,在verify-ca的验证范围之外,同时验证数据库所在主机的主机名是否与证书内容一致。GaussDB不支持此模式。 用户通过ODBC连接GaussDB服务器时,可以通过开启SSL加密客户端和服务器之间的通讯。在使用SSL时,默认用户已经获取了服务端和客户端所需要的证书和私钥文件,关于证书等文件的获取请参考Openssl相关文档和命令。 在客户端配置环境变量。 vim ~/.bashrc 在配置文件中追加以下内容。 export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH export OD BCS YSINI=/usr/local/etc export ODBCINI=/usr/local/etc/odbc.ini 执行如下命令使设置生效。 source ~/.bashrc 测试连接。 安装后/usr/bin下面会存放生成的二进制,可执行isql -v gaussdb(数据源名称)命令。 如果显示如下信息,表明配置正确,连接成功。 +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ 若显示ERROR信息,则表明配置错误。请检查上述配置步骤是否正确执行。 目前通过ODBC连接数据库时,会如下设置内核参数: SET extra_float_digits = 2; SET DateStyle = 'ISO'; 这些参数可能会导致ODBC客户端的行为与gsql客户端的行为不一致,例如,Date数据显示方式、浮点数精度表示。如果实际期望和这些配置不符,建议在ODBC应用代码中显式设定这些参数。 M-Compatibility模式数据库下,extra_float_digits的默认值为0。
  • GS_MY_ILMOBJE CTS GS_MY_ILMOBJECTS视图反映所有存在ILM策略应用的数据对象与相应策略的概要信息,包含策略名称、数据对象名称、策略的来源、策略的启用删除状态。 表1 GS_MY_ILMOBJECTS字段 名称 类型 描述 policy_name character varying(128) ADO策略名称,系统自动生成,规则为:p+策略ID。 object_owner character varying(128) 数据对象所在Schema名称。 object_name character varying(128) 数据对象名称。 subobject_name character varying(128) 数据对象分区名称或二级分区名称。 object_type character varying(18) 数据对象类型: TABLE:表。 TABLE PARTITION:分区。 TABLE SUBPARTITION:二级分区。 inherited_from character varying(20) 当前策略是继承哪一个对象上的策略,取值范围: TABLE:表。 TABLE PARTITION:分区。 POLICY NOT INHERITED:不继承。 tbs_inherited_from character varying(30) 当前策略是继承哪一个TS上的策略。当前版本值为null。 enabled character varying(7) 该策略对当前对象是否开启。 deleted character varying(7) 标识该对象上的ILM策略被删除,实际操作结果是删除分区或者是删除分区上的策略,该条记录都会被删除(ILMOBJ)。 父主题: OLTP表压缩
  • GS_SQL_COUNT GS_SQL_COUNT视图显示数据库当前节点当前时刻执行的五类语句(SELECT、INSERT、UPDATE、DELETE、MERGE INTO)统计信息。 普通用户查询GS_SQL_COUNT视图仅能看到该用户当前节点的统计信息;管理员权限用户查询GS_SQL_COUNT视图则能看到所有用户当前节点的统计信息。多租场景下,non-PDB访问该视图时返回全部信息,PDB访问该视图时仅返回该PDB相关信息。 当数据库或该节点重启时,计数将清零,并重新开始计数 。 计数以节点收到的查询数为准,包括数据库内部进行的查询。 表1 GS_SQL_COUNT字段 名称 类型 描述 node_name name 节点名称。 user_name name 用户名。 select_count bigint SELECT语句统计结果。 update_count bigint UPDATE语句统计结果。 insert_count bigint INSERT语句统计结果。 delete_count bigint DELETE语句统计结果。 mergeinto_count bigint MERGE INTO语句统计结果。 ddl_count bigint DDL语句的数量。该统计结果包含用户执行的SQL语句和数据库后台线程执行的SQL语句,包括“TRUNCATE”、“VACUUM”、“ANALYZE”、“CREATE”(不包括“CREATE ROLE”和“CREATE USER”)、“DROP”(不包括“DROP ROLE”和“DROP USER”)、“ALTER”(不包括“ALTER ROLE”、“ALTER USER”和“ALTER DEFAULT PRIVILEGES”)、“REINDEX”和“COMMENT”语句。 dml_count bigint DML语句的数量。该统计结果包含用户执行的SQL语句和数据库后台线程执行的SQL语句,包括“UPDATE”、“INSERT”、“DELETE”、“MERGE”、“PREPARE”、“EXPLAIN”、“SHOW”、“LOCK”、“COPY”、“CLUSTER”、“ANONYMOUS”、“DELTA”、“EXECUTE”、“MOVE”、“FETCH”、“CLOSE”、“DEALLOCATE”、“DECLARE”和“LOAD”语句。 dcl_count bigint DCL语句的数量。该统计结果包含用户执行的SQL语句和数据库后台线程执行的SQL语句,包括“CREATE ROLE”、“CREATE USER”、“DROP ROLE”、“DROP USER”、“ALTER ROLE”、“ALTER USER”、“ALTER DEFAULT PRIVILEGES”、“GRANT”、“REVOKE”、“REASSIGN”和“SET”语句。 total_select_elapse bigint 总SELECT的时间花费(单位:微秒)。 avg_select_elapse bigint 平均SELECT的时间花费(单位:微秒)。 max_select_elapse bigint 最大SELECT的时间花费(单位:微秒)。 min_select_elapse bigint 最小SELECT的时间花费(单位:微秒)。 total_update_elapse bigint 总UPDATE的时间花费(单位:微秒)。 avg_update_elapse bigint 平均UPDATE的时间花费(单位:微秒)。 max_update_elapse bigint 最大UPDATE的时间花费(单位:微秒)。 min_update_elapse bigint 最小UPDATE的时间花费(单位:微秒)。 total_insert_elapse bigint 总INSERT的时间花费(单位:微秒)。 avg_insert_elapse bigint 平均INSERT的时间花费(单位:微秒)。 max_insert_elapse bigint 最大INSERT的时间花费(单位:微秒)。 min_insert_elapse bigint 最小INSERT的时间花费(单位:微秒)。 total_delete_elapse bigint 总DELETE的时间花费(单位:微秒)。 avg_delete_elapse bigint 平均DELETE的时间花费(单位:微秒)。 max_delete_elapse bigint 最大DELETE的时间花费(单位:微秒)。 min_delete_elapse bigint 最小DELETE的时间花费(单位:微秒)。 dbid oid 统计的五类语句(SELECT、INSERT、UPDATE、DELETE、MERGE INTO)所属的数据库id。 user_dml_count bigint 用户执行的DML语句的数量。 bg_dml_count bigint 数据库后台线程执行的DML语句的数量。 父主题: 其他系统视图
  • GLOBAL_RECORD_RESET_TIME GLOBAL_RECORD_RESET_TIME用于获取数据库中各节点的“重置(重启,主备倒换,数据库删除)时间”的统计信息,如表1所示。 表1 GLOBAL_RECORD_RESET_TIME字段 名称 类型 描述 node_name text 节点名称。 reset_time timestamp with time zone 重置时间点。 父主题: Utility
  • pg_export_snapshot() 描述:保存当前的快照并返回它的标识符。 返回值类型:text 备注:函数pg_export_snapshot保存当前的快照并返回一个文本字符串标识此快照。这个字符串必须传递给想要导入快照的客户端。可用在set transaction snapshot snapshot_id时导入snapshot,但是应用的前提是该事务设置了SERIALIZABLE或REPEATABLE READ隔离级别。而GaussDB目前是不支持这两种隔离级别的。该函数的输出不可用做set transaction snapshot的输入。
  • 使用限制 不支持调用的上下文环境: 不支持除PL/SQL的其他存储过程中调用COMMIT/ROLLBACK/SAVEPOINT,例如PL/PYTHON等。 不支持函数中调用COMMIT/ROLLBACK/SAVEPOINT,包括函数调用含有COMMIT/ROLLBACK/SAVEPOINT的存储过程。 不支持事务块中调用了SAVEPOINT后,调用含有COMMIT/ROLLBACK的存储过程。 不支持TRIGGER中调用含有COMMIT/ROLLBACK/SAVEPOINT语句的存储过程。 不支持EXECUTE语句中调用COMMIT/ROLLBACK/SAVEPOINT语句。 不支持在CURSOR语句中打开一个含有COMMIT/ROLLBACK/SAVEPOINT的存储过程。 不支持带有IMMUTABLE以及SHIPPABLE的存储过程调用COMMIT/ROLLBACK/SAVEPOINT,或调用带有COMMIT/ROLLBACK/SAVEPOINT语句的存储过程。 不支持SQL中调用含有COMMIT/ROLLBACK/SAVEPOINT语句的存储过程,除了SELECT PROC以及CALL PROC。 存储过程头带有GUC参数设置的不允许调用COMMIT/ROLLBACK/SAVEPOINT语句。 不支持CURSOR/EXECUTE语句,以及各类表达式内调用COMMIT/ROLLBACK/SAVEPOINT。 不支持存储过程中释放存储过程外部定义的保存点。 自治事务和存储过程事务是两个独立的事务,不能互相使用对方事务中定义的保存点。 不支持提交回滚的内容: 不支持存储过程内声明变量以及传入变量的提交/回滚。 不支持存储过程内必须重启生效的GUC参数的提交/回滚。
  • 使用场景 支持调用的上下文环境: 支持在PL/SQL的存储过程内使用COMMIT/ROLLBACK/SAVEPOINT。 支持含有EXCEPTION的存储过程使用COMMIT/ROLLBACK/SAVEPOINT。 支持在存储过程的EXCEPTION语句内使用COMMIT/ROLLBACK/SAVEPOINT。 支持在事务块里调用含有COMMIT/ROLLBACK/SAVEPOINT的存储过程,即通过BEGIN/START/END等开启控制的外部事务。 支持在子事务中调用含有SAVEPOINT的存储过程,即存储过程中使用外部定义的SAVEPOINT,回退事务状态到存储过程外定义的SAVEPOINT位置。 支持存储过程外部对存储过程内定义的SAVEPOINT可见,即存储过程外可以将事务修改回滚到存储过程中定义SAVEPOINT的位置。 支持多数PL/SQL的上下文和语句内调用COMMIT/ROLLBACK/SAVEPOINT,包括常用的IF/FOR/CURSOR LOOP/WHILE。 支持存储过程返回值与简单表达式计算中调用含有COMMIT/ROLLBACK/SAVEPOINT的存储过程或者函数。 支持提交/回滚的内容: 支持DDL在COMMIT/ROLLBACK后的提交/回滚。 支持DML的COMMIT/ROLLBACK后的提交。 支持存储过程内GUC参数的回滚提交。
  • 示例 示例1:支持在PL/SQL的存储过程内使用COMMIT/ROLLBACK,后续示例依赖此用例。 gaussdb=# DROP TABLE IF EXISTS EXAMPLE1; NOTICE: table "example1" does not exist, skipping DROP TABLE gaussdb=# CREATE TABLE EXAMPLE1(COL1 INT); CREATE TABLE gaussdb=# CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE() AS BEGIN FOR i IN 0..20 LOOP INSERT INTO EXAMPLE1(COL1) VALUES (i); IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; END IF; END LOOP; END; / CREATE PROCEDURE gaussdb=# CALL TRANSACTION_EXAMPLE(); transaction_example --------------------- (1 row) 示例2: 支持含有EXCEPTION的存储过程使用COMMIT/ROLLBACK。 支持在存储过程的EXCEPTION语句内使用COMMIT/ROLLBACK。 支持DDL在COMMIT/ROLLBACK后的提交/回滚。 gaussdb=# CREATE OR REPLACE PROCEDURE TEST_COMMIT_INSERT_EXCEPTION_ROLLBACK() AS BEGIN DROP TABLE IF EXISTS TEST_COMMIT; CREATE TABLE TEST_COMMIT(A INT, B INT); INSERT INTO TEST_COMMIT SELECT 1, 1; COMMIT; CREATE TABLE TEST_ROLLBACK(A INT, B INT); RAISE EXCEPTION 'RAISE EXCEPTION AFTER COMMIT'; EXCEPTION WHEN OTHERS THEN INSERT INTO TEST_COMMIT SELECT 2, 2; ROLLBACK; END; / CREATE PROCEDURE gaussdb=# CALL TEST_COMMIT_INSERT_EXCEPTION_ROLLBACK(); NOTICE: table "test_commit" does not exist, skipping CONTEXT: SQL statement "DROP TABLE IF EXISTS TEST_COMMIT" PL/pgSQL function test_commit_insert_exception_rollback() line 3 at SQL statement test_commit_insert_exception_rollback --------------------------------------- (1 row) 示例3:支持在事务块里调用含有COMMIT/ROLLBACK的存储过程,即通过BEGIN/START/END等开启控制的外部事务。 gaussdb=# BEGIN; -- TEST_COMMIT_INSERT_EXCEPTION_ROLLBACK定义见示例2 CALL TEST_COMMIT_INSERT_EXCEPTION_ROLLBACK(); END; test_commit_insert_exception_rollback --------------------------------------- (1 row) COMMIT 示例4:支持多数PL/SQL的上下文和语句内调用COMMIT/ROLLBACK,包括常用的IF/FOR/CURSOR LOOP/WHILE。 gaussdb=# CREATE OR REPLACE PROCEDURE TEST_COMMIT2() IS BEGIN DROP TABLE IF EXISTS TEST_COMMIT; CREATE TABLE TEST_COMMIT(A INT); FOR I IN REVERSE 3..0 LOOP INSERT INTO TEST_COMMIT SELECT I; COMMIT; END LOOP; FOR I IN REVERSE 2..4 LOOP UPDATE TEST_COMMIT SET A=I; COMMIT; END LOOP; EXCEPTION WHEN OTHERS THEN INSERT INTO TEST_COMMIT SELECT 4; COMMIT; END; / CREATE PROCEDURE gaussdb=# CALL TEST_COMMIT2(); test_commit2 -------------- (1 row) 示例5:支持存储过程返回值与简单表达式计算。 gaussdb=# CREATE OR REPLACE PROCEDURE exec_func3(RET_NUM OUT INT) AS BEGIN RET_NUM := 1+1; COMMIT; END; / CREATE PROCEDURE gaussdb=# CALL exec_func3(''); ret_num --------- 2 (1 row) gaussdb=# CREATE OR REPLACE PROCEDURE exec_func4(ADD_NUM IN INT) AS SUM_NUM INT; BEGIN SUM_NUM := ADD_NUM + exec_func3(); COMMIT; END; / CREATE PROCEDURE gaussdb=# CALL exec_func4(1); exec_func4 ------------ (1 row) 示例6:支持存储过程内GUC参数的回滚提交。 gaussdb=# SET explain_perf_mode='normal'; SET gaussdb=# SHOW explain_perf_mode; explain_perf_mode ------------------- normal (1 row) gaussdb=# SHOW enable_force_vector_engine; enable_force_vector_engine ---------------------------- off (1 row) gaussdb=# CREATE OR REPLACE PROCEDURE GUC_ROLLBACK() AS BEGIN SET enable_force_vector_engine = on; COMMIT; SET explain_perf_mode TO pretty; ROLLBACK; END; / CREATE PROCEDURE gaussdb=# CALL GUC_ROLLBACK(); guc_rollback -------------- (1 row) gaussdb=# SHOW explain_perf_mode; explain_perf_mode ------------------- normal (1 row) gaussdb=# SHOW enable_force_vector_engine; enable_force_vector_engine ---------------------------- on (1 row) gaussdb=# SET enable_force_vector_engine = off; SET 示例7:不允许Trigger的存储过程包含commit/rollback语句,或调用带有commit/rollback语句的存储过程。 gaussdb=# CREATE OR REPLACE FUNCTION FUNCTION_TRI_EXAMPLE2() RETURN TRIGGER AS EXP INT; BEGIN FOR i IN 0..20 LOOP INSERT INTO EXAMPLE1(col1) VALUES (i); IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; END IF; END LOOP; SELECT COUNT(*) FROM EXAMPLE1 INTO EXP; END; / CREATE FUNCTION gaussdb=# CREATE TRIGGER TRIGGER_EXAMPLE AFTER DELETE ON EXAMPLE1 FOR EACH ROW EXECUTE PROCEDURE FUNCTION_TRI_EXAMPLE2(); CREATE TRIGGER gaussdb=# DELETE FROM EXAMPLE1; ERROR: Can not commit/rollback if it's atomic is true: can not use commit rollback in Complex SQL CONTEXT: PL/pgSQL function function_tri_example2() line 7 at COMMIT 示例8:不支持带有IMMUTABLE以及SHIPPABLE的存储过程调用commit/rollback,或调用带有commit/rollback语句的存储过程。 gaussdb=# CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE1() IMMUTABLE AS EXP INT; BEGIN FOR i IN 0..20 LOOP SELECT COUNT(*) FROM EXAMPLE1 INTO EXP; IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; END IF; END LOOP; END; / CREATE PROCEDURE gaussdb=#CALL TRANSACTION_EXAMPLE1(); ERROR: Can not commit/rollback if it's atomic is true: commit/rollback/savepoint is not allowed in a non-volatile function CONTEXT: PL/pgSQL function transaction_example1() line 7 at COMMIT 示例9:不支持存储过程中任何变量的提交,包括存储过程内声明的变量或者传入的参数。 gaussdb=# CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE2(EXP_OUT OUT INT) AS EXP INT:=-1; BEGIN EXP_OUT := 0; EXP := 0; COMMIT; DBE_OUTPUT.PRINT_LINE('EXP IS:'||EXP); DBE_OUTPUT.PRINT_LINE('EXP_OUT IS:'||EXP_OUT); EXP := 1; EXP_OUT := 1; ROLLBACK; DBE_OUTPUT.PRINT_LINE('EXP IS:'||EXP); DBE_OUTPUT.PRINT_LINE('EXP_OUT IS:'||EXP_OUT); END; / CREATE PROCEDURE gaussdb=# CALL TRANSACTION_EXAMPLE2(1); EXP IS:0 EXP_OUT IS:0 EXP IS:1 EXP_OUT IS:1 exp_out --------- 1 (1 row) 示例10:不支持出现在SQL中的调用(除了Select Procedure)。 gaussdb=# CREATE OR REPLACE FUNCTION TRANSACTION_EXAMPLE3() RETURN INT IS BEGIN FOR i IN 0..20 LOOP INSERT INTO EXAMPLE1 (col1) VALUES (i); IF i % 2 = 0 THEN EXECUTE IMMEDIATE 'COMMIT'; ELSE EXECUTE IMMEDIATE 'ROLLBACK'; END IF; END LOOP; RETURN 1; END; / CREATE PROCEDURE gaussdb=# SELECT * FROM example1 WHERE col1=TRANSACTION_EXAMPLE3(); ERROR: cannot call transaction statements in EXECUTE IMMEDIATE statement. CONTEXT: PL/pgSQL function transaction_example3() line 6 at EXECUTE statement 示例11:存储过程头带有GUC参数设置的不允许调用commit/rollback语句。 gaussdb=# CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE4() SET ARRAY_NULLS TO "ON" AS BEGIN FOR i IN 0..20 LOOP INSERT INTO EXAMPLE1 (col1) VALUES (i); IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; END IF; END LOOP; END; / CREATE PROCEDURE gaussdb=# CALL TRANSACTION_EXAMPLE4(); ERROR: Can not commit/rollback if it's atomic is true: transaction statement in store procedure with GUC setting in option clause is not supported CONTEXT: PL/pgSQL function transaction_example4() line 6 at COMMIT 示例12:游标open的对象不允许为带有commit/rollback语句的存储过程。 gaussdb=# CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE5(INTIN IN INT, INTOUT OUT INT) AS BEGIN INTOUT := INTIN + 1; COMMIT; END; / CREATE PROCEDURE gaussdb=# CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE6() AS CURSOR CURSOR1(EXPIN INT) IS SELECT TRANSACTION_EXAMPLE5(EXPIN); INTEXP INT; BEGIN FOR i IN 0..20 LOOP OPEN CURSOR1(i); FETCH CURSOR1 INTO INTEXP; INSERT INTO EXAMPLE1(COL1) VALUES (INTEXP); IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; END IF; CLOSE CURSOR1; END LOOP; END; / CREATE PROCEDURE gaussdb=# CALL TRANSACTION_EXAMPLE6(); ERROR: Can not commit/rollback if it's atomic is true: transaction statement in store procedure used as cursor is not supported CONTEXT: PL/pgSQL function transaction_example5(integer) line 4 at COMMIT referenced column: transaction_example5 PL/pgSQL function transaction_example6() line 8 at FETCH 示例13:不支持CURSOR/EXECUTE语句,以及各类表达式内调用COMMIT/ROLLBACK。 gaussdb=# CREATE OR REPLACE PROCEDURE exec_func1() AS BEGIN CREATE TABLE TEST_exec(A INT); COMMIT; END; / CREATE PROCEDURE gaussdb=# CREATE OR REPLACE PROCEDURE exec_func2() AS BEGIN EXECUTE exec_func1(); COMMIT; END; / CREATE PROCEDURE gaussdb=# CALL exec_func2(); ERROR: Can not commit/rollback if it's atomic is true: transaction statement in store procedure used as a expression is not supported CONTEXT: PL/pgSQL function exec_func1() line 4 at COMMIT PL/pgSQL function exec_func2() line 3 at EXECUTE statement
  • gs_plsql_memory_object_detail(db_oid, obj_oid, obj_type) 描述:获取存储过程创建的package、function的主要有效内存占用情况。enable_global_plsqlcache = off时该函数显示当前session中的存储过程内存情况,跨session查询暂不支持。调用该函数的用户需要有SYSADMIN权限。 参数:该函数需传入db_oid、obj_oid、obj_type三个参数,如传入参数不匹配,返回空行。具体参数说明见表1。其中db_oid、obj_oid传入0为默认查找cache中所有package、function的有效内存使用情况。 返回值类型:Tuple 表1 gs_plsql_memory_object_detail参数说明 参数列表 类型 描述 取值范围 db_oid uint32 查询数据库oid为db_oid内存储的存储过程的主要有效内存占用情况。0默认为当前缓存中全部数据库实例。 0 - 2^32-1。 obj_oid uint32 查询object的oid。0默认为当前缓存中全部pkg与function。 0 - 2 ^32-1。 obj_type text 查询object的类型,标识查询目标object为package或function。 all:默认全部查询。 pkg:查询满足条件的package有效内存占用。 func:查询满足条件的function有效内存占用。 func_in_pkg:查询满足条件的package中的function的 有效内存占用。 gs_plsql_memory_object_detail函数显示数据库内满足查询条件的有效内存占用情况说明如表2所示。 表2 gs_plsql_memory_object_detail返回值 名称 类型 描述 object_oid uint32 查询内存对象的oid。 context_name text 内存对象名。 item text 查询内存对象项目名。 searchpath text 内存对象访问编译产物的Schema及其他环境变量。 guc uint64 创建对象时的环境参数,即behavior_compat_flags的值。 file text 内存对象创建所在文件。 line uint32 内存对象创建所在文件行数。 size uint32 内存对象大小。 db_oid uint32 查询内存对象所在数据库oid。 示例: --如下用例构造当enable_global_plsqlcache = on时,创建package和function,调用gs_plsql_memory_object_detail获取内存使用占用的情况。 gaussdb=# CREATE OR REPLACE PACKAGE my_package AS gaussdb$# PROCEDURE public_proc(a int, b int); gaussdb$# END my_package; gaussdb$# / CREATE PACKAGE gaussdb=# CREATE OR REPLACE PACKAGE BODY my_package AS gaussdb$# PROCEDURE public_proc(a int, b int) AS gaussdb$# BEGIN gaussdb$# RAISE NOTICE 'a + b = %', a + b; gaussdb$# END; gaussdb$# END my_package; gaussdb$# / CREATE PACKAGE BODY gaussdb=# BEGIN gaussdb$# my_package.public_proc(2, 3); gaussdb$# END; gaussdb$# / NOTICE: a + b = 5 CONTEXT: SQL statement "CALL my_package.public_proc(2,3)" PL/pgSQL function inline_code_block line 2 at PERFORM ANONYMOUS BLOCK EXECUTE gaussdb=# SELECT * FROM gs_plsql_memory_object_detail(0,16716,'pkg'); object_oid | context_name | item | searchpath | guc | file | line | size | db_oid ------------+--------------------+-------------+-------------------------------+-----------------+----------------+------+------+-------- 16716 | GLC_PKG_my_package | pkg | addUser: false, schemas: 2200 | 303465209266176 | pl_package.cpp | 1143 | 1096 | 14584 16716 | GLC_PKG_my_package | invalItems | addUser: false, schemas: 2200 | 303465209266176 | NA | 0 | 0 | 14584 16716 | GLC_PKG_my_package | proc_list | addUser: false, schemas: 2200 | 303465209266176 | list.cpp | 110 | 3168 | 14584 16716 | GLC_PKG_my_package | ndatums | addUser: false, schemas: 2200 | 303465209266176 | pl_package.cpp | 1342 | 8 | 14584 16716 | GLC_PKG_my_package | GSPLSQLType | addUser: false, schemas: 2200 | 303465209266176 | NA | 0 | 0 | 14584 16716 | GLC_PKG_my_package | namespace | addUser: false, schemas: 2200 | 303465209266176 | pl_funcs.cpp | 229 | 240 | 14584 (6 rows) gaussdb=# SELECT * FROM gs_plsql_memory_object_detail(0,16717,'func'); object_oid | context_name | item | searchpath | guc | file | line | size | db_oid ------------+----------------------+------------+-------------------------------+-----------------+--------------+------+------+-------- 16717 | GLC_FUNC_public_proc | function | addUser: false, schemas: 2200 | 303465209266176 | pl_comp.cpp | 1538 | 1800 | 14584 16717 | GLC_FUNC_public_proc | ndatums | addUser: false, schemas: 2200 | 303465209266176 | pl_comp.cpp | 2362 | 6072 | 14584 16717 | GLC_FUNC_public_proc | invalItems | addUser: false, schemas: 2200 | 303465209266176 | NA | 0 | 0 | 14584 16717 | GLC_FUNC_public_proc | exprlist | addUser: false, schemas: 2200 | 303465209266176 | list.cpp | 110 | 320 | 14584 16717 | GLC_FUNC_public_proc | StmtBlock | addUser: false, schemas: 2200 | 303465209266176 | pl_gram.cpp | 696 | 176 | 14584 16717 | GLC_FUNC_public_proc | namespace | addUser: false, schemas: 2200 | 303465209266176 | pl_funcs.cpp | 229 | 1152 | 14584 (6 rows)
  • invalidate_plsql_object(),invalidate_plsql_object(schema, objname, objtype); 描述:失效Global Plsql Cache全局缓存中的对象,仅在enable_global_plsqlcache = on时可用。调用该函数的用户需要具有SYSADMIN权限。 参数:该函数为重载函数。当无入参时,将所有DATABASE内的所有全局缓存对象失效。 当指定schema、objname、objtype三个参数时可将当前DATABASE内的指定全局缓存对象失效。其中:schema为对象所属的schema名称;objname为对象名称;objtype为对象类型,对象为package类型时值为“package”,对象为函数或存储过程时值为“function”。 示例: 该函数不返回失效结果,可通过gs_glc_memory_detail视图查询,对象未被失效时可在视图中查找到对应的valid状态的行,失效后则没有对应的valid状态行。 invalidate_plsql_object所属的Schema为pg_catalog,但不指定Schema也可调用该函数。 --创建一个包pkg1和函数f2,查询视图缓存信息,状态为valid。 gaussdb=# CREATE SCHEMA testInvalidate; CREATE SCHEMA gaussdb=# SET CURRENT_SCHEMA TO testInvalidate; SET gaussdb=# CREATE OR REPLACE PACKAGE pkg1 AS gaussdb$# var1 VARCHAR; gaussdb$# FUNCTION f1() RETURN VARCHAR; gaussdb$# END pkg1; gaussdb$# / CREATE PACKAGE gaussdb=# CREATE OR REPLACE PACKAGE BODY pkg1 AS gaussdb$# FUNCTION f1() RETURN VARCHAR gaussdb$# IS gaussdb$# BEGIN gaussdb$# var1 := '2'; gaussdb$# RETURN var1; gaussdb$# END; gaussdb$# END pkg1; gaussdb$# / CREATE PACKAGE BODY gaussdb=# CREATE OR REPLACE FUNCTION f2() RETURN VARCHAR gaussdb-# IS gaussdb$# DECLARE gaussdb$# var2 VARCHAR := 'li2'; gaussdb$# BEGIN gaussdb$# var2='22'; gaussdb$# RETURN var2; gaussdb$# END gaussdb$# / CREATE FUNCTION gaussdb=# CALL pkg1.f1(); f1 ---- 2 (1 row) gaussdb=# CALL f2(); f2 ---- 22 (1 row) gaussdb=# SELECT * FROM gs_glc_memory_detail WHERE schema = 'testinvalidate'; contextname | database | schema | type | status | location | env | usedsize | usecount | oid | isspec | searchpath | invalidreason --------------+----------+----------------+------+--------+----------------------+-----+----------+----------+-------+--------+--------------------------------+--------------- GLC_PKG_pkg1 | postgres | testinvalidate | pkg | valid | in_global_hash_table | 0 | 19856 | 1 | 16755 | f | addUser: false, schemas: 16754 | valid GLC_FUNC_f1 | postgres | testinvalidate | func | valid | in_global_hash_table | 0 | 10840 | 1 | 16756 | | addUser: false, schemas: 16754 | valid GLC_FUNC_f2 | postgres | testinvalidate | func | valid | in_global_hash_table | 0 | 12072 | 1 | 16757 | | addUser: false, schemas: 16754 | valid (3 rows) --调用函数,指定schema、函数名、类型即可将pkg1失效,再次查询视图,则没有pkg1对应的valid状态行 gaussdb=# SELECT invalidate_plsql_object('testinvalidate','pkg1','package'); invalidate_plsql_object ------------------------- (1 row) --如果要失效function,参数如下所示 gaussdb=# SELECT invalidate_plsql_object('testinvalidate','f2','function'); invalidate_plsql_object ------------------------- (1 row) --调用时没有入参,则将失效所有缓存对象 gaussdb=# SELECT invalidate_plsql_object(); invalidate_plsql_object ------------------------- (1 row)
  • 参数说明 UNLOGGED 指定表为非日志表。在非日志表中写入的数据不会被写入到预写日志中,这样就会比普通表快很多。但是,非日志表在冲突或异常关机后会被自动删截,非日志表中的内容也不会被复制到备用服务器中,在该类表中创建的索引也不会被自动记录。 使用场景:非日志表不能保证数据的安全性,用户应该在确保数据已经做好备份的前提下使用,例如系统升级时进行数据的备份。 故障处理:当异常关机等操作导致非日志表上的索引发生数据丢失时,用户应该对发生错误的索引进行重建。 GLOBAL | LOCAL 创建临时表时可以在TEMP或TEMPORARY前指定GLOBAL或LOCAL关键字。如果指定GLOBAL关键字,GaussDB会创建全局临时表,否则GaussDB会创建本地临时表。 TEMPORARY | TEMP 如果指定TEMP或TEMPORARY关键字,则创建的表为临时表。临时表分为全局临时表和本地临时表两种类型。创建临时表时如果指定GLOBAL关键字则为全局临时表,否则为本地临时表。 全局临时表的元数据对所有会话可见,会话结束后元数据继续存在。会话与会话之间的用户数据、索引和统计信息相互隔离,每个会话只能看到和更改自己提交的数据。全局临时表有两种模式:一种是基于会话级别的(ON COMMIT PRESERVE ROWS), 当会话结束时自动清空用户数据;一种是基于事务级别的(ON COMMIT DELETE ROWS), 当执行COMMIT或ROLLBACK时自动清空用户数据。建表时如果没有指定ON COMMIT选项,则缺省为会话级别。与本地临时表不同,全局临时表建表时可以指定非pg_temp开头的SCHEMA。 本地临时表只在当前会话可见,本会话结束后会自动删除。因此,在除当前会话连接的数据库节点故障时,仍然可以在当前会话上创建和使用临时表。由于临时表只在当前会话创建,对于涉及对临时表操作的DDL语句,会产生DDL失败的报错。因此,建议DDL语句中不要对临时表进行操作。TEMP和TEMPORARY等价。 本地临时表通过每个会话独立的以pg_temp开头的SCHEMA来保证只对当前会话可见,因此,不建议用户在日常操作中手动删除以pg_temp,pg_toast_temp开头的SCHEMA。 如果建表时不指定TEMPORARY/TEMP关键字,而指定表的SCHEMA为当前会话的pg_temp开头的SCHEMA,则此表会被创建为临时表。 ALTER/DROP全局临时表和索引,如果其它会话正在使用它,禁止操作。 全局临时表的DDL只会影响当前会话的用户数据和索引。例如TRUNCATE、REINDEX、ANALYZE只对当前会话有效。 IF NOT EXISTS 如果指定IF NOT EXISTS关键字,创建表前会在当前SCHEMA中查找是否已有名字相同的relation。若已有同名relation存在,则不会新建,返回NOTICE提示。未指定IF NOT EXISTS关键字时,若SCHEMA中存在同名relation,返回ERROR告警。 table_name 要创建的表名。 取值范围:字符串,要符合标识符命名规范。 column_name 可选。新表中要创建的字段名。如果没有指定字段名,那么新表的字段名和SELECT语句输入的字段名一致。 取值范围:字符串,要符合标识符命名规范。 ENGINE B模式下支持,仅语法适配,且只支持设置InnoDB,无实际效果。 WITH ( storage_parameter [= value] [, ... ] ) 这个子句为表或索引指定一个可选的存储参数。参数的详细说明如下所示。 FILLFACTOR 一个表的填充因子(fillfactor)是一个介于10和100之间的百分数。在Ustore存储引擎下,该值的默认值为92,在Astore存储引擎下默认值为100(完全填充)。如果指定了较小的填充因子,INSERT操作仅按照填充因子指定的百分率填充表页。每个页上的剩余空间将用于在该页上更新行,这就使得UPDATE有机会在同一页上放置同一条记录的新版本,这比把新版本放置在其他页上更有效。对于一个从不更新的表将填充因子设为100是最佳选择,但是对于频繁更新的表,选择较小的填充因子则更加合适。该参数只对行存表有效。 取值范围:10~100 ORIENTATION 取值范围: ROW(缺省值):表的数据将以行式存储。 COMPRESSION 指定表数据的压缩级别,它决定了表数据的压缩比以及压缩时间。一般来讲,压缩级别越高,压缩比也越大,压缩时间也越长;反之亦然。实际压缩比取决于加载的表数据的分布特征。 取值范围: 该参数仅支持列存压缩。 autovacuum_enabled 自动清理功能是否对该表启用。 取值范围:on/off 默认值:on autovacuum_vacuum_threshold 自动清理功能中,指定在该表中触发VACUUM所需的更新或删除的最小元组数(仅对Astore表生效)。 取值范围:0-2147483647 默认值:-1,缺省时与GUC参数autovacuum_vacuum_threshold一致。 autovacuum_analyze_threshold 自动清理功能中,指定在该表中触发ANALYZE所需的插入、更新或删除的最小元组数。 取值范围:0-2147483647 默认值:-1,缺省时与GUC参数autovacuum_analyze_threshold一致。 autovacuum_vacuum_scale_factor 自动清理功能中,指定在该表中触发VACUUM所需的插入、更新或删除元组的比例(仅对Astore表生效)。 取值范围:0.0-100.0 默认值:-1,缺省时与GUC参数autovacuum_vacuum_scale_factor一致。 autovacuum_analyze_scale_factor 自动清理功能中,指定在该表中触发ANALYZE所需的插入、更新或删除元组的比例。 取值范围:0.0-100.0 默认值:-1,缺省时与GUC参数autovacuum_analyze_scale_factor一致。 autovacuum_freeze_min_age 自动清理功能中,指定在该表参数指定了一个行版本的最小年龄,超过这个年龄的行才会被冻结。 取值范围:0-1000000000 默认值:-1,缺省时与GUC参数vacuum_freeze_min_age一致。 autovacuum_freeze_max_age 自动清理功能中,该表pg_class.relfrozenxid字段在超过多少个事务后,就会强制执行VACUUM操作。即使自动清理被禁用,系统也会启动AUTOVACUUM进程。清理操作还允许从pg_clog/子目录中删除旧文件(仅对ASTORE表生效)。 取值范围:100000-2000000000 默认值:-1,缺省时与GUC参数autovacuum_freeze_max_age一致。 autovacuum_freeze_table_age 自动清理功能中,该表被标记为不需要自动清理时,它将保持不变的时间。(仅对Astore表生效)。 取值范围:0-2000000000 默认值:-1,缺省时与GUC参数vacuum_freeze_table_age一致。 ON COMMIT { PRESERVE ROWS | DELETE ROWS } ON COMMIT选项决定在事务中执行创建临时表操作,当事务提交时,此临时表的后续操作。当前仅支持PRESERVE ROWS和DELETE ROWS选项。 PRESERVE ROWS(缺省值):提交时不对临时表执行任何操作,临时表及其表数据保持不变。 DELETE ROWS:提交时删除临时表中数据。 [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] 创建新表时,可以调用ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW给行存添加高级压缩策略。 AFTER n { day | month | year } OF NO MODIFICATION :表示n天/月/年没有修改的行。 ON ( EXPR ):行级表达式,用于判断行的冷热。 在ILM策略的ON(EXPR)行级表达式支持的函数中,有部分函数的输出可能会受兼容性参数影响。例如,upper函数在B兼容模式下设置b_format_version='5.7'和b_format_dev_version='s2'后,将无法转大写。 TABLESPACE tablespace_name 指定新表将要在tablespace_name表空间内创建。如果没有声明,将使用默认表空间。 AS query 一个SELECT VALUES命令或者一个运行预备好的SELECT或VALUES查询的EXECUTE命令。 [ WITH [ NO ] DATA ] 创建表时,是否也插入查询到的数据。默认是要数据,选择“NO”参数时,则不要数据。
  • 功能描述 根据查询结果创建表。 CREATE TABLE AS创建一个表并且用来自SELECT命令的结果填充该表。该表的字段和SELECT输出字段的名称及数据类型相关。不过用户可以通过明确地给出一个字段名称列表来覆盖SELECT输出字段的名称。 CREATE TABLE AS和创建视图有些相似,CREATE TABLE AS会创建一个新表并且只计算该查询一次用来将数据写入新表中。这个表之后将不会根据源表变化而改变。相反视图只要被查询,它的定义SELECT语句将会被重新计算。
  • 注意事项 通过此方式创建的新表只继承SELECT输出字段的名称及数据类型。 分区表不能采用此方式进行创建。 如果在建表过程中数据库系统发生故障,系统恢复后可能无法自动清除之前已创建的、大小非0的磁盘文件。此种情况出现概率小,不影响数据库系统的正常运行。 在为数据对象增加或者变更ILM策略的时候,如果追加了行级表达式,需要注意行表达式目前只支持白名单中列出的函数。具体白名单函数列表参考行表达式函数白名单。 在ILM策略的ON(EXPR)行级表达式支持的函数中,有部分函数的输出可能会受兼容性参数影响。例如,upper函数在B兼容模式下设置b_format_version='5.7'和b_format_dev_version='s2'后,将无法转大写。
  • 语法格式 CREATE [ [ GLOBAL | LOCAL ] [ TEMPORARY | TEMP ] | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name [ (column_name [, ...] ) ] [ { ENGINE [ = ] { InnoDB | 'InnoDB' | "InnoDB" } } [ [ , ] ... ] ] [ WITH ( {storage_parameter = value} [, ... ] ) ] [ ON COMMIT { PRESERVE ROWS | DELETE ROWS } ] [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] [ TABLESPACE tablespace_name ] AS query [ WITH [ NO ] DATA ];
共100000条
提示

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