华为云用户手册

  • Btree索引内部功能函数 cbtreebuild cbtreecanreturn cbtreecostestimate cbtreegetbitmap cbtreegettuple btbeginscan btbuild btbuildempty btbulkdelete btcanreturn btcostestimate btendscan btfloat4sortsupport btfloat8sortsupport btgetbitmap btgettuple btinsert btint2sortsupport btint4sortsupport btint8sortsupport btmarkpos btmerge btnamesortsupport btrescan btrestrpos bttextsortsupport btvacuumcleanup cbtreeoptions
  • 选择率计算函数 areajoinsel areasel arraycontjoinsel arraycontsel contjoinsel contsel eqjoinsel eqsel iclikejoinsel iclikesel icnlikejoinsel icnlikesel icregexeqjoinsel icregexeqsel icregexnejoinsel icregexnesel likejoinsel likesel neqjoinsel neqsel nlikejoinsel nlikesel positionjoinsel positionsel regexeqjoinsel regexeqsel regexnejoinsel regexnesel scalargtjoinsel scalargtsel scalarltjoinsel scalarltsel tsmatchjoinsel tsmatchsel -
  • 内部类型处理函数 abstimerecv euc_jis_2004_to_utf8 int2recv line_recv oidvectorrecv_extend tidrecv utf8_to_koi8u anyarray_recv euc_jp_to_mic int2vectorrecv lseg_recv path_recv time_recv utf8_to_shift_jis_2004 array_recv euc_jp_to_sjis int4recv macaddr_recv pg_node_tree_recv time_transform utf8_to_sjis ascii_to_mic euc_jp_to_utf8 int8recv mic_to_ascii point_recv timestamp_recv utf8_to_uhc ascii_to_utf8 euc_kr_to_mic internal_out mic_to_big5 poly_recv timestamp_transform utf8_to_win big5_to_euc_tw euc_kr_to_utf8 interval_recv mic_to_euc_cn pound_nexttoken timestamptz_recv uuid_recv big5_to_mic euc_tw_to_big5 interval_transform mic_to_euc_jp prsd_nexttoken timetz_recv varbit_recv big5_to_utf8 euc_tw_to_mic iso_to_koi8r mic_to_euc_kr range_recv tintervalrecv varbit_transform bit_recv euc_tw_to_utf8 iso_to_mic mic_to_euc_tw rawrecv tsqueryrecv varchar_transform boolrecv float4recv iso_to_win1251 mic_to_iso record_recv tsvectorrecv varcharrecv box_recv float8recv iso_to_win866 mic_to_koi8r regclassrecv txid_snapshot_recv void_recv bpcharrecv gb18030_to_utf8 iso8859_1_to_utf8 mic_to_latin1 regconfigrecv uhc_to_utf8 win_to_utf8 btoidsortsupport gbk_to_utf8 iso8859_to_utf8 mic_to_latin2 regdictionaryrecv unknownrecv win1250_to_latin2 bytearecv - johab_to_utf8 mic_to_latin3 regoperatorrecv utf8_to_ascii win1250_to_mic byteawithoutorderwithequalcolrecv gtsvector_compress json_recv mic_to_latin4 regoperrecv utf8_to_big5 win1251_to_iso cash_recv gtsvector_consistent koi8r_to_iso mic_to_sjis regprocedurerecv utf8_to_euc_cn win1251_to_koi8r charrecv gtsvector_decompress koi8r_to_mic mic_to_win1250 regprocrecv utf8_to_euc_jis_2004 win1251_to_mic cidr_recv gtsvector_penalty koi8r_to_utf8 mic_to_win1251 regtyperecv utf8_to_euc_jp win1251_to_win866 cidrecv gtsvector_picksplit koi8r_to_win1251 mic_to_win866 reltimerecv utf8_to_euc_kr win866_to_iso circle_recv gtsvector_same koi8r_to_win866 namerecv shift_jis_2004_to_euc_jis_2004 utf8_to_euc_tw win866_to_koi8r cstring_recv gtsvector_union koi8u_to_utf8 ngram_nexttoken shift_jis_2004_to_utf8 utf8_to_gb18030 win866_to_mic date_recv hll_recv latin1_to_mic numeric_recv sjis_to_euc_jp utf8_to_gbk win866_to_win1251 domain_recv hll_trans_recv latin2_to_mic numeric_transform sjis_to_mic utf8_to_iso8859 xidrecv euc_cn_to_mic - latin2_to_win1250 nvarchar2recv sjis_to_utf8 utf8_to_iso8859_1 xidrecv4 euc_cn_to_utf8 inet_recv latin3_to_mic oidrecv smalldatetime_recv utf8_to_johab xml_recv euc_jis_2004_to_shift_jis_2004 int1recv latin4_to_mic oidvectorrecv textrecv utf8_to_koi8r - i16toi1 int16 int16_bool int16eq int16div int16ge int16gt int16in int16le int16lt int16mi int16mul int16ne int16out int16pl int16recv int16send numeric_bool int2vectorin_extend int2vectorout_extend int2vectorrecv_extend int2vectorsend_extend tdigest_in tdigest_merge tdigest_merge_to_one tdigest_mergep tdigest_out - anyset_out btint2setcmp btint4setcmp btint8setcmp btsetcmp btsetint2cmp btsetint4cmp btsetint8cmp btsetsortsupport float4 float8 hashsetint hashsettext int2 int2seteq int2setge int2setgt int2setle int2setlt int2setne int4 int4seteq int4setge int4setgt int4setle int4setlt int4setne int8 int8seteq int8setge int8setgt int8setle int8setlt int8setne set set_in set_out set_recv set_send seteq setge setgt setint2eq setint2ge setint2gt setint2le setint2lt setint2ne setint4eq setint4ge setint4gt setint4le setint4lt setint4ne setint8eq setint8ge setint8gt setint8le setint8lt setint8ne setle setlt setne settexteq settextge settextgt settextle settextlt settextne settobpchar settonumber settonvarchar2 settotext settovarchar textseteq textsetge textsetgt textsetle textsetlt textsetne gb18030_2022_to_utf8 utf8_to_gb18030_2022 array_to_nesttable array_to_indexby_int_table nesttable_to_array indexbytableint_to_array array_to_nesttable array_to_indexby_int_table zhs16gbk_to_utf8 utf8_to_zhs16gbk zhs16gbk_to_gb18030 gb18030_to_zhs16gbk zhs16gbk_to_gb18030_2022 gb18030_2022_to_zhs16gbk - - - -
  • 监控数据库连接 连接监控功能支持监控JDBC端以下指标:应用开启连接的次数、关闭连接的次数、连接异常断开的次数、数据库访问量、客户端机器CPU的使用率、内存的使用率、上下行传输速率、应用端到数据库链路之间的网络时延、抖动、丢包率。此示例将演示如何使用JDBC驱动的连接监控功能。 代码运行的前提条件:根据实际情况添加gaussdbjdbc.jar包(例如用户使用IDE执行代码,则需要在本地IDE添加gaussdbjdbc.jar包)。 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。 // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 // $ip、$port、database需要用户自行修改。 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DBMonitorTest { public static void main(String[] args){ String driver = "com.huawei.gaussdb.jdbc.Driver"; String username = System.getenv("EXAMPLE_USERNAME_ENV"); String passwd = System.getenv("EXAMPLE_PASSWORD_ENV"); String sourceURL = "jdbc:gaussdb://$ip:$port/database?dbMonitor=true&loggerLevel=debug&loggerFile=dbMonitor.log"; try { // 加载数据库驱动。 Class.forName(driver).newInstance(); } catch (Exception e) { e.printStackTrace(); } Connection conn = null; Statement statement = null; try { //以非加密方式连接数据库。 conn = DriverManager.getConnection(sourceURL, username, passwd); System.out.println("Connection succeed!"); // 创建表。 statement = conn.createStatement(); String createTableQuery = "CREATE TABLE IF NOT EXISTS mytable (id INT PRIMARY KEY, name VARCHAR(50))"; statement.executeUpdate(createTableQuery); // 插入数据。 String insertQuery = "INSERT INTO mytable (id, name) VALUES (1, 'John')"; statement.executeUpdate(insertQuery); // 查询数据。 String selectQuery = "SELECT * FROM mytable "; ResultSet resultSet = statement.executeQuery(selectQuery); while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); System.out.println("id: " + id + ", name: " + name); } // 删除表。 String dropTableQuery = "DROP TABLE IF EXISTS mytable"; statement.executeUpdate(dropTableQuery); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (statement != null) { statement.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } try { Thread.sleep(10000); } catch (InterruptedException e) { throw new RuntimeException(e); } } } 上述示例的运行结果为: Connection succeed! id: 1, name: John 在日志文件dbMonitor.log中可以看到输出的连接监控信息,具体包括: Nov 23, 2023 10:30:54 AM com.huawei.gaussdb.jdbc.qos.DataProcess saveQosResult FINE: { "Destination host:port" : "ip:port",--服务器的IP和端口。 "Delay" : "1.00 ms",--网络时延。 "Jitter" : "0.04ms",--网络抖动。 "Loss" : "0%",--网络丢包率。 "DownloadSpeed" : "0.395Mbps",--网络下行速率。 "UpLoadSpeed" : "0.498Mbps"--网络上行速率。 } Nov 23, 2023 10:30:56 AM com.huawei.gaussdb.jdbc.CollectDBData$CollectDBThread run FINE: { "openCount": "1",--应用开启数据库连接的次数。 "closeCount": "1",--应用关闭数据库连接的次数。 "abortedCount": "0",--连接异常断开的次数。 "visitCount": "12",--应用对数据库的访问量。 "cpuUsage": "20.39%",--客户端机器CPU的使用率。 "memoryUsage": "98.32%"--客户端机器内存的使用率。 } 父主题: 典型应用开发示例
  • PG_USER_STATUS PG_USER_STATUS系统表存储访问数据库用户的状态信息。需要有系统管理员权限才可以访问此系统表 表1 PG_USER_STATUS字段 名称 类型 描述 oid oid 行标识符(隐含字段,必须明确选择)。 roloid oid 角色的标识。 failcount integer 尝试失败次数。 locktime timestamp with time zone 默认显示角色的创建日期,如果角色被管理员锁定,或者登录失败次数超过阈值被锁定,则显示角色被锁定的日期。 rolstatus smallint 角色的状态。 0:正常状态。 1:由于登录失败次数超过阈值被锁定了一定的时间。 2:被管理员锁定。 3:登录失败次数超过阈值,但不锁定账户。 permspace bigint 角色已经使用的永久表存储空间大小。 tempspace bigint 角色已经使用的临时表存储空间大小。 passwordexpired smallint 密码是否失效。 0:密码有效。 1:密码失效。 父主题: 用户和权限管理
  • PG_TOTAL_USER_RESOURCE_INFO PG_TOTAL_USER_RESOURCE_INFO视图显示所有用户的资源使用情况,需要使用管理员用户进行查询。此视图在GUC参数use_workload_manager为on时才有效。其中,IO相关监控项在参数enable_logical_io_statistics为on时才有效。 表1 PG_TOTAL_USER_RESOURCE_INFO字段 名称 类型 描述 username name 用户名。 used_memory integer 正在使用的内存大小,单位MB。 total_memory integer 可以使用的内存大小,单位MB。值为0表示未限制最大可用内存,其限制取决于数据库最大可用内存。 used_cpu double precision 正在使用的CPU核数(仅统计复杂作业CPU使用 情况,且该值为相关控制组的CPU使用统计值)。 total_cpu integer 在该机器节点上,用户关联控制组的CPU核数总和。 used_space bigint 已使用的永久表存储空间大小,单位KB。 total_space bigint 可使用的永久表存储空间大小,单位KB,值为-1表示未限制最大存储空间。 used_temp_space bigint 已使用的临时空间大小,单位KB。 total_temp_space bigint 可使用的临时空间总大小,单位KB,值为-1表示未限制。 used_spill_space bigint 已使用的算子落盘空间大小,单位KB。 total_spill_space bigint 可使用的算子落盘空间总大小,单位KB,值为-1表示未限制。 read_kbytes bigint 数据库主节点:过去5秒内,该用户在数据库节点上复杂作业read的字节总数(单位KB)。 数据库节点:实例启动至当前时间为止,该用户复杂作业read的字节总数(单位KB)。 write_kbytes bigint 数据库主节点:过去5秒内,该用户在数据库节点上复杂作业write的字节总数(单位KB)。 数据库节点:实例启动至当前时间为止,该用户复杂作业write的字节总数(单位KB)。 read_counts bigint 数据库主节点:过去5秒内,该用户在数据库节点上复杂作业read的次数之和(单位次)。 数据库节点:实例启动至当前时间为止,该用户复杂作业read的次数之和(单位次)。 write_counts bigint 数据库主节点:过去5秒内,该用户在数据库节点上复杂作业write的次数之和(单位次)。 数据库节点:实例启动至当前时间为止,该用户复杂作业write的次数之和(单位次)。 read_speed double precision 数据库主节点:过去5秒内,该用户在单个数据库节点上复杂作业read平均速率(单位KB/s)。 数据库节点:过去5秒内,该用户在该数据库节点上复杂作业read平均速率(单位KB/s)。 write_speed double precision 数据库主节点:过去5秒内,该用户在单个数据库节点上复杂作业write平均速率(单位KB/s)。 数据库节点:过去5秒内,该用户在该数据库节点上复杂作业write平均速率(单位KB/s)。 父主题: 其他系统视图
  • CM相关参数 CM相关参数的修改对 GaussDB 的运行机制有影响,建议由GaussDB的工程师协助修改。修改CM相关参数的方法,请参考表2中方式一。 cm_agent相关参数可通过cm_agent数据目录下的cm_agent.conf文件查看,cm_server相关参数可通过cm_server数据目录下的cm_server.conf文件查看。 cm_agent参数 cm_server参数 父主题: GUC参数说明
  • DB_COL_PRIVS DB_COL_PRIVS视图显示以下授权信息: 当前用户作为对象所有者、授予者或被授予者时的列权限授予信息。 已启用角色或PUBLIC角色作为被授予者时的列权限授予信息。 默认所有用户都可以访问。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 DB_COL_PRIVS字段 名称 类型 描述 grantor character varying(128) 执行授权的用户名。 owner character varying(128) 对象的所有者。 grantee character varying(128) 被授予权限的用户或角色的名称。 table_schema character varying(128) 对象的Schema。 table_name character varying(128) 对象的名称。 column_name character varying(128) 列的名称。 privilege character varying(40) 列的权限。 grantable character varying(3) 是否授予特权。 YES:授予特权。 NO:不授予特权。 common character varying(3) 暂不支持,值为NULL。 inherited character varying(3) 暂不支持,值为NULL。 父主题: 用户和权限管理
  • 从MY迁移数据 下面示例演示如何通过CopyManager从MY向GaussDB进行数据迁移。 代码运行的前提条件: 根据实际情况添加gaussdbjdbc.jar包(例如用户使用IDE执行代码,则需要在本地IDE添加gaussdbjdbc.jar包)。 MY和 GaussDB数据库 分别创建migration_table表。MY数据库的migration_table表预先插入数据。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。 // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 // $ip、$port、database需要用户自行修改。 import java.io.StringReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.huawei.gaussdb.jdbc.copy.CopyManager; import com.huawei.gaussdb.jdbc.core.BaseConnection; public class Migration{ public static void main(String[] args) { String url = new String("jdbc:gaussdb://$ip:$port/database"); //数据库URL String user = System.getenv("EXAMPLE_USERNAME_ENV"); //GaussDB用户名 String pass = System.getenv("EXAMPLE_PASSWORD_ENV"); //GaussDB密码 String tablename = new String("migration_table"); //定义表信息 String delimiter = new String("|"); //定义分隔符 String encoding = new String("UTF8"); //定义字符集 String driver = "com.huawei.gaussdb.jdbc.Driver"; StringBuffer buffer = new StringBuffer(); //定义存放格式化数据的缓存 try { //获取源数据库查询结果集 ResultSet rs = getDataSet(); //遍历结果集,逐行获取记录 //将每条记录中各字段值,按指定分隔符分割,由换行符结束,拼成一个字符串 //把拼成的字符串,添加到缓存buffer while (rs.next()) { buffer.append(rs.getString(1) + delimiter + rs.getString(2) + delimiter + rs.getString(3) + delimiter + rs.getString(4) + "\n"); } rs.close(); try { //以非加密方式连接数据库 Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, pass); BaseConnection baseConn = (BaseConnection) conn; baseConn.setAutoCommit(false); //初始化表信息 String sql = "Copy " + tablename + " from STDIN DELIMITER " + "'" + delimiter + "'" + " ENCODING " + "'" + encoding + "'"; //提交缓存buffer中的数据 CopyManager cp = new CopyManager(baseConn); StringReader reader = new StringReader(buffer.toString()); cp.copyIn(sql, reader); baseConn.commit(); reader.close(); baseConn.close(); } catch (ClassNotFoundException e) { e.printStackTrace(System.out); } catch (SQLException e) { e.printStackTrace(System.out); } } catch (Exception e) { e.printStackTrace(); } } //******************************** // 从源数据库返回查询结果集 //********************************* private static ResultSet getDataSet() { ResultSet rs = null; try { Class.forName("com.MySQL.jdbc.Driver").newInstance(); String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); Connection conn = DriverManager.getConnection("jdbc:MySQL://$ip:$port/database?useSSL=false&allowPublicKeyRetrieval=true", userName, password); Statement stmt = conn.createStatement(); rs = stmt.executeQuery("select * from migration_table"); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return rs; } } 上述示例的运行结果为:迁移后,GaussDB数据库的migration_table表和MY的migration_table表的数据一致。 父主题: 典型应用开发示例
  • DB_TAB_STATS_HISTORY DB_TAB_STATS_HISTORY视图显示表统计信息涉及的表、分区和子分区以及执行收集表统计信息的时间。所有用户都可以访问该视图。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 DB_TAB_STATS_HISTORY字段 名称 类型 描述 owner character varying(128) 对象的拥有者。 table_name character varying(128) 表名。 partition_name character varying(128) 暂不支持,值为NULL。 subpartition_name character varying(128) 暂不支持,值为NULL。 stats_update_time timestamp(6) with time zone 统计信息更新的时间,数据库重启后,数据会丢失。 父主题: 其他系统视图
  • 关闭连接 ODBC关闭数据库连接,释放资源相关API如表1所示。 表1 相关API说明 功能 API 断开与数据库的连接 SQLDisconnect 释放句柄资源 SQLFreeHandle:释放句柄资源,可替代如下函数: SQLFreeEnv:释放环境句柄。 SQLFreeConnect:释放连接句柄。 SQLFreeStmt:释放语句句柄。 示例如下(完整示例请参考获取和处理数据库中的数据): // 断开数据源连接并释放句柄资源。 SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt); SQLDisconnect(V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc); SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); 父主题: 开发步骤
  • 示例 --设置时区为意大利。 gaussdb=# SET timezone TO 'Europe/Rome'; --查看当前时区。 gaussdb=# SHOW timezone; TimeZone ------------- Europe/Rome (1 row) --将时区设置为缺省值。 gaussdb=# RESET timezone; --查看当前时区。 gaussdb=# SHOW timezone; TimeZone ---------- PRC (1 row) --如上SQL等效于如下两条SQL,将时区设置为缺省值。 gaussdb=# SET timezone TO DEFAULT; gaussdb=# ALTER SESSION SET timezone to DEFAULT;
  • 算子说明 表分区技术(Table-Partitioning)通过将非常大的表或者索引从逻辑上切分为更小、更易管理的逻辑单元(分区),能够减小用户对表查询、变更等语句操作的影响范围;能够让用户通过分区键(Partition Key)快速定位到数据所在的分区,从而避免在数据库中对大表的全量扫描,能够在不同的分区上并发进行DDL、DML操作。GaussDB支持三种分区策略 :范围分区、哈希分区、列表分区。范围分区基于二分binary-search实现,复杂度为O(logN);哈希分区和列表分区基于key-partOid哈希表实现,复杂度为O(1)。
  • 参数说明 table_name 分区表名。 取值范围:已存在的分区表名。 partition_name 分区名。 取值范围:已存在的分区名。 tablespacename 指定分区要移动到哪一个表空间。 取值范围:已存在的表空间名。 partition_value 分区键值。 通过PARTITION FOR ( partition_value [, ...] )子句指定的这一组值,可以唯一确定一个分区。 取值范围:需要进行操作的分区的分区键的取值范围。 UNUSABLE LOCAL INDEXES 设置该分区上的所有索引不可用。 REBUILD UNUSABLE LOCAL INDEXES 重建该分区上的所有索引。 { ENABLE | DISABLE } ROW MOVEMET 行迁移开关。 如果进行UPDATE操作时,更新了元组在分区键上的值,造成了该元组所在分区发生变化,就会根据该开关给出报错信息,或者进行元组在分区间的转移。 取值范围: ENABLE:打开行迁移开关。 DISABLE:关闭行迁移开关。 默认是打开状态。 ordinary_table_name 进行迁移的普通表的名称。 取值范围:已存在的普通表名。 { WITH | WITHOUT } VALIDATION 在进行数据迁移时,是否检查普通表中的数据满足指定分区的分区键范围。 取值范围: WITH:对于普通表中的数据要检查是否满足分区的分区键范围,如果有数据不满足,则报错。 WITHOUT:对于普通表中的数据不检查是否满足分区的分区键范围。 默认是WITH状态。 由于检查比较耗时,特别是当数据量很大的情况下。所以在保证当前普通表中的数据满足分区的分区键范围时,可以加上WITHOUT来指明不进行检查。 VERBOSE 在VALIDATION是WITH状态时,如果检查出普通表有不满足要交换分区的分区键范围的数据,那么把这些数据插入到正确的分区,如果路由不到任何分区,再报错。 只有在VALIDATION是WITH状态时,才可以指定VERBOSE。 partition_new_name 分区的新名称。 取值范围:字符串,要符合标识符命名规范。 UPDATE GLOBAL INDEX 如果使用该参数,则会更新分区表上的所有全局索引,以确保使用全局索引可以查询出正确的数据。如果不使用该参数,则分区表上的所有全局索引将会失效。 SET PARTITIONING { AUTOMATIC | MANUAL } 开启或关闭列表分区的自动扩展功能。使用AUTOMATIC关键字时为开启自动扩展功能,使用MANUAL关键字时为关闭自动扩展功能。 SET INTERVAL ( [ interval_expr ] ) 用于实现间隔分区与范围分区之间的互转,间隔分区相当于开启了自动扩展功能后的范围分区。interval_expr缺省时,将间隔分区转为范围分区;否则将范围分区转为间隔分区。其中,interval_expr为自动创建分区的间隔,需要符合partition_key的字段类型,目前只支持数值类型和日期/时间类型,例如:1、'1 day'、'1 month'。
  • 语法格式 修改分区表分区包括修改表分区主语法、修改表分区名称的语法、重置分区ID和开启/关闭分区自动扩展功能的语法。 修改表分区主语法。 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} action [, ... ]; 其中action统指如下分区维护子语法。当存在多个分区维护子句时,保证了分区的连续性,无论这些子句的排序如何,GaussDB总会先执行DROP PARTITION再执行ADD PARTITION操作,最后顺序执行其它分区维护操作。 move_clause | exchange_clause | row_clause | merge_clause | modify_clause | split_clause | add_clause | drop_clause | truncate_clause | ilm_clause | set_partitioning_clause move_clause子语法用于移动分区到新的表空间。 MOVE PARTITION { partion_name | FOR ( partition_value [, ...] ) } TABLESPACE tablespacename exchange_clause子语法用于把普通表的数据迁移到指定的分区。 EXCHANGE PARTITION { ( partition_name ) | partition_name | FOR ( partition_value [, ... ] ) } WITH TABLE {[ ONLY ] ordinary_table_name | ordinary_table_name * | ONLY ( ordinary_table_name )} [ { WITH | WITHOUT } VALIDATION ] [ VERBOSE ] [ UPDATE GLOBAL INDEX ] 进行交换的普通表和分区必须满足如下条件: 普通表和分区的列数相同,对应列的信息严格一致,包括:列名、列的数据类型、列约束、列的Collation信息、列的存储参数、列的压缩信息等。 普通表和分区的表压缩信息严格一致。 普通表索引和分区Local索引个数相同,且对应索引的信息严格一致。 普通表和分区的表约束个数相同,且对应表约束的信息严格一致。 普通表不可以是临时表,分区表只能是范围分区表,列表分区表,哈希分区表或间隔分区表。 在内置安全策略开关开启的情况下,普通表和分区表上不可以有动态数据脱敏,行访问控制约束。 完成交换后,普通表和分区的数据被置换,同时普通表和分区的表空间信息被置换。此时,普通表和分区的统计信息变得不可靠,需要对普通表和分区重新执行analyze。 由于非分区键不能建立本地唯一索引,只能建立全局唯一索引,所以如果普通表含有唯一索引时,可能会导致无法交换数据。 如果需要进行数据交换操作,可以通过创建中间表的方式。先将分区数据插入到中间表,truncate分区,普通表数据插入分区表,drop普通表,重命名中间表的方式完成数据交换操作。 对于普通表和分区表都是Ustore的场景,如果普通表的Ubtree索引类型(RCR或者PCR,默认为RCR)和分区表本地的Ubtree索引类型(RCR或PCR,默认为RCR)不一致,会导致无法完成数据交换的操作。 如果在普通表/分区表上进行了DROP COLUMN操作,被删除的列依然物理存在,则需要保证普通表和分区的被删除列严格对齐才能交换成功。 EXCHANGE PARTITION { ( partition_name ) | partition_name | FOR ( partition_value [, ... ] ) }操作在B模式数据库(即sql_compatibility = 'B')下可用,其他模式下仅EXCHANGE PARTITION { ( partition_name ) | FOR ( partition_value [, ... ] ) }可用。 在B模式数据库(即sql_compatibility = 'B')下,当partition_name为一级分区名时,进行交换的是一级分区和普通表;当partition_name为二级分区时, 进行交换的是二级分区和普通表。 不支持在二级分区表中交换一级分区和普通表。 row_clause子语法用于设置分区表的行迁移开关。 { ENABLE | DISABLE } ROW MOVEMENT merge_clause子语法用于把多个分区合并成一个分区。一个命令中合并的源分区上限为300。 MERGE PARTITIONS { partition_name } [, ...] INTO PARTITION partition_name [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ] [ UPDATE GLOBAL INDEX ] 对于范围分区/间隔分区,MERGE分区要求源分区的范围连续递增,且MERGE后的分区名可以与最后一个源分区名相同;对于列表分区,则源分区无顺序要求,且MERGE后的分区名可以与任一源分区名相同。如果MERGE后的分区名与源分区名相同,视为同一个分区。 未打开guc参数enable_ilm的情况下,如果使用merge_clause子语法把多个带有ilm policy的分区合并成一个分区,新分区不继承ilm policy。 USTORE存储引擎表不支持在事务块/存储过程中执行ALTER TABLE MERGE PARTITIONS的操作。 modify_clause子语法用于设置分区索引是否可用。 MODIFY PARTITION partition_name { UNUSABLE LOCAL INDEXES | REBUILD UNUSABLE LOCAL INDEXES | COLVIEW [ PRIORITY { HIGH | LOW | NONE } ] | NOCOLVIEW [ PRIORITY { HIGH | LOW | NONE } ]} split_clause子语法用于把一个分区切割成多个分区。 SPLIT PARTITION { partition_name | FOR ( partition_value [, ...] ) } { split_point_clause | no_split_point_clause } [ UPDATE GLOBAL INDEX ] SPLIT后的分区名可以与源分区名相同,将视为不同的分区。 未打开guc参数enable_ilm的情况下,如果使用split_clause子语法把一个带有ilm policy的分区分割成多个分区,新分区不继承ilm policy。 范围分区表和间隔分区表指定切割点split_point_clause的语法为: AT ( partition_value ) INTO ( PARTITION partition_name [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ] , PARTITION partition_name [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ] ) 切割点的大小要位于正在被切割的分区的分区键范围内,指定切割点的方式只能把一个分区切割成两个新分区。 范围分区表和间隔分区表不指定切割点no_split_point_clause的语法为: INTO { ( partition_less_than_item [, ...] ) | ( partition_start_end_item [, ...] ) } 不指定切割点的方式,partition_less_than_item指定的第一个新分区的分区键要大于正在被切割的分区的前一个分区(如果存在)的分区键,partition_less_than_item指定的最后一个分区的分区键要等于正在被切割的分区的分区键。 不指定切割点的方式,partition_start_end_item指定的第一个新分区的起始点(如果存在)必须等于正在被切割的分区的前一个分区(如果存在)的分区键,partition_start_end_item指定的最后一个分区的终止点(如果存在)必须等于正在被切割的分区的分区键。 partition_less_than_item支持的分区键个数最多为16,而partition_start_end_item仅支持1个分区键,其支持的数据类型请参见PARTITIONBYRANGE[COLUMNS](partition_key)。 在同一语句中partition_less_than_item和partition_start_end_item两者不可同时使用;不同split语句之间没有限制。 分区项partition_less_than_item的语法如下,其中最后一个分区可以不写分区范围定义,即VALUES LESS THAN (partition_value)部分,默认继承源分区范围定义的上界值。 PARTITION partition_name VALUES LESS THAN {( { partition_value | MAXVALUE } [, ...] ) | MAXVALUE } [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ] RANGE分区时支持MAXVALUE关键字不带括号,只能支持B模式使用,不支持在二级分区的子分区中使用,不支持在分区字段为多列的场景使用。 分区项partition_start_end_item的语法如下,其约束请参见START END语法描述。 PARTITION partition_name { {START(partition_value) END (partition_value) EVERY (interval_value)} | {START(partition_value) END ({partition_value | MAXVALUE})} | {START(partition_value)} | {END({partition_value | MAXVALUE})} } [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [TABLESPACE tablespace_name] 列表分区表指定切割点split_point_clause的语法如下。 VALUES ( partition_value_list ) INTO ( PARTITION partition_name [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] [ TABLESPACE tablespacename ] , PARTITION partition_name [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] [ TABLESPACE tablespacename ] ) 切割点必须是源分区的一个非空真子集,指定切割点的方式只能把一个分区切割成两个新分区。 列表分区表不指定切割点no_split_point_clause的语法如下,其中最后一个分区不能写分区范围定义,即VALUES (partition_value_list)部分,其范围等于源分区去掉其他子分区后的剩余集合。 INTO ( PARTITION partition_name VALUES (partition_value_list) [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] [ TABLESPACE tablespacename ][, ...] ) COMPRESS ADVANCED ROW: 最后一个新分区不能写分区范围定义,其范围等于源分区去掉其他子分区后的剩余集合。 不指定切割点的方式,每一个新分区都必须是源分区的一个非空真子集,且互不交叉。 add_clause子语法用于为指定的分区表添加一个或多个分区。 ADD {{partition_less_than_item | partition_start_end_item| partition_list_item } | PARTITION({partition_less_than_item | partition_start_end_item | partition_list_item})} PARTITION({partition_less_than_item | partition_start_end_item | partition_list_item})语法只支持B模式下使用。 不支持ALTER TABLE table_name ADD PARTITION (partition_definition1, partition_definition2,…);语法添加多分区。仅支持原有添加多分区语法:ALTER TABLE table_name ADD PARTITION (partition_definition1), ADD PARTITION (partition_definition2), …。 分区项partition_list_item的语法为: PARTITION partition_name VALUES [IN] (list_values_clause) [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ] partition_list_item支持最多16个分区键,其支持的数据类型请参见PARTITION BY LIST [COLUMNS] (partition_key)。 间隔/哈希分区表不支持添加分区。 IN需要在B模式下使用,不支持在二级分区的子分区中使用。 drop_clause子语法用于删除分区表中的指定分区。 DROP PARTITION { partition_name | FOR ( partition_value [, ...] ) } [ UPDATE GLOBAL INDEX ] 哈希分区表不支持删除分区。 当分区表只有一个分区时,不能删除该分区。 truncate_clause子语法用于清空分区表中的指定分区。 TRUNCATE PARTITION { partition_name | FOR ( partition_value [, ...] ) } [ UPDATE GLOBAL INDEX ] ilm_clause子语法用于为分区添加ILM策略,为数据生命周期管理-OLTP表压缩特性支持语法。 MODIFY PARTITION partition_name ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR ) ] set_partitioning_clause子语法用于开启或关闭列表/范围分区自动扩展功能。 SET PARTITIONING { AUTOMATIC | MANUAL } | SET INTERVAL ( [ interval_expr ] ) 修改表分区名称的语法。 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} RENAME PARTITION { partion_name | FOR ( partition_value [, ...] ) } TO partition_new_name; 重置分区ID的语法。 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} RESET PARTITION;
  • 注意事项 只有分区表的所有者或者被授予了分区表ALTER权限的用户有权限执行ALTER TABLE PARTITION命令,当三权分立开关关闭时,系统管理员默认拥有此权限。 添加分区的表空间不能是PG_GLOBAL。 添加分区的名称不能与该分区表已有分区的名称相同。 添加分区的分区键值要和分区表的分区键类型一致。 若添加RANGE分区,添加分区键值要大于分区表中最后一个范围分区的上边界。 若添加LIST分区,添加分区键值不能与现有分区键值重复。 不支持添加哈希分区。 如果目标分区表中已有分区数达到了最大值1048575,则不能继续添加分区。 当分区表只有一个分区时,不能删除该分区。 选择分区使用PARTITION FOR(),括号里指定值个数应该与定义分区时使用的列个数相同,并且一一对应。ALTER TABLE操作会处理partition_value落入的分区。 Value分区表不支持Alter Partition操作。 间隔分区表不支持添加分区。 哈希分区表不支持切割分区,不支持合并分区,不支持添加/删除分区。 删除、切割、合并、清空、交换分区的操作会使Global索引失效,可以申明UPDATE GLOBAL INDEX子句同步更新索引。 如果删除、切割、合并、清空、交换分区操作不申明UPDATE GLOBAL INDEX子句,并发的DML业务有可能因为索引不可用而报错。 若设置参数enable_gpi_auto_update为on,即使不申明UPDATE GLOBAL INDEX子句,也会自动更新Global索引。 在为数据对象增加或者变更ILM策略的时候,如果追加了行级表达式,需要注意行表达式目前只支持白名单中列出的函数。具体白名单函数列表参考行表达式函数白名单。 在ILM策略的ON(EXPR)行级表达式支持的函数中,有部分函数的输出可能会受兼容性参数影响。例如,upper函数在B兼容模式下设置b_format_version='5.7'和b_format_dev_version='s2'后,将无法转大写。 开启范围分区自动扩展要求分区表中不能存在分区键值为MAXVALUE的分区。 开启范围分区自动扩展只支持单分区键。 开启列表分区自动扩展要求分区表中不能存在分区键值为DEFAULT的分区。
  • backtrace_min_messages 参数说明:控制打印函数堆栈信息的消息级别。当产生该设置参数级别相等或更高级别的信息时,会打印函数的堆栈信息到服务器日志文件中。该参数可在PDB级别设置。 参数类型:枚举类型 参数单位:无 该参数作为客户现场问题定位手段使用,且由于频繁的打印函数栈会对系统的开销及稳定性有一定的影响,因此如果需要进行问题定位时,建议避免将backtrace_min_messages的值设置为fatal及panic以外的级别。 取值范围:消息级别从低到高为debug5、debug4、debug3、debug2(debug)、debug1、log、info、notice、warning、error、fatal、panic。参数的详细信息请参见表1。 debug的消息级别等效于debug2。 默认值:panic。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • log_min_error_statement 参数说明:控制在服务器日志中记录错误SQL语句的消息级别,当产生该设置参数级别相等或更高级别的消息时,将产生这些日志的SQL语句记入日志文件。因此级别越低,日志中记录的SQL语句越多。该参数可在PDB级别设置。 参数类型:枚举类型 参数单位:无 取值范围:有效值为debug5、debug4、debug3、debug2(debug)、debug1、info、notice、warning、error、log、fatal、panic。参数的详细信息请参见表1。 debug的消息级别等效于debug2。 对于log_min_error_statement参数,log的消息级别高于error,低于fatal。因此设置为error时,产生error、log、fatal、panic这些级别日志的SQL语句都将被记录。 默认值:error。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • log_min_duration_statement 参数说明:当某条SQL语句的执行时间大于等于该参数设定的值时,这条SQL语句和其执行时间会一并被记录。该参数可在PDB级别设置。 设置log_min_duration_statement可以很方便地跟踪需要优化的查询语句。对于使用扩展查询协议的客户端,语法分析、绑定、执行每一步所花的时间将被独立记录。 参数类型:整型 参数单位:ms(毫秒) 当此参数与log_statement同时使用时,已经被log_statement记录的SQL语句不会被重复记录。在没有使用syslog情况下,推荐使用log_line_prefix记录PID或会话ID,方便通过PID或会话ID关联语句消息和执行时间消息。 取值范围:-1 ~ 2147483647 设置为-1,关闭此功能。 设置为0,记录所有SQL语句和其执行时间。 设置为正整数,当某条SQL语句的执行时间大于等于设置值时,这条SQL语句和其执行时间会一并被记录。 默认值:3000(即3s)。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。取值为整数时,默认单位为ms;取值如果带单位,必须为ms、s、min、h、d。例如,不带单位取值600,表示log_min_duration_statement为600ms;带单位取值10min,表示log_min_duration_statement为10min。 设置建议:设置为默认值。 设置不当的风险与影响:取值若超出范围,或者取值带有除ms、s、min、h、d以外的单位时,会有报错提示。
  • log_min_messages 参数说明:控制写到服务器日志文件中的消息级别,当产生该设置参数级别相等或更高级别的消息时,将这些信息记入日志文件。因此级别越低,服务器运行日志中记录的消息就越多。该参数可在PDB级别设置。 参数类型:枚举类型 参数单位:无 取值范围:消息级别从低到高为debug5、debug4、debug3、debug2(debug)、debug1、info、notice、warning、error、log、fatal、panic。参数的详细信息请参见表1。 debug的消息级别等效于debug2。 对于log_min_messages,log的消息级别高于error,低于fatal。 默认值:warning。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • client_min_messages 参数说明:控制发送到客户端的消息级别,当产生该设置参数级别相等或更高级别的消息时,将这些消息发送到客户端。因此级别越低,发送给客户端的消息就越多。该参数可在PDB级别设置。 参数类型:枚举类型 参数单位:无 取值范围:消息级别从低到高为debug5、debug4、debug3、debug2(debug)、debug1、log、info、notice、warning、error、fatal、panic。参数的详细信息请参见表1。 debug的消息级别等效于debug2。 在实际设置过程中,如果设置的级别大于error,为fatal或panic,系统会默认将级别转为error。 默认值:notice。在PDB场景内,若未设置该参数,则继承来自全局的设置。 设置方式:该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • max_execute_functions 参数说明:该参数用于定义session内存储过程、函数的执行产物的最大个数。当执行产物个数大于max_execute_functions时,系统将对执行产物进行清理,保留最近调用的max_execute_functions个执行产物。当且仅当enable_global_plsqlcache参数取值为on时,该参数设置有效。 参数类型:整型 参数单位:无 取值范围:1 ~ 2147483647 默认值:1000 设置方式:该参数属于POSTMASTER型参数,请参考表1中对应设置方法进行设置。 设置建议:建议根据系统内存大小设置合理值,内存越大可以设置的取值越大。 设置不当的风险与影响:设置太小,可能会影响性能。
  • enable_global_plsqlcache 参数说明:设置是否对package、存储过程、函数的编译产物进行全局缓存,并对执行产物进行session级缓存,开启该功能可以节省高并发下数据库节点的内存使用。多租数据库特性(enable_mtd)需要关闭该参数。 参数类型:布尔型 参数单位:无 取值范围: on:表示对编译产物进行全局缓存。 off:表示不进行全局缓存。 默认值:on 设置方式:该参数属于POSTMASTER型参数,请参考表1中对应设置方法进行设置。 设置建议:存储过程及包对象较多且并发较高时建议打开,以节省内存。 设置不当的风险与影响:请在充分理解参数含义,并经过测试验证后进行修改。
  • max_compile_packages 参数说明:设置服务器存储的PACKAGE编译结果的最大数量。 参数类型:整型 参数单位:无 取值范围:0 ~ 2147483647,0表示不开启该功能,不控制PACKAGE编译结果的最大数量。不同规格下该参数取值可以适当调整,可以根据计算公式(max_process_memory * 2%)/ 4.4MB 然后向下取整得到推荐值。 4.4MB是根据实验室模拟统计得到的平均值,实际场景仍需要观察,如果该经验值不符合实际场景,需要重新调整该值以调整存储过程对内存的占用。 默认值: 不同规格默认值:(max_process_memory * 2%)/ 4.4MB 向下取整 设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 设置建议:存储过多的PACKAGE的编译结果可能占用很大内存,将此参数设置为一个合理的值,有助于减少内存占用,提升系统性能。 设置不当的风险与影响:设置太小,会导致全局缓存频繁淘汰,可能会影响性能。
  • GS_JOB_ATTRIBUTE GS_JOB_ATTRIBUTE系统表提供了DBE_SCHEDULER定时任务的相关属性信息,其中包括定时任务,定时任务类,证书,授权,程序和调度的基本属性。新安装数据库实例普通用户无权限访问。 表1 GS_JOB_ATTRIBUTE字段 名称 类型 描述 oid oid 行标识符(隐含字段)。 job_name text 定时任务,定时任务类,证书,程序和调度的名字,授权的用户名。 attribute_name text 定时任务,定时任务类,证书,程序和调度的属性名,授权的内容。 attribute_value text 定时任务,定时任务类,证书,程序和调度的属性值。 父主题: 其他系统表
  • 连接方式介绍 连接数据库的方式通常是根据安全性、性能、可扩展性和实现复杂度等因素进行选择的。下面是4种方式连接数据库的优缺点以及选择原则: 表1 不同方式的优缺点以及选择原则 连接方式 优点 缺点 选择原则 非加密方式 简单易实现,无需额外的加密和解密操作。 性能较高,因为不需要进行加密/解密操作,减少了数据传输的开销。 安全性较低,数据在传输过程中容易被窃听或篡改。 不适合传输敏感信息,可能违反隐私保护法规。 只适用于内部网络或对安全性要求不高的环境。 SSL方式 提供了加密传输,数据在传输过程中得到保护,安全性较高。 支持客户端/服务器身份验证,增强了安全性。 配置和管理相对复杂,需要证书的颁发和更新。 可能会增加一些性能开销,特别是在加密和解密大量数据时。 适用于对数据传输安全性要求较高的环境,如金融、医疗等行业。 UDS方式 适用于本地通信,不经过网络,传输速度快。 不需要额外的网络开销,不容易受到网络攻击。 仅限于在同一台主机上的进程间通信,无法用于远程连接。 适用于本地通信的场景,如本地服务和应用之间的数据交换。 国密TLS方式 支持国密算法,符合国内对加密算法的法律要求。 提供了与标准TLS相当的安全性,适用于对加密标准有特殊要求的场景。 在国际范围内的应用可能受限,因为其他国家可能不支持国密算法。 可能存在性能开销,因为国密算法相对于传统的加密算法可能更为复杂。 适用于国内的特定行业,如政府、金融等领域,对国内加密标准有法律要求的场景。 父主题: 连接数据库
  • DBE_PLDEBUGGER.info_breakpoints debug端调试过程中,调用info_breakpoints,查看当前的函数断点,如表1所示。 表1 info_breakpoints返回值列表 名称 类型 描述 breakpointno OUT integer 断点编号。 funcoid OUT oid 函数ID。 lineno OUT integer 行号。 query OUT text 断点内容。 enable OUT boolean 是否有效。 父主题: DBE_PLDEBUGGER Schema
  • GS_ILM GS_ILM系统表提供了ILM策略的主体信息,其中包括策略名称、策略属主、策略类型、策略编号和策略状态。 表1 GS_ILM字段 名称 类型 描述 pidx integer 策略序号,全局唯一以1开始的流水号。 creator oid 策略属主。 name name 策略名称,目前不支持自定义名称,默认名称为p+pidx。 ptype "char" 策略类型: m:DATA MOVEMENT。 flag smallint 取值范围: 0:策略整体启用状态。 1:策略整体被禁用。 父主题: OLTP表压缩
  • FORALL批量查询语句 语法图 图5 forall::= label declaration ::= 变量index会自动定义为integer类型并且只在此循环里存在。index的取值介于low_bound和upper_bound之间。 如果声明了SAVE EXCEPTIONS,则会将循环体DML执行过程中每次遇到的异常保存在SQL%BULK_EXCEPTIONS中,并在执行结束后统一抛出一个异常,循环过程中没有异常的执行的结果在当前子事务内不会回滚。 使用FORALL + BULK COLLECT INTO时,INTO的变量仅返回单条DML语句执行结果。 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 gaussdb=# CREATE TABLE hdfs_t1 ( title NUMBER(6), did VARCHAR2(20), data_period VARCHAR2(25), kind VARCHAR2(25), interval VARCHAR2(20), time DATE, isModified VARCHAR2(10) ); CREATE TABLE gaussdb=# INSERT INTO hdfs_t1 VALUES( 8, 'Donald', 'OConnell', 'DOCONNEL', '650.507.9833', to_date('21-06-1999', 'dd-mm-yyyy'), 'SH_CLERK' ); INSERT 0 1 gaussdb=# CREATE OR REPLACE PROCEDURE proc_forall() AS BEGIN FORALL i IN 100..120 update hdfs_t1 set title = title + 100*i; END; / CREATE PROCEDURE --调用存储过程 gaussdb=# CALL proc_forall(); proc_forall ------------- (1 row) --查询存储过程调用结果 gaussdb=# SELECT * FROM hdfs_t1; title | did | data_period | kind | interval | time | ismodified --------+--------+-------------+----------+--------------+---------------------+------------ 231008 | Donald | OConnell | DOCONNEL | 650.507.9833 | 1999-06-21 00:00:00 | SH_CLERK (1 row) --删除存储过程和表 gaussdb=# DROP PROCEDURE proc_forall; DROP PROCEDURE gaussdb=# DROP TABLE hdfs_t1; DROP TABLE
  • FOR_LOOP(integer变量)语句 语法图 图3 for_loop::= label declaration ::= 变量name会自动定义为integer类型并且只在此循环里存在。变量name介于lower_bound和upper_bound之间。 当使用REVERSE关键字时,lower_bound必须大于等于upper_bound,否则循环体不会被执行。 示例 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 --从0到5进行循环 gaussdb=# CREATE OR REPLACE PROCEDURE proc_for_loop() AS BEGIN FOR I IN 0..5 LOOP DBE_OUTPUT.PRINT_LINE('It is '||to_char(I) || ' time;') ; END LOOP; END; / CREATE PROCEDURE --调用存储过程 gaussdb=# CALL proc_for_loop(); It is 0 time; It is 1 time; It is 2 time; It is 3 time; It is 4 time; It is 5 time; proc_for_loop --------------- (1 row) --删除存储过程 gaussdb=# DROP PROCEDURE proc_for_loop; DROP PROCEDURE
共100000条
提示

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