华为云用户手册

  • 参数说明 role_name 现有角色名。 取值范围:已存在的角色名,如果角色名中包含大写字母则需要使用双引号括起来。 IN DATABASE database_name 表示修改角色在指定数据库上的参数。 SET configuration_parameter {{ TO | = } { value | DEFAULT } | FROM CURRENT} 设置角色的参数。ALTER ROLE中修改的会话参数只针对指定的角色,且在下一次该角色启动的会话中有效。 取值范围: configuration_parameter和value的取值请参见SET。 DEFAULT:表示清除configuration_parameter参数的值,configuration_parameter参数的值将继承本角色新产生的SESSION的默认值。 FROM CURRENT:取当前会话中的值设置为configuration_parameter参数的值。 RESET {configuration_parameter|ALL} 清除configuration_parameter参数的值。与SET configuration_parameter TO DEFAULT的效果相同。 取值范围:ALL表示清除所有参数的值。 ACCOUNT LOCK | ACCOUNT UNLOCK ACCOUNT LOCK:锁定账户,禁止登录数据库。 ACCOUNT UNLOCK:解锁账户,允许登录数据库。 PGUSER 当前版本不允许修改角色的PGUSER属性。 {PASSWORD|IDENTIFIED BY} 'password' 重置或修改用户密码。除了初始用户外其他管理员或普通用户修改自己的密码需要输入正确的旧密码。只有初始用户、三权分立关闭时的系统管理员(sysadmin)或拥有创建用户(CREATEROLE)权限的用户才可以重置普通用户密码,无需输入旧密码。初始用户可以重置系统管理员的密码,系统管理员不允许重置其他系统管理员的密码。应当使用单引号将用户密码括起来。 EXPIRED 设置密码失效。只有初始用户、系统管理员(sysadmin)或拥有创建用户(CREATEROLE)权限的用户才可以设置用户密码失效,其中系统管理员只有在三权分立关闭时,才可以设置自己或其他系统管理员密码失效。不允许设置初始用户密码失效。 密码失效的用户可以登录数据库但不能执行查询操作,只有修改密码或由管理员重置密码后才可以恢复正常查询操作。 其他参数请参见CREATE ROLE的参数说明。
  • 示例 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 --创建源表及触发表。 gaussdb=# CREATE TABLE test_trigger_src_tbl(id1 INT, id2 INT, id3 INT); gaussdb=# CREATE TABLE test_trigger_des_tbl(id1 INT, id2 INT, id3 INT); --创建DELETE触发器函数。 gaussdb=# CREATE OR REPLACE FUNCTION TRI_DELETE_FUNC() RETURNS TRIGGER AS $$ DECLARE BEGIN DELETE FROM test_trigger_des_tbl WHERE id1=OLD.id1; RETURN OLD; END $$ LANGUAGE plpgsql; --创建DELETE触发器。 gaussdb=# CREATE TRIGGER delete_trigger BEFORE DELETE ON test_trigger_src_tbl FOR EACH ROW EXECUTE PROCEDURE tri_delete_func(); --修改触发器的名称。 gaussdb=# ALTER TRIGGER delete_trigger ON test_trigger_src_tbl RENAME TO delete_trigger_renamed; --删除触发器。 gaussdb=# DROP TRIGGER delete_trigger_renamed ON test_trigger_src_tbl; --删除函数。 gaussdb=# DROP FUNCTION tri_delete_func; --删除源表及触发表。 gaussdb=# DROP TABLE test_trigger_src_tbl; gaussdb=# DROP TABLE test_trigger_des_tbl;
  • 参数说明 CONCURRENTLY 以不加锁的方式删除索引。删除索引时,一般会阻塞其他语句对该索引所依赖表的访问。加此关键字,可在删除过程中避免阻塞。 此选项只能指定一个索引的名称, 并且不支持CASCADE选项。 普通DROP INDEX命令可以在事务内执行,但是DROP INDEX CONCURRENTLY不可以在事务内执行。 IF EXISTS 如果指定的索引不存在,则发出一个notice而不是抛出一个error。 index_name 要删除的索引名。 取值范围:已存在的索引。 CASCADE | RESTRICT CASCADE:表示允许级联删除依赖于该索引的对象。 RESTRICT:表示有依赖于此索引的对象存在时,该索引无法被删除。此选项为缺省值。
  • 示例 --创建表。 gaussdb=# CREATE TABLE test1_index (id INT, name VARCHAR(20)); --创建索引。 gaussdb=# CREATE INDEX idx_test1 (id); --删除索引。 gaussdb=# DROP INDEX IF EXISTS idx_test1 CASCADE; --删除表。 gaussdb=# DROP TABLE test1_index;
  • resilience_escape_user_permissions 参数说明:设置用户权限,以逗号分隔,可以设置多个,设置多个则表示多个特殊权限的用户都支持逃生能力,只设置一个则只针对一个特权用户进行逃生。sysadmin控制sysadmin用户的作业是否会被该逃生功能进行cancel处理;monadmin控制monadmin用户的作业是否会被该逃生功能进行cancel处理;默认为空,表示关闭sysadmin和monadmin用户的逃生能力。当前取值仅支持sysadmin,monadmin或者空字符串。该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串,长度大于0。 该参数目前只支持三个取值:sysadmin,monadmin或'',这几个值的具体含义如下: sysadmin:控制sysadmin用户的作业是否会被该逃生功能进行cancel处理。 monadmin:控制monadmin用户的作业是否会被该逃生功能进行cancel处理。 '':关闭sysadmin和monadmin用户的逃生能力。 默认值:'',关闭sysadmin和monadmin用户的逃生能力。 示例: resilience_escape_user_permissions = 'sysadmin,monadmin' 表示同时开启sysadmin和monadmin用户的逃生功能。 该参数可以同时设置多个值,以逗号分隔,例如resilience_escape_user_permissions = 'sysadmin,monadmin',也可以只设置一个值,例如resilience_escape_user_permissions = 'monadmin'。 若该参数多次设置,以最新的设置生效。 该参数设置为取值范围中的任意值,普通用户都支持该逃生功能。 当用户同时具有sysadmin和monadmin时,resilience_escape_user_permissions必须要同时设置'sysadmin,monadmin'才能触发该用户的逃生功能。
  • max_stack_depth 参数说明:设置 GaussDB 执行堆栈的最大安全深度。需要这个安全界限是因为在服务器里,并非所有程序都检查了堆栈深度,只是在可能递规的过程,比如表达式计算这样的过程里面才进行检查。 参数类型:整型 参数单位:KB 取值范围:100~INT_MAX 默认值: (ulimit -s的设置)- 640 KB的值大于等于2MB时,此参数的默认值为2MB。 (ulimit -s的设置)- 640 KB的值小于2MB时,此参数的默认值为(ulimit -s的设置)- 640 KB。 设置方式:该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 设置原则: 数据库需要预留640KB堆栈深度,因此,此参数的最佳设置是等于操作系统内核允许的最大值(就是ulimit -s的设置)- 640KB。 数据库未运行前设置的该参数值大于(ulimit -s的设置)- 640 KB时会导致数据库启动失败;数据库运行阶段设置该参数值大于(ulimit -s的设置)- 640 KB时该值不生效。 若(ulimit -s的设置)-640KB小于此参数取值范围的最小值时会导致数据库启动失败。 如果设置此参数的值大于实际的内核限制,则一个正在运行的递归函数可能会导致一个独立的服务器进程崩溃。 因为并非所有的操作都能够检测,所以建议用户在此设置一个明确的值。 默认值最大为2MB,这个值相对比较小,不容易导致系统崩溃。
  • local_syscache_threshold 参数说明:系统表cache在单个session缓存的大小。如果enable_global_plancache已打开,为保证GPC生效,local_syscache_threshold设置值小于16MB时不会生效,最小为16MB。如果enable_global_syscache和enable_thread_pool打开,该参数描述的是当前线程和绑定到当前线程上的session缓存的总大小。 参数类型:整型 参数单位:kB 取值范围: 方式一:设置为不带单位的整数,整数范围为1*1024~512*1024。建议设置为1024的整数倍。例如设置为2048,表示2048kB。 方式二:设置为带单位的值,范围为1*1024kB~512*1024kB。例如设置为32MB,表示32MB的大小。单位仅限于“kB”、“MB”和“GB”。 默认值: 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内存)
  • 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,否则会设置不生效。
  • verify_log_buffers 参数说明:控制verifyLog buffer大小,只在page_version_check为persistence情况下生效。verifyLog buffer内存按页面管理,每页8kB。 参数类型:整型 参数单位:页(8kB) 取值范围:4 ~ 262144 默认值:4 (32kB) 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。例如,取值131072表示verify_log_buffers为131072 * 8 kB = 1GB;取值131072kB表示verify_log_buffers为131072kB。取值如果带单位,必须为kB、MB、GB,且必须为8kB整数倍。 设置建议:根据系统硬件规格,进行相应的设置。 1GB(196核CPU/1536G内存,128核CPU/1024G内存,104核CPU/1024G内存,96核CPU/1024G内存,96核CPU/768G内存,80核CPU/640G内存,64核CPU/512G内存,60核CPU/480G内存,32核CPU/256G内存);512MB(16核CPU/128G内存);256MB(8核CPU/64G内存);128MB(4核CPU/32G内存);16MB(4核CPU/16G内存)。
  • max_prepared_transactions 参数说明:设置可以同时处于“预备”状态的事务的最大数目。增加此参数的值会使GaussDB比系统默认设置需要更多的System V共享内存。 当GaussDB部署为主备双机时,在备机上此参数的设置必须要高于或等于主机上的,否则无法在备机上进行查询操作。 参数类型:整型 参数单位:无 取值范围:0 ~ 262143 默认值: 200(196核CPU/1536G内存,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内存);0(4核CPU/16G内存)
  • work_mem 参数说明:设置内部排序操作和Hash表在开始写入临时磁盘文件之前使用的内存大小。ORDER BY,DISTINCT和merge joins都要用到排序操作。Hash表在散列连接、散列为基础的聚集、散列为基础的IN子查询处理中都要用到。 对于复杂的查询,可能会同时并发运行好几个排序或者散列操作,每个都可以使用此参数所声明的内存量,不足时会使用临时文件。同样,好几个正在运行的会话可能会同时进行排序操作。因此使用的总内存可能是work_mem的好几倍。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,64~2147483647,单位为KB。 默认值: 280MB(196核CPU/1536G内存);256MB(128核CPU/1024G内存,104核CPU/1024G内存,96核CPU/1024G内存,96核CPU/768G内存);128MB(80核CPU/640G内存,64核CPU/512G内存,60核CPU/480G内存,32核CPU/256G内存,16核CPU/128G内存);64MB(8核CPU/64G内存);32MB(4核CPU/32G内存);16MB(4核CPU/16G内存) 设置建议: 依据查询特点和并发来确定,一旦work_mem限定的物理内存不够,算子运算数据将写入临时表空间,带来5-10倍的性能下降,查询响应时间从秒级下降到分钟级。 对于串行无并发的复杂查询场景,平均每个查询有5-10关联操作,建议work_mem=50%内存/10。 对于串行无并发的简单查询场景,平均每个查询有2-5个关联操作,建议work_mem=50%内存/5。 对于并发场景,建议work_mem=串行下的work_mem/物理并发数。 对于BitmapScan的哈希表也会受到work_mem的限制,但不会被严格管控下盘。完全Lossify的情况下,哈希表每占用1MB的内存,对应一次BitmapHeapScan的16GB的页面(Ustore为32GB),达到work_mem上限后,会按此比例随数据访问量线性增长。
  • page_version_recycler_thread_num 参数说明:控制回收和校验页面版本信息的线程数量,只在page_version_check非OFF情况下生效。 参数类型:整型 参数单位:个 取值范围:0 ~ 16 page_version_check参数值为memory时: 0:根据page_version_partitions自动计算,page_version_recycler_thread_num=page_version_partitions/16384。若自动计算结果大于4,则强制设置为4。 非0:将强制使用手动配置的数值。 不允许大于page_version_partitions,如果大于,则会被强制设置为page_version_partitions的值。 page_version_check参数值为persistence时: 小于2时将设置为2,大于等于2时强制使用手动配置的参数。 默认值:0 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:建议设置为默认值0。
  • temp_buffers 参数说明:设置每个数据库会话使用的LOCAL临时缓冲区的大小。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 在每个会话的第一次使用临时表之前可以改变temp_buffers的值,之后的设置将是无效的。 一个会话将按照temp_buffers给出的限制,根据需要分配临时缓冲区。如果在一个并不需要大量临时缓冲区的会话里设置一个大的数值,其开销只是一个缓冲区描述符的大小。当缓冲区被使用,就会额外消耗8192字节。 取值范围:整型,100~1073741823,单位为8KB。 默认值:1MB
  • 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中调大该值。
  • enable_memory_limit 参数说明:启用逻辑内存管理模块。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示启用逻辑内存管理模块。 off表示不启用逻辑内存管理模块。 默认值:on 由于存在固定开销,即shared_buffers和元数据(大约200MB),若max_process_memory减去固定开销小于2GB,GaussDB强制把enable_memory_limit设置为off。其中元数据是GaussDB内部使用的内存,和部分并发参数,如max_connections,thread_pool_attr,max_prepared_transactions等参数相关。 当该值为off时,不对数据库使用的内存做限制,在大并发或者复杂查询时,使用内存过多,可能导致操作系统OOM问题。
  • max_process_memory 参数说明:设置一个数据库节点可用的最大物理内存。 参数类型:整型 参数单位:kB 取值范围:2097152 ~ 2147483647 默认值: 1400GB(196核CPU/1536G内存);900GB(128核CPU/1024G内存,104核CPU/1024G内存,96核CPU/1024G内存);680GB(96核CPU/768G内存);560GB(80核CPU/640G内存);450GB(64核CPU/512G内存);420GB(60核CPU/480G内存);200GB(32核CPU/256G内存);90GB(16核CPU/128G内存);40GB(8核CPU/64G内存);20GB(4核CPU/32G内存);10GB(4核CPU/16G内存) 当该值设置不合理,即大于服务器物理内存,可能导致操作系统OOM问题。
  • page_missing_dirty_check 参数说明:页面漏置脏校验的功能开关,检测被修改页面是否忘记置脏。page_missing_dirty_check受控于page_version_check,page_version_check如果设置为off,则page_missing_dirty_check设置on不生效。 参数类型:布尔型 参数单位:无 取值范围: on:表示进行页面漏置脏校验。 off:表示不进行页面漏置脏校验。 默认值:off 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:建议在测试场景中开启此开关,能够最大限度在非生产环境中排查出漏置脏代码BUG;在现网时默认关闭页面漏置脏,避免带来额外开销,进而影响性能。
  • page_version_check 参数说明:基于页面版本信息,进行底层存储故障校验和页面漏置脏校验的功能总开关,page_version_check是一个三级开关。其中,底层存储故障校验功能是检测从底层存储读取的页面是否为正确版本,防止磁盘掉电等故障情况导致的页面版本信息丢失;页面漏置脏校验功能是检测被修改页面是否忘记置脏,它有一个单独开关page_missing_dirty_check进行控制。 参数类型:枚举类型 参数单位:无 取值范围: off:表示完全关闭底层存储故障校验和页面漏置脏校验的功能开关。 memory:表示打开纯内存态的页面版本校验功能(即底层存储故障校验和页面漏置脏校验),页面版本信息只缓存在内存当中,重启丢失。 persistence:表示打开持久态的页面版本校验功能(即底层存储故障校验和页面漏置脏校验),页面版本信息会持久化到文件中,重启不丢失。 默认值:memory 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:根据不同机器规格,建议如下设置:off(4核CPU16GB内存、4核CPU32GB内存、8核CPU/64GB内存);memory(16核CPU/128GB内存、32核CPU/256GB内存、60核CPU/480GB内存、64核CPU/512GB内存、72核CPU/576GB内存、80核CPU/640GB内存、96核CPU/768GB内存、96核CPU/1024GB内存、104核CPU/1024GB内存、128核CPU/1024GB内存、196核CPU/1536GB内存)。开关设置为memory,对性能有一定影响,机器规格越小,影响越大(参考:16核CPU/128GB内存,TPCC模型影响7%左右)。在系统需要频繁重启的场景下,建议设置为persistence,能够确保页面版本信息不丢失,但会进一步影响性能。
  • page_version_partitions 参数说明:内存中缓存页面版本信息的哈希表分区数量,分区数量直接影响哈希查询效率和哈希冲突概率。 参数类型:整型 参数单位:个 取值范围:0 ~ 2097152 0:page_version_check非OFF情况下,根据page_version_max_num自动计算,page_version_partitions=page_version_max_num/512。若自动计算结果小于4,则强制设置为4。 非0:将强制使用手动配置的数值。page_version_check非OFF情况下,最小值为4。如果取值小于4,则会被强制设置为4。 默认值:0 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:对性能较高要求的情况,建议手动设置为page_version_max_num的256分之一到1024分之一左右。
  • page_version_max_num 参数说明:内存中所能缓存的页面版本信息的最大数量,在page_version_check非OFF情况下生效。合理的数量应该是shared_buffers数量的2倍到4倍。每个page_version内存占用36字节,请注意内存使用量。 参数类型:整型 参数单位:个 取值范围:0 ~ 2147483647。 0:page_version_check非OFF情况下,根据shared_buffers大小自动计算,page_version_max_num=shared_buffers*2。例如,32M shared_buffers对应4096个buffer,所以页面版本信息数量设置为8192个。 非0:将强制使用手动配置的数值。 page_version_check非OFF情况下,不允许小于page_version_partitions的16倍,如果小于,则会被强制设置为page_version_partitions*16。 默认值:0 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:对性能有较高要求且内存足够的情况,建议手动设置为shared_buffers数量的4倍且与page_version_partitions的比值范围为[256, 1024]。
  • 示例 示例1: --建表并插入数据。 gaussdb=# CREATE TABLE tbl_test(c1 int); gaussdb=# INSERT INTO tbl_test VALUES (generate_series(1,20)); --建立一个名为cursor1的游标。 gaussdb=# BEGIN; gaussdb=# CURSOR cursor1 FOR SELECT * FROM tbl_test ORDER BY 1; --使用FETCH命令检索3行数据。 gaussdb=# FETCH FORWARD 3 FROM cursor1; c1 ---- 1 2 3 (3 rows) --使用MOVE命令使游标向后移动2行,不返回结果。 gaussdb=# MOVE FORWARD 2 FROM cursor1; MOVE 2 --使用FETCH命令检索两行数据。 gaussdb=# FETCH FORWARD 2 FROM cursor1; c1 ---- 6 7 (2 rows) --关闭游标并结束事务。 gaussdb=# CLOSE cursor1; gaussdb=# END; 示例2:带WITH HOLD属性的游标 --建立一个名为cursor2的WITH HOLD游标。 gaussdb=# BEGIN; gaussdb=# CURSOR cursor2 WITH HOLD FOR SELECT * FROM tbl_test ORDER BY 1; --使用FETCH命令检索3行数据。 gaussdb=# FETCH FORWARD 3 FROM cursor2; c1 ---- 1 2 3 (3 rows) --和普通的游标不一样,结束事务后,带WITH HOLD属性的游标依然可以使用。 gaussdb=# END; gaussdb=# FETCH FORWARD 2 FROM cursor2; c1 ---- 4 5 (2 rows) --关闭游标。 gaussdb=# CLOSE cursor2; --删除。 gaussdb=# DROP TABLE tbl_test;
  • 参数说明 cursor_name 将要创建的游标名。 取值范围:遵循数据库对象命名规范。 BINARY 指明游标以二进制而不是文本格式返回数据。 NO SCROLL 声明游标检索数据行的方式。 NO SCROLL:声明该游标不能用于以倒序的方式检索数据行。 未声明:根据执行计划的不同,自动判断该游标是否可以用于以倒序的方式检索数据行。 在cmdsql中,只支持添加NO SCROLL关键字或者不添加滚动选项,不支持添加SCROLL关键字。 在存储过程中,支持添加NO SCROLL、SCROLL关键字,或者不添加滚动选项。 显式游标中,只有声明为NO SCROLL的游标可以并发执行,建议将不需要用到倒序检索数据行方式的游标设置为NO SCROLL。 WITH HOLD | WITHOUT HOLD 声明当创建游标的事务结束后,游标是否能继续使用。 WITH HOLD:声明该游标在创建它的事务结束后仍可继续使用。 WITHOUT HOLD:声明该游标在创建它的事务之外不能再继续使用,此游标将在事务结束时被自动关闭。 如果不指定WITH HOLD或WITHOUT HOLD,默认行为是WITHOUT HOLD。 query 使用SELECT或VALUES子句指定游标返回的行。 取值范围:SELECT或VALUES子句。
  • 注意事项 游标命令只能在事务块里使用。 通常游标和SELECT一样返回文本格式。因为数据在系统内部是用二进制格式存储的,系统必须对数据做一定转换以生成文本格式。一旦数据是以文本形式返回,客户端应用需要把它们转换成二进制进行操作。使用FETCH语句,游标可以返回文本或二进制格式。 应该小心使用二进制游标。文本格式一般都比对应的二进制格式占用的存储空间大。二进制游标返回内部二进制形态的数据,可能更易于操作。如果想以文本方式显示数据,则以文本方式检索会为用户节约很多客户端的工作。比如,如果查询从某个整数列返回1,在缺省的游标里将获得一个字符串1,但在二进制游标里将得到一个4字节的包含该数值内部形式的数值(大端顺序)。 静态游标支持定义参数,参数支持默认值。但是参数默认值不能应用PACKAGE外的变量,如果需要使用,可以在包内定义一个变量,再将包外变量赋值给该变量,使用该变量作为默认值。 游标的定义会产生查询对象,或存储过程暂不支持建立对查询对象的依赖关系。
  • support_binary_copy_version 参数说明:COPY FROM的BINARY模式下导出数据时,是否包含当前数据库服务端的编码信息。 参数类型:字符串 参数单位:无 取值范围:''、header_encoding。 默认值:header_encoding 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 设置建议:无特殊情况时建议配置为默认取值,仅做前向兼容时需另行配置为空。 表1 兼容性配置项 兼容性配置项 兼容性行为控制 header_encoding 使用copy from的binary模式进行导出时,二进制文件头中包含当前数据库服务端的编码信息。 空值 做前向兼容处理时配置,以原二进制格式进行导出。
  • copy_special_character_version 参数说明:控制COPY导入导出数据时对非法编码的字符处理的相关表现。 参数类型:字符串 参数单位:无 取值范围:''、no_error、per_byte。 默认值:'' 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 使用gsql连接数据库,使用set方式设置时不区分大小写,使用gs_guc设置时仅能设置小写。 设置建议:无 表2 兼容性配置项 兼容性配置项 兼容性行为控制 no_error 控制使用COPY导入数据文件时,当文件编码与服务端编码相同时,对数据文件中不满足编码信息的数据进行容错处理,不报错按照原编码插入表中。 per_byte 控制使用COPY导出文本格式的数据文件时,对文件编码为GBK或ZHS16GBK文件的处理方式。 设置per_byte后,在导出数据时一次导出一个字节数据,否则按照一次导出两个字节的数据(GBK编码下一个字符占两个字节)。 空值 参数默认配置,不影响任何功能使用,做前向兼容处理。即COPY存在非法编码时报错。 为保证导入表中数据的合法性,COPY中需要对数据编码的合法性校验。当开启此参数后会屏蔽非法校验操作并导致字段内出现非法字符,请酌情考虑开启此参数。 当前屏蔽数据编码校验仅在服务端编码与数据编码保持一致时生效,即copy_special_character_version='no_error'时,数据库服务端编码须与数据文件编码保持一致,否则会报错;未指定数据编码时数据编码默认为客户端编码。 如需记录非法编码字段,建议使用COPY语法中的log errors或log errors data参数。 二进制模式下copy_special_character_version='no_error',仅对TEXT、CHAR、VARCHAR、NVARCHAR2、CLOB类型的字段生效。 此参数仅在UTF-8、GB18030、GB18030_2022、ZHS16GBK、LATIN1字符集数据库下使用生效。 客户端编码与服务端编码一致都为GBK或ZHS16GBK时,当数据库内存在非法编码的数据,如果不设置copy_special_character_version为per_byte,导出的数据文件中可能会存在预期外的数据。 设置copy_special_character_version值为no_error时无法与COPY内COMPATIABLE_ILLEGAL_CHARS参数同时使用。
  • enable_copy_server_files 参数说明:是否开启copy服务器端文件的权限。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示开启copy服务端文件的权限。 off表示不开启copy服务端文件的权限。 默认值:off 当参数enable_copy_server_files关闭时,只允许初始用户执行COPY FROM FILENAME或COPY TO FILENAME命令,当参数enable_copy_server_files打开,允许具有SYSADMIN权限的用户或继承了内置角色gs_role_copy_files权限的用户执行。
  • safe_data_path 参数说明:设置初始用户以外的路径前缀限制,目前包括copy和高级包路径限制。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串(小于4096个字符) 默认值:NULL 如果safe_data_path目录下存在软链接文件,则会按软链接实际指向的文件路径进行处理,实际路径如果不在safe_data_path下会报错处理。 如果safe_data_path目录下存在硬链接文件,则可以正常使用。为安全起见,请谨慎使用硬链接文件,切勿在safe_data_path目录下创建指向目录以外的硬链接文件,并确保safe_data_path目录权限最小化。
  • a_format_load_with_constraints_violation 参数说明:gs_loader导入数据支持约束冲突时,是否开启不回滚功能。 参数类型:字符串 参数单位:无 取值范围: s1:表示gs_loader支持约束冲突时,开启不回滚功能。 '':表示gs_loader支持约束冲突时,不开启不回滚功能。 默认值:'' 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:无。
  • 示例 强制使用Custom Plan: 1 2 3 create table t (a int, b int, c int); prepare p as select /*+ use_cplan */ * from t where a = $1; explain execute p(1); 计划如下,可以看到过滤条件为入参的实际值,即此计划为Custom Plan。 强制使用Generic Plan: 1 2 3 deallocate p; prepare p as select /*+ use_gplan */ * from t where a = $1; explain execute p(1); 计划如下,可以看到过滤条件为待填充的入参,即此计划为Generic Plan。
  • 示例 重命名视图。 --创建test_tbl表。 gaussdb=# CREATE TABLE test_tb1(col1 INT,col2 INT); --创建视图。 gaussdb=# CREATE VIEW abc AS SELECT * FROM test_tb1; --重命名视图。 gaussdb=# ALTER VIEW IF EXISTS abc RENAME TO test_v1; --查看视图。 gaussdb=# \dv List of relations Schema | Name | Type | Owner | Storage --------+---------+------+-------+--------- public | test_v1 | view | omm | (1 row) 修改视图所有者。 --创建用户。 gaussdb=# CREATE ROLE role_test PASSWORD '********'; --修改视图所有者。 gaussdb=# ALTER VIEW IF EXISTS test_v1 OWNER TO role_test; --查看视图信息。 gaussdb=# \dv List of relations Schema | Name | Type | Owner | Storage --------+---------+------+-----------+--------- public | test_v1 | view | role_test | (1 row) 设置视图所属模式。 --创建模式。 gaussdb=# CREATE SCHEMA tcpds; --修改视图所属模式。 gaussdb=# ALTER VIEW test_v1 SET SCHEMA tcpds; --查看视图信息。 gaussdb=# \dv tcpds.test_v1; List of relations Schema | Name | Type | Owner | Storage --------+---------+------+-----------+--------- tcpds | test_v1 | view | role_test | (1 row) 设置与重置视图选项。 --修改视图选项。 gaussdb=# ALTER VIEW tcpds.test_v1 SET (security_barrier = TRUE); ALTER VIEW --查看。 gaussdb=# \dv tcpds.test_v1; List of relations Schema | Name | Type | Owner | Storage --------+---------+------+--------+------------------------- tcpds | test_v1 | view | chenxi | {security_barrier=true} (1 row) --修改check_option选项。 gaussdb=# ALTER VIEW tcpds.test_v1 SET (check_option = 'LOCAL'); ALTER VIEW --查看。 gaussdb=# \dv tcpds.test_v1; List of relations Schema | Name | Type | Owner | Storage --------+---------+------+--------+-------------------------------------------- tcpds | test_v1 | view | chenxi | {security_barrier=true,check_option=LOCAL} (1 row) --重置视图选项。 gaussdb=# ALTER VIEW tcpds.test_v1 RESET (security_barrier); ALTER VIEW gaussdb=# ALTER VIEW tcpds.test_v1 RESET (check_option); ALTER VIEW --查看。 gaussdb=# \dv tcpds.test_v1; List of relations Schema | Name | Type | Owner | Storage --------+---------+------+--------+--------- tcpds | test_v1 | view | chenxi | (1 row) --删除视图test_v1。 gaussdb=# DROP VIEW tcpds.test_v1; DROP VIEW --删除表test_tb1。 gaussdb=# DROP TABLE test_tb1; DROP TABLE --删除用户。 gaussdb=# DROP ROLE role_test; DROP ROLE --删除schema。 gaussdb=# DROP SCHEMA tcpds; DROP SCHEMA
共100000条