华为云用户手册

  • ADM_TAB_SUBPARTITIONS ADM_TAB_SUBPARTITIONS视图显示数据库下所有的二级分区信息。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 ADM_TAB_SUBPARTITIONS字段 名称 类型 描述 table_owner character varying(64) 表的所有者。 table_name character varying(64) 关系表名称。 partition_name character varying(64) 分区名称。 subpartition_name character varying(64) 二级分区名称。 high_value text 二级分区的边界值。 对于范围分区和间隔分区,显示各分区的上边界值。 对于列表分区,显示各分区的取值列表。 对于哈希分区,显示各分区的编号。 tablespace_name name 二级分区表的表空间名称。 schema character varying(64) 名称空间的名称。 high_value_length integer 二级分区的边界值的字符长度。 父主题: 分区表
  • 时间段输入 reltime的输入方式可以采用任何合法的时间段文本格式,包括数字形式(含负数和小数)及时间形式,其中时间形式的输入支持SQL标准格式、ISO-8601格式等。另外,文本输入需要加单引号。 时间段输入的详细信息请参考表6。 表6 时间段输入 输入示例 输出结果 描述 60 2 mons 采用数字表示时间段,默认单位是day,可以是小数或负数。特别的,负数时间段,在语义上,可以理解为“早于多久”。 31.25 1 mons 1 days 06:00:00 -365 -12 mons -5 days 1 years 1 mons 8 days 12:00:00 1 years 1 mons 8 days 12:00:00 采用POSTGRES格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。 -13 months -10 hours -1 years -25 days -04:00:00 -2 YEARS +5 MONTHS 10 DAYS -1 years -6 mons -25 days -06:00:00 P-1.1Y10M -3 mons -5 days -06:00:00 采用ISO-8601格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。 -12H -12:00:00 示例: 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 --创建表。 gaussdb=# CREATE TABLE reltime_type_tab(col1 character(30), col2 reltime); --插入数据。 gaussdb=# INSERT INTO reltime_type_tab VALUES ('90', '90'); gaussdb=# INSERT INTO reltime_type_tab VALUES ('-366', '-366'); gaussdb=# INSERT INTO reltime_type_tab VALUES ('1975.25', '1975.25'); gaussdb=# INSERT INTO reltime_type_tab VALUES ('-2 YEARS +5 MONTHS 10 DAYS', '-2 YEARS +5 MONTHS 10 DAYS'); gaussdb=# INSERT INTO reltime_type_tab VALUES ('30 DAYS 12:00:00', '30 DAYS 12:00:00'); gaussdb=# INSERT INTO reltime_type_tab VALUES ('P-1.1Y10M', 'P-1.1Y10M'); --查看数据。 gaussdb=# SELECT * FROM reltime_type_tab; col1 | col2 --------------------------------+------------------------------------- 90 | 3 mons -366 | -1 years -18:00:00 1975.25 | 5 years 4 mons 29 days -2 YEARS +5 MONTHS 10 DAYS | -1 years -6 mons -25 days -06:00:00 30 DAYS 12:00:00 | 1 mon 12:00:00 P-1.1Y10M | -3 mons -5 days -06:00:00 (6 rows) --删除表。 gaussdb=# DROP TABLE reltime_type_tab;
  • 日期输入 日期和时间的输入几乎可以是任何合理的格式,包括ISO-8601格式、SQL-兼容格式或者其它的格式。系统支持按照日、月、年的顺序自定义日期输入。如果把DateStyle参数设置为MDY就按照“月-日-年”解析,设置为DMY就按照“日-月-年”解析,设置为YMD就按照“年-月-日”解析。 日期的文本输入需要加单引号包围,语法如下: type [ ( p ) ] 'value' 可选的精度声明中的p是一个整数,表示在秒域中小数部分的位数。表2显示了date类型的输入格式。 表2 日期输入格式 例子 描述 1999-01-08 ISO 8601格式(建议格式),任何方式下都是1999年1月8日。 January 8, 1999 在任何datestyle输入模式下都无歧义。 1/8/1999 有歧义,在MDY模式下是1月8日,在DMY模式下是8月1日。 1/18/1999 MDY模式下是1月18日,其它模式下被拒绝。 01/02/03 MDY模式下的2003年1月2日。 DMY模式下的2003年2月1日。 YMD模式下的2001年2月3日。 1999-Jan-08 任何模式下都是1月8日。 Jan-08-1999 任何模式下都是1月8日。 08-Jan-1999 任何模式下都是1月8日。 99-Jan-08 YMD模式下是1月8日,否则错误。 08-Jan-99 1月8日,除了在YMD模式下是错误的之外。 Jan-08-99 1月8日,除了在YMD模式下是错误的之外。 19990108 ISO 8601格式,任何模式下都是1999年1月8日。 990108 ISO 8601格式,任何模式下都是1999年1月8日。 1999.008 年和年里的第几天。 J2451187 儒略日。 January 8, 99 BC 公元前99年。 示例: 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 --创建表。 gaussdb=# CREATE TABLE date_type_tab(coll date); --插入数据。 gaussdb=# INSERT INTO date_type_tab VALUES (date '12-10-2010'); --查看数据。 gaussdb=# SELECT * FROM date_type_tab; coll --------------------- 2010-12-10 (1 row) --查看日期格式。 gaussdb=# SHOW datestyle; DateStyle ----------- ISO, MDY (1 row) --设置日期格式。 gaussdb=# SET datestyle='YMD'; SET --插入数据。 gaussdb=# INSERT INTO date_type_tab VALUES(date '2010-12-11'); --查看数据。 gaussdb=# SELECT * FROM date_type_tab; coll --------------------- 2010-12-10 2010-12-11 (2 rows) --删除表。 gaussdb=# DROP TABLE date_type_tab;
  • ecpg兼容 ecpg提供使用URL连接方式的连接语法,不仅支持“gaussdb”,还兼容支持“postgresql”。 连接语法: EXEC SQL CONNECT TO target [AS connection-name] [USER user-name]; 其中target支持“postgresql”方式如下: tcp:postgresql://hostname[:port][/dbname][?options] unix:postgresql://hostname[:port][/dbname][?options]
  • JDBC兼容性包 从发布包中获取。包名为 GaussDB -Kernel_数据库版本号_操作系统版本号_64bit_Jdbc.tar.gz。 解压后JDBC的驱动jar包: gsjdbc4.jar:主类名为“org.postgresql.Driver”,数据库连接的URL前缀为“jdbc:postgresql”,该驱动包适用于从PostgreSQL迁移业务的场景,驱动类和加载路径与迁移前保持一致,但接口支持情况不完全一致,未支持的接口需要业务侧进行调整。 gsjdbc200.jar:该驱动包适用于从Gauss200迁移业务的场景,驱动类和加载路径与迁移前保持一致,但接口支持情况不完全一致,未支持的接口需要业务侧进行调整。 opengaussjdbc.jar:主类名为“com.huawei.opengauss.jdbc.Driver”,数据库连接的URL前缀为“jdbc:opengauss”。如果遇到同一JVM进程内需要同时访问PostgreSQL及GaussDB的场景,请使用此驱动包。 各驱动包只是驱动类加载路径和url前缀不同,接口功能相同。 不能使用gsjdbc4的驱动包操作PostgreSQL数据库,虽然部分版本能够建连成功,但部分接口行为与PostgreSQL JDBC不同,可能导致未知错误 不能使用PostgreSQL的驱动包操作 GaussDB数据库 ,虽然部分版本能够建连成功,但部分接口行为与GaussDB JDBC不同,可能导致未知错误。
  • GLOBAL_STAT_SYS_INDEXES 显示数据库各节点pg_catalog、information_schema以及pg_toast模式中所有系统表的索引状态信息(不同节点数据不汇总求和),如表1所示。 表1 GLOBAL_STAT_SYS_INDEXES字段 名称 类型 描述 node_name name 节点名称。 relid oid 这个索引的表的OID。 indexrelid oid 索引的OID。 schemaname name 索引所在的Schema名。 relname name 索引的表名。 indexrelname name 索引名。 idx_scan bigint 该索引上执行的索引扫描次数。 idx_tup_read bigint 该索引上扫描返回的索引项数。 idx_tup_fetch bigint 使用该索引的简单索引扫描在原表中抓取的活跃行数。 父主题: Object
  • + 功能说明:计算两个维度相同的向量按位相加。 左参数类型:floatvector 右参数类型:floatvector 返回值类型:floatvector 代码示例: gaussdb=# SELECT floatvector('[1,1,3,2]') + floatvector('[1,1,3,2]'); gaussdb=# SELECT '[1,2,3,2]'+ floatvector('[1,1,3,2]');
  • boolvector 场景1: 功能说明:数组数据转换为向量数据。 入参类型:anyarray 出参类型:boolvector 代码示例: gaussdb=# SELECT boolvector(ARRAY[1,0,1]); 场景2: 功能说明:boolvector转换,对维度进行检测。 入参1的类型:boolvector 入参2的类型:integer 出参类型:boolvector 代码示例: gaussdb=# SELECT boolvector(boolvector('[1,0,1]'),3);
  • gs_vector_index_options 功能说明:显示相关向量索引的超参取值。 入参类型:text 出参类型:text 代码示例: --创建表。 gaussdb=# CREATE TABLE t1 (id int unique,repr floatvector(960)); --插入数据: gaussdb=# CREATE OR REPLACE FUNCTION float_random_array(dims int,range int) RETURNS float[] AS $$BEGIN RETURN ARRAY(SELECT (random() * range)::int FROM generate_series(1, dims));END;$$ LANGUAGE plpgsql; gaussdb=# INSERT INTO t1 SELECT i,floatvector(float_random_array(960,100)) FROM generate_series(1,1000) as i; --创建索引: gaussdb=# CREATE INDEX test1v on t1 using gsdiskann (repr l2) with (pq_nseg=120,pq_nclus=64,queue_size=120,num_parallels=30,enable_pq=true,using_clustering_for_parallel=false); gaussdb=# SELECT gs_vector_index_options('test1v');
  • gs_diskann_inspect 功能说明:查询索引健康状态,包括索引磁盘使用、PQ压缩准确度、索引图连接健康度、Vacuum状态等信息。 场景1: 入参类型:text 出参类型:record 代码示例: -- 创建表 gaussdb=# CREATE TABLE t1 (id int unique,repr floatvector(960)); -- 插入数据 gaussdb=# CREATE OR REPLACE FUNCTION float_random_array(dims int,range int) RETURNS float[] AS $$BEGIN RETURN ARRAY(SELECT (random() * range)::int FROM generate_series(1, dims));END;$$ LANGUAGE plpgsql; gaussdb=# INSERT INTO t1 SELECT i,floatvector(float_random_array(960,100)) FROM generate_series(1,1000) as i; -- 创建向量索引 gaussdb=# CREATE INDEX test1v on t1 using gsdiskann (repr l2) with (pq_nseg=120,pq_nclus=64,queue_size=120,num_parallels=30,enable_pq=true,using_clustering_for_parallel=false); -- 显示索引状态 gaussdb=# SELECT * FROM gs_diskann_inspect('test1v');
  • floatvector 功能说明: 场景1:数组数据转换为向量数据。 入参类型:anyarray 出参类型:floatvector 代码示例: gaussdb=# SELECT floatvector(ARRAY[1,2,9.3]); 场景2:floatvector转换,对维度进行检测。 入参1的类型:floatvector 入参2的类型:integer 出参类型:floatvector 代码示例: gaussdb=# SELECT floatvector(floatvector('[1,2,9.3]'),3);
  • - 功能说明:计算两个维度相同的向量按位相减。 左参数类型:floatvector 右参数类型:floatvector 返回值类型:floatvector 代码示例: gaussdb=# SELECT floatvector('[1,1,3,2]') + floatvector('[1,1,3,2]'); gaussdb=# SELECT '[1,2,3,2]'+ floatvector('[1,1,3,2]');
  • = 场景1: 功能说明:判断两个维度相同的向量是否相等。 左参数类型:floatvector 右参数类型:floatvector 返回值类型:BOOLEAN 代码示例: gaussdb=# SELECT floatvector('[1,1,3,2]') = floatvector('[1,1,3,2]'); gaussdb=# SELECT '[1,2,3,2]'= floatvector('[1,1,3,2]'); 场景2: 功能说明:判断两个维度相同的布尔向量是否一致。 左参数类型:boolvector 右参数类型:boolvector 返回值类型:BOOLEAN 代码示例: gaussdb=# SELECT boolvector('[1,0,1,0]') = boolvector('[1,1,1,0]'); gaussdb=# SELECT '[1,0,1,0]' = boolvector('[1,1,1,0]');
  • GaussDB支持动态内存管理吗? 答:支持。动态内存使用方法均基于内存上下文管理,在内存上下文的机制上,引入了逻辑内存管理机制,同时提供多项视图追踪内存使用情况。当前GaussDB Kernel的内存管理分为两级,分别是: 内存节点级别控制:通过max_process_memory参数限制DN上可以使用的内存上限。 内存作业级别控制:限制单条query语句最大可使用的内存上限。 父主题: FAQ
  • SEQUENCE函数 序列函数为用户从序列对象中获取后续的序列值提供了简单的多用户安全的方法。 nextval(regclass) 描述:递增序列并返回新值。 为了避免从同一个序列获取值的并发事务被阻塞,nextval操作不会回滚;即一旦值被抓取,就认为它已经被用过,并且不会再被返回。即使该操作处于事务中,当事务之后中断,或者如果调用查询结束不使用该值,也是如此。这种情况将在指定值的顺序中留下未使用的“空洞”。因此,GaussDB序列对象不能用于获得“无间隙”序列。 nextval函数只能在主机上执行,备机不支持执行此函数。 返回类型:numeric nextval函数有两种调用方式(其中第二种调用方式目前不支持Sequence命名中有特殊字符"."的情况),如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 gaussdb=# CREATE SEQUENCE seqDemo; --示例1: gaussdb=# SELECT nextval('seqDemo'); nextval --------- 1 (1 row) --示例2: gaussdb=# SELECT seqDemo.nextval; nextval --------- 2 (1 row) gaussdb=# DROP SEQUENCE seqDemo; currval(regclass) 描述:返回当前会话里最近一次nextval返回的数值。如果当前会话还没有调用过指定的sequence的nextval,那么调用currval将会报错。 返回类型:numeric currval函数有两种调用方式(其中第二种调用方式目前不支持Sequence命名中有特殊字符"."的情况),如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 gaussdb=# CREATE SEQUENCE seq1; gaussdb=# SELECT nextval('seq1'); --示例1: gaussdb=# SELECT currval('seq1'); currval --------- 1 (1 row) --示例2: gaussdb=# SELECT seq1.currval; currval --------- 1 (1 row) gaussdb=# DROP SEQUENCE seq1; lastval() 描述:返回当前会话里最近一次nextval返回的数值。这个函数等效于currval,只是它不用序列名为参数,它抓取当前会话里面最近一次nextval使用的序列。如果当前会话还没有调用过nextval,那么调用lastval将会报错。 返回类型:numeric 示例: 1 2 3 4 5 6 7 8 gaussdb=# CREATE SEQUENCE seq1; gaussdb=# SELECT nextval('seq1'); gaussdb=# SELECT lastval(); lastval --------- 1 (1 row) gaussdb=# DROP SEQUENCE seq1; setval(regclass, numeric) 描述:设置序列的当前数值。 返回类型:numeric 示例: 1 2 3 4 5 6 7 8 gaussdb=# CREATE SEQUENCE seqDemo; gaussdb=# SELECT nextval('seqDemo'); gaussdb=# SELECT setval('seqDemo',5); setval -------- 5 (1 row) gaussdb=# DROP SEQUENCE seqDemo; setval(regclass, numeric, Boolean) 描述:设置序列的当前数值以及is_called标志。 返回类型:numeric 示例: 1 2 3 4 5 6 7 8 gaussdb=# CREATE SEQUENCE seqDemo; gaussdb=# SELECT nextval('seqDemo'); gaussdb=# SELECT setval('seqDemo',5,true); setval -------- 5 (1 row) gaussdb=# DROP SEQUENCE seqDemo; Setval后当前会话会立刻生效,但如果其他会话有缓存的序列值,只能等到缓存值用尽才能感知Setval的作用。所以为了避免序列值冲突,setval要谨慎使用。 因为序列是非事务的,setval造成的改变不会由于事务的回滚而撤销。 nextval函数只能在主机上执行,备机不支持执行此函数。 pg_sequence_last_value(sequence_oid oid, OUT cache_value int16, OUT last_value int16) 描述:获取指定sequence的参数,包含缓存值和当前值。 返回类型:int16,int16 gs_get_sequence_parameters(sequence_oid) 描述:获取指定sequence的参数,包含起始值、最小值、最大值和递增值等。 返回类型:int16、int16、int16、int16、Boolean gs_get_sequence_last_value(sequence_oid oid, OUT cache_value int16, OUT last_value int16) 描述:获取指定sequence的参数,包含缓存值和当前值。 返回类型:int16、int16 last_insert_id() 描述:获取最近一次为自动增长列成功插入的第一个自动生成的值。 返回类型:int16 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 gaussdb=# create database b_format_db with dbcompatibility = 'b'; gaussdb=# \c b_format_db; b_format_db=# CREATE TABLE animals_test ( b_format_db=# id int PRIMARY KEY NOT NULL AUTO_INCREMENT, b_format_db=# name CHAR(30) NOT NULL b_format_db=# ); NOTICE: CREATE TABLE will create implicit sequence "animals_test_id_seq" for serial column "animals_test.id" NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "animals_test_pkey" for table "animals_test" CREATE TABLE b_format_db=# SELECT last_insert_id(); last_insert_id ---------------- 0 (1 row) b_format_db=# INSERT INTO animals_test (name) VALUES ('dog'); INSERT 0 1 b_format_db=# SELECT last_insert_id(); last_insert_id ---------------- 1 (1 row) b_format_db=# DROP TABLE animals_test; b_format_db=# \c postgres; gaussdb=# DROP DATABASE b_format_db; last_insert_id(int16) 描述:设置下一次last_insert_id()函数的返回值,并返回此值。若参数为NULL,将下一次last_insert_id()函数的返回值设为0,此函数返回NULL。 返回值类型:int16 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 gaussdb=# create database b_format_db with dbcompatibility = 'b'; gaussdb=# \c b_format_db; b_format_db=# SELECT last_insert_id(100); last_insert_id ---------------- 100 (1 row) b_format_db=# SELECT last_insert_id(); last_insert_id ---------------- 100 (1 row) b_format_db=# \c postgres; gaussdb=# DROP DATABASE b_format_db; last_insert_id()和last_insert_id(int16)是会话级别的函数,若当前会话未对自动增长列插入任何数据,last_insert_id()返回值为0。 last_insert_id()和last_insert_id(int16)仅在参数sql_compatibility='B'时可用。 父主题: 函数和操作符
  • 操作步骤 创建表空间 执行如下命令创建用户为jack,密码为********。 1 gaussdb=# CREATE USER jack IDENTIFIED BY '********'; 当结果显示为如下信息,则表示创建成功。 1 CREATE ROLE 执行如下命令创建表空间。 1 gaussdb=# CREATE TABLESPACE fastspace RELATIVE LOCATION 'my_tablespace/tablespace1'; 当结果显示为如下信息,则表示创建成功。 1 CREATE TABLESPACE 其中“fastspace”为新创建的表空间,“CN和DN数据目录/pg_location/my_tablespace/tablespace1”是用户拥有读写权限的空目录。 数据库系统管理员执行如下命令将“fastspace”表空间的访问权限授予数据用户jack。 1 gaussdb=# GRANT CREATE ON TABLESPACE fastspace TO jack; 当结果显示为如下信息,则表示授予成功。 1 GRANT
  • 背景信息 通过使用表空间,管理员可以控制一个数据库安装的磁盘布局。这样有以下优点: 如果初始化数据库所在的分区或者表空间已满,又不能逻辑上扩展更多空间,可以在不同的分区上创建和使用表空间,直到系统重新配置空间。 表空间允许管理员根据数据库对象的使用模式安排数据位置,从而提高性能。 一个频繁使用的索引可以存储在性能稳定且运算速度较快的磁盘上,比如一种固态设备。 一个存储归档的数据,很少使用的或者对性能要求不高的表可以存储在一个运算速度较慢的磁盘上。 管理员通过表空间可以设置占用的磁盘空间,用以在和其他数据共用分区的时候,防止表空间占用相同分区上的其他空间。 表空间可以控制数据库数据占用的磁盘空间。当表空间所在磁盘的使用率达到cm_server参数datastorage_threshold_value_check时,数据库将被设置为只读模式,当磁盘使用率降到cm_server参数datastorage_threshold_value_check以下时,数据库将恢复到读写模式。CM的磁盘自动检查功能默认是开启的,若未开启,请联系管理员开启。 表空间对应于一个文件系统目录,执行如下命令创建一个对应/pg_location/mount1/path1的表空间,并指定最大可使用空间为500GB。 1 2 --创建表空间。 gaussdb=# CREATE TABLESPACE ds_location1 LOCATION '/pg_location/mount1/path1' MAXSIZE '500G'; 通过MAXSIZE进行表空间配额管理对并发插入性能可能会有30%左右的影响,MAXSIZE指定每个DN的配额大小,每个DN实际的表空间容量和配额误差在500MB以内。请根据实际的情况确认是否需要设置表空间的最大值。 GaussDB自带了两个表空间:pg_default和pg_global。 默认表空间pg_default:用来存储非共享系统表、用户表、用户表index、临时表、临时表index、内部临时表的默认表空间。对应存储目录为实例数据目录下的base目录。 共享表空间pg_global:用来存放共享系统表的表空间。对应存储目录为实例数据目录下的global目录。
  • 注意事项 在公有云场景下一般不建议用户使用自定义的表空间。 原因:用户自定义表空间通常配合主存(即默认表空间所在的存储设备,如磁盘)以外的其它存储介质使用,以隔离不同业务可以使用的IO资源,而在公有云场景下,存储设备都是采用标准化的配置,无其它可用的存储介质,自定义表空间使用不当不利于系统长稳运行以及影响整体性能,因此建议使用默认表空间即可。 在主备环境下,创建表空间时不允许指定备机上权限不足的文件系统目录。
  • DB_ARGUMENTS DB_ARGUMENTS视图显示当前用户可访问的存储过程和函数的参数信息。该视图同时存在于PG_CATALOG和SYS Schema下。该视图所有用户都可以访问,显示当前用户可访问的所有信息。 表1 DB_ARGUMENTS字段 名称 类型 描述 owner character varying(128) 函数或存储过程的所有者。 object_name character varying(128) 函数或存储过程的名称。 package_name character varying(128) 包名。 object_id oid 函数或存储过程的OID。 overload character varying(40) 表示该函数是该名称的第n个重载函数。 subprogram_id numeric 包中函数或存储过程的位置。 argument_name character varying(128) 参数名称。 position numeric 该参数在参数列表中的位置,函数返回值位置默认为0。 sequence numeric 定义参数的顺序,从1开始,返回类型在前,然后是每个参数。 data_level numeric 复合类型参数的嵌套深度,此列的值始终为0,因为每个参数现在只显示一行。 data_type character varying(64) 参数的数据类型。 defaulted character varying(1) 参数是否有默认值: Y:表示有默认值。 N:表示没有默认值。 default_value text 暂不支持,值为NULL。 default_length numeric 暂不支持,值为NULL。 in_out character varying(9) 参数出入属性: IN:表示入参。 OUT:表示出参。 IN_OUT:表示出入参。 VARIADIC:表示VARIADIC参数。 data_length numeric 暂不支持,值为NULL。 data_precision numeric 暂不支持,值为NULL。 data_scale numeric 暂不支持,值为NULL。 radix numeric 数字的参数基数,smallint、integer、bigint、numeric、float为10,其余值为NULL。 character_set_name character varying(44) 暂不支持,值为NULL。 type_owner character varying(128) 数据类型所有者。 type_name character varying(128) 参数类型名,仅显示自定义类型。 type_subname character varying(128) 暂不支持,值为NULL。 type_link character varying(128) 暂不支持,值为NULL。 type_object_type character varying(7) type_name类型的类型: TABLE:表示参数为表类型。 VIEW:表示参数为视图类型。 其余值为NULL。 pls_type character varying(128) 对于数字类型参数,为参数的PL/SQL类型的名称,否则为空。 char_length numeric 暂不支持,值为NULL。 char_used character varying(1) 暂不支持,varchar,nvarchar2,bpchar,char类型置B,其余值为NULL。 origin_con_id character varying(256) 暂不支持,值为0。 父主题: 其他系统视图
  • 示例 重命名索引。 --创建test1表并为其创建索引。 gaussdb=# CREATE TABLE test1(col1 int, col2 int); gaussdb=# CREATE INDEX aa ON test1(col1); --将索引aa重命名为idx_test1_col1。 gaussdb=# ALTER INDEX aa RENAME TO idx_test1_col1; --查询test1表上的索引信息。 gaussdb=# SELECT tablename,indexname,tablespace FROM pg_indexes WHERE tablename = 'test1'; tablename | indexname | tablespace -----------+----------------+------------ test1 | idx_test1_col1 | (1 row) 修改索引所属表空间。 --创建表空间tbs_index1。 gaussdb=# CREATE TABLESPACE tbs_index1 RELATIVE LOCATION 'tablespace1/tbs_index1'; --修改索引idx_test1_col1的所属表空间为tbs_index1。 gaussdb=# ALTER INDEX IF EXISTS idx_test1_col1 SET TABLESPACE tbs_index1; --查询test1表上的索引信息。 gaussdb=# SELECT tablename,indexname,tablespace FROM pg_indexes WHERE tablename = 'test1'; tablename | indexname | tablespace -----------+----------------+------------ test1 | idx_test1_col1 | tbs_index1 (1 row) 修改与重置索引存储参数。 --查看索引idx_test1_col1详细信息。 gaussdb=# \di idx_test1_col1 List of relations Schema | Name | Type | Owner | Table | Storage --------+----------------+-------+-------+-------+--------- public | idx_test1_col1 | index | omm | test1 | (1 row) --修改索引idx_test1_col1 的填充因子。 gaussdb=# ALTER INDEX IF EXISTS idx_test1_col1 SET (FILLFACTOR = 70); --查看索引idx_test1_col1详细信息。 gaussdb=# \di idx_test1_col1 List of relations Schema | Name | Type | Owner | Table | Storage --------+----------------+-------+-------+-------+----------------- public | idx_test1_col1 | index | omm | test1 | {fillfactor=70} (1 row) --重置索引idx_test1_col1 的存储参数。 gaussdb=# ALTER INDEX IF EXISTS idx_test1_col1 RESET (FILLFACTOR); --查看索引idx_test1_col1详细信息。 gaussdb=# \di idx_test1_col1 List of relations Schema | Name | Type | Owner | Table | Storage --------+----------------+-------+-------+-------+--------- public | idx_test1_col1 | index | omm | test1 | (1 row) 修改索引可用性。 --设置索引idx_test1_col1不可用。 gaussdb=# ALTER INDEX IF EXISTS idx_test1_col1 UNUSABLE; --查看索引idx_test1_col1的可用性。 gaussdb=# SELECT indisusable FROM pg_index WHERE indexrelid = 'idx_test1_col1'::regclass; indisusable ------------- f (1 row) --重建索引idx_test1_col1。 gaussdb=# ALTER INDEX idx_test1_col1 REBUILD; --查看索引idx_test1_col1的可用性。 gaussdb=# SELECT indisusable FROM pg_index WHERE indexrelid = 'idx_test1_col1'::regclass; indisusable ------------- t (1 row) --删除。 gaussdb=# DROP INDEX idx_test1_col1; gaussdb=# DROP TABLE test1; gaussdb=# DROP TABLESPACE tbs_index1; 重命名索引分区。 --创建分区表test2。 gaussdb=# CREATE TABLE test2(col1 int, col2 int) PARTITION BY RANGE (col1)( PARTITION p1 VALUES LESS THAN (100), PARTITION p2 VALUES LESS THAN (200) ); --创建分区索引。 gaussdb=# CREATE INDEX idx_test2_col1 ON test2(col1) LOCAL( PARTITION p1, PARTITION p2 ); --重命名索引分区。 gaussdb=# ALTER INDEX idx_test2_col1 RENAME PARTITION p1 TO p1_test2_idx; gaussdb=# ALTER INDEX idx_test2_col1 RENAME PARTITION p2 TO p2_test2_idx; --查询索引idx_test2_col1分区的名称。 gaussdb=# SELECT relname FROM pg_partition WHERE parentid = 'idx_test2_col1'::regclass; relname -------------- p1_test2_idx p2_test2_idx (2 rows) 修改索引分区的所属表空间。 --创建表空间tbs_index2与tbs_index3。 gaussdb=# CREATE TABLESPACE tbs_index2 RELATIVE LOCATION 'tablespace1/tbs_index2'; gaussdb=# CREATE TABLESPACE tbs_index3 RELATIVE LOCATION 'tablespace1/tbs_index3'; --修改索引idx_test2_col1分区的所属表空间。 gaussdb=# ALTER INDEX idx_test2_col1 MOVE PARTITION p1_test2_idx TABLESPACE tbs_index2; gaussdb=# ALTER INDEX idx_test2_col1 MOVE PARTITION p2_test2_idx TABLESPACE tbs_index3; --查询索引idx_test2_col1分区的所属表空间。 gaussdb=# SELECT t1.relname index_name, t2.spcname tablespace_name FROM pg_partition t1, pg_tablespace t2 WHERE t1.parentid = 'idx_test2_col1'::regclass AND t1.reltablespace = t2.oid; index_name | tablespace_name --------------+----------------- p1_test2_idx | tbs_index2 p2_test2_idx | tbs_index3 (2 rows) --删除。 gaussdb=# DROP INDEX idx_test2_col1; gaussdb=# DROP TABLE test2; gaussdb=# DROP TABLESPACE tbs_index2; gaussdb=# DROP TABLESPACE tbs_index3;
  • 参数说明 index_name 要修改的索引名。 IF EXISTS 如果指定的索引不存在,则发出一个notice而不是error。 RENAME TO new_name 只改变索引的名称。对存储的数据没有影响。 new_name 新的索引名。 取值范围:字符串,且符合标识符命名规范。 SET TABLESPACE tablespace_name 改变索引的表空间为指定表空间,并且把索引相关的数据文件移动到新的表空间里。 tablespace_name 表空间的名称。 取值范围:已存在的表空间。 SET ( {storage_parameter = value} [, ... ] ) 改变索引的一个或多个索引方法特定的存储参数。需要注意的是索引内容不会被这个命令立即修改,根据参数的不同,可能需要使用REINDEX重建索引来获得期望的效果。 storage_parameter 索引方法特定的参数名。ACTIVE_PAGES表示索引的页面数量,可能比实际的物理文件页面少,可以用于优化器调优。目前只对ustore的分区表local索引生效,且会被vacuum、analyze更新(包括auto vacuum)。不建议用户手动设置该参数,该参数在分布式下无效。对GSI执行ALTER时,对INTERNAL_MASK、APPEND_MODE_INTERNAL、WAIT_CLEAN_GPI、PARTITION_DDL_FLAG、COLLATE、CROSSBUCKET和DEDUPLICATION参数不支持,行为同UBtree,支持FILLFACTOR、INDEXSPLIT参数,ACTIVE_PAGES和WAIT_CLEAN_CBI 不适用于GSI。 value 索引方法特定的存储参数的新值。根据参数的不同,这可能是一个数字或单词。 RESET ( { storage_parameter } [, ...] ) 重置索引的一个或多个索引方法特定的存储参数为缺省值。与SET一样,可能需要使用REINDEX来完全更新索引。 [ MODIFY PARTITION index_partition_name ] UNUSABLE 用于设置表或者索引分区上的索引不可用。 REBUILD [ PARTITION index_partition_name ] 用于重建表或者索引分区上的索引。重建索引时,若索引带有lpi_parallel_method选项,取值为PARTITION且表的parallel_workers选项大于0时,不支持对该索引并行重建;无该选项或选项取值为AUTO时,并行重建时会默认走页面级并行重建索引。详见LPI_PARALLEL_METHOD。 RENAME PARTITION index_partition_name TO new_index_partition_name 用于重命名索引分区。 MOVE PARTITION index_partition_name TABLESPACE new_tablespace 用于修改索引分区的所属表空间。 new_index_partition_name 新索引分区名。 index_partition_name 索引分区名。 new_tablespace 新表空间。 GSIVALID | GSIREADY 用于CREATE GLOBAL INDEX CONCURRENTLY/REINDEX INDEX CONCURRENTLY功能内部调用,修改分布式全局二级索引状态。 GSIUSABLE 此语法主要用于VACUUM FULL功能内部调用,修改分布式全局二级索引状态。 VISIBLE 用于设置索引状态为可见。 INVISIBLE 用于设置索引状态为不可见。 GSIGETXID 用于CREATE GLOBAL INDEX CONCURRENTLY/REINDEX INDEX CONCURRENTLY功能内部调用,将下一个未分配的xid和csn记录在各节点内的临时用户表的reloption中,以备合并临时表时的剪枝。 GSIMERGE 用于CREATE GLOBAL INDEX CONCURRENTLY/REINDEX INDEX CONCURRENTLY功能内部调用,合并分布式全局二级索引与临时用户表。 GSISWITCH 用于CREATE GLOBAL INDEX CONCURRENTLY/REINDEX INDEX CONCURRENTLY功能内部调用,在线重建分布式全局二级索引中切换新旧分布式全局二级索引。
  • 语法格式 重命名表索引的名称。 1 2 ALTER INDEX [ IF EXISTS ] index_name RENAME TO new_name; 修改表索引的所属空间。 1 2 ALTER INDEX [ IF EXISTS ] index_name SET TABLESPACE tablespace_name; 修改表索引的存储参数。 1 2 ALTER INDEX [ IF EXISTS ] index_name SET ( {storage_parameter = value} [, ... ] ); 重置表索引的存储参数。 1 2 ALTER INDEX [ IF EXISTS ] index_name RESET ( storage_parameter [, ... ] ); 设置表索引或索引分区不可用。 1 2 ALTER INDEX [ IF EXISTS ] index_name [ MODIFY PARTITION index_partition_name ] UNUSABLE; 重建表索引或索引分区。 1 2 ALTER INDEX index_name REBUILD [ PARTITION index_partition_name ]; 重命名索引分区。 1 2 ALTER INDEX [ IF EXISTS ] index_name RENAME PARTITION index_partition_name TO new_index_partition_name; 修改索引分区的所属表空间。 1 2 ALTER INDEX [ IF EXISTS ] index_name MOVE PARTITION index_partition_name TABLESPACE new_tablespace; 设置分布式全局二级索引状态。 ALTER INDEX [ IF EXISTS ] index_name GSIVALID; ALTER INDEX [ IF EXISTS ] index_name GSIREADY; 此语法主要用于CREATE GLOBAL INDEX CONCURRENTLY/REINDEX INDEX CONCURRENTLY功能内部调用,修改全局二级索引状态,用户不建议使用。如使用,会返回错误提示信息。 设置分布式全局二级索引可用。 ALTER INDEX [ IF EXISTS ] index_name GSIUSABLE; 此语法主要用于VACUUM FULL功能内部调用,修改全局二级索引状态,用户不建议使用,否则可能导致索引数据与表数据不一致。如需启用UNUSABLE状态的GSI,建议使用REINDEX INDEX语法重新创建GSI。 用于设置索引状态为可见。 ALTER INDEX [ IF EXISTS ] index_name VISIBLE; 此语法仅支持在ORA兼容性数据库下(即sql_compatibility = 'ORA')设置,在其他数据库兼容模式下不支持。 当disable_keyword_options参数设置为“visible”时,VISIBLE关键字不支持使用。 升级未提交阶段,不支持使用此语法。 用于设置索引状态为不可见。 ALTER INDEX [ IF EXISTS ] index_name INVISIBLE; 此语法仅支持在ORA兼容性数据库下(即sql_compatibility = 'ORA')设置,在其他数据库兼容模式下不支持。 当disable_keyword_options参数设置为“invisible”时,INVISIBLE关键字不支持使用。 升级未提交阶段,不支持使用此语法。 备机读场景下,设置索引状态为不可见后,查询语句的执行计划可能会发生变化,备机查询性能可能会受到影响。 用于将下一个未分配的xid和csn记录在各节点内的临时用户表的reloption中,以备合并临时表时的剪枝。 ALTER INDEX [ IF EXISTS ] index_name GSIGETXID; 此语法主要用于CREATE GLOBAL INDEX CONCURRENTLY/REINDEX INDEX CONCURRENTLY功能内部调用,用户不建议使用。如使用,会返回错误提示信息。 用于合并分布式全局二级索引与临时用户表。 ALTER INDEX [ IF EXISTS ] index_name GSIMERGE; 此语法主要用于CREATE GLOBAL INDEX CONCURRENTLY/REINDEX INDEX CONCURRENTLY功能内部调用,用户不建议使用。如使用,会返回错误提示信息。 用于在线重建分布式全局二级索引中切换新旧分布式全局二级索引。 ALTER INDEX [ IF EXISTS ] index_name GSISWITCH; 此语法主要用于CREATE GLOBAL INDEX CONCURRENTLY/REINDEX INDEX CONCURRENTLY功能内部调用,用户不建议使用。如使用,会返回错误提示信息。
  • 语法格式 修改自定义存储过程的附加参数。 ALTER PROCEDURE procedure_name ( [ { [ argname ] [ argmode ] argtype} [, ...] ] ) action [ ... ] [ RESTRICT ]; 其中附加参数action子句语法为: {CALLED ON NULL INPUT | STRICT} | {IMMUTABLE | STABLE | VOLATILE} | {SHIPPABLE | NOT SHIPPABLE} | {NOT FENCED | FENCED} | [ NOT ] LEAKPROOF | { [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER } | AUTHID { DEFINER | CURRENT_USER } | COST execution_cost | ROWS result_rows | SET configuration_parameter { { TO | = } { value | DEFAULT }| FROM CURRENT} | RESET {configuration_parameter | ALL} 修改自定义存储过程的名称。 ALTER PROCEDURE procedure_name( [ { [ argname ] [ argmode ] argtype} [, ...] ] ) RENAME TO new_name; 修改自定义存储过程的所属者。 ALTER PROCEDURE procedure_name( [ { [ argname ] [ argmode ] argtype} [, ...] ] ) OWNER TO new_owner; 修改自定义存储过程的模式。 ALTER PROCEDURE procedure_name( [ { [ argname ] [ argmode ] argtype} [, ...] ] ) SET SCHEMA new_schema;
  • 示例 --创建存储过程。 gaussdb=# CREATE OR REPLACE PROCEDURE test_proc(a int) IS proc_var int; BEGIN proc_var := a; END; / --用存储过程名重编译存储过程。 gaussdb=# ALTER PROCEDURE test_proc COMPILE; --用存储过程带类型签名重编译存储过程。 gaussdb=# ALTER PROCEDURE test_proc(int) COMPILE; --修改存储过程的执行规则为IMMUTABLE,即参数不变时返回结果相同。 gaussdb=# ALTER PROCEDURE test_proc(a int) IMMUTABLE; --新建用户。 gaussdb=# CREATE USER joe PASSWORD '********'; --修改存储过程的所有者。 gaussdb=# ALTER PROCEDURE test_proc(a int) OWNER TO joe; --新建模式。 gaussdb=# CREATE SCHEMA test; --修改存储过程的所属模式。 gaussdb=# ALTER PROCEDURE test_proc(a int) SET SCHEMA test; --删除存储过程,函数名需要指定所属模式。 gaussdb=# DROP PROCEDURE test.test_proc; --删除新建的用户和模式。 gaussdb=# DROP USER joe; gaussdb=# DROP SCHEMA test;
  • 参数说明 procedure_name 要修改的存储过程名称。 取值范围:已存在的存储过程名。 argmode 标识该参数是输入、输出参数。 取值范围:IN/OUT/INOUT/VARIADIC。 argname 参数名称。 取值范围:字符串,符合标识符命名规范。 argtype 存储过程参数的类型。 CALLED ON NULL INPUT 表明该存储过程的某些参数是NULL的时候可以按照正常的方式调用。缺省时与指定此参数的作用相同。 IMMUTABLE 表示该存储过程在给出同样的参数值时总是返回同样的结果。 STABLE 表示该存储过程不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。 VOLATILE 表示该存储过程值可以在一次表扫描内改变,不会做任何优化。 LEAKPROOF 表示该存储过程没有副作用,指出参数只包括返回值。LEAKPROOF只能由系统管理员设置。 EXTERNAL (可选)目的是和SQL兼容,这个特性适合于所有函数,而不仅是外部函数。 SECURITY INVOKER AUTHID CURRENT_USER 表明该存储过程将以调用它的用户的权限执行。缺省时与指定此参数的作用相同。 SECURITY INVOKER和AUTHID CURRENT_USER的功能相同。 SECURITY DEFINER AUTHID DEFINER 声明该存储过程将以创建它的用户的权限执行。 AUTHID DEFINER和SECURITY DEFINER的功能相同。 COST execution_cost 用来估计存储过程的执行成本。 execution_cost以cpu_operator_cost为单位。 取值范围:正数。 ROWS result_rows 估计存储过程返回的行数。用于存储过程返回的是一个集合。 取值范围:正数,默认值是1000行。 configuration_parameter value 把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。 取值范围:字符串。 DEFAULT OFF RESET 用户指定的值:需要满足修改参数的取值限制 FROM CURRENT 取当前会话中的值设置为configuration_parameter的值。 new_name 存储过程的新名称。要修改存储过程的所属模式,必须拥有新模式的CREATE权限。 取值范围:字符串,符合标识符命名规范。 new_owner 存储过程的新所有者。要修改存储过程的所有者,新所有者必须拥有该存储过程所属模式的CREATE权限。 取值范围:已存在的用户角色。 new_schema 存储过程的新模式。 取值范围:已存在的模式。
  • 注意事项 只有存储过程的所有者或者被授予了存储过程ALTER权限的用户才能执行ALTER PROCEDURE命令,系统管理员默认拥有该权限。针对所要修改属性的不同,还有以下权限约束: 如果存储过程中涉及对临时表相关的操作,则无法使用ALTER PROCEDURE。 修改存储过程的所有者或修改存储过程的模式,当前用户必须是该存储过程的所有者或者系统管理员,且该用户是新所有者角色的成员。 只有系统管理员和初始化用户可以将procedure的schema修改成public。
  • 示例 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 gaussdb=# CREATE OR REPLACE PROCEDURE proc_case_branch(pi_result in integer, pi_return out integer) AS BEGIN CASE pi_result WHEN 1 THEN pi_return := 111; WHEN 2 THEN pi_return := 222; WHEN 3 THEN pi_return := 333; WHEN 6 THEN pi_return := 444; WHEN 7 THEN pi_return := 555; WHEN 8 THEN pi_return := 666; WHEN 9 THEN pi_return := 777; WHEN 10 THEN pi_return := 888; ELSE pi_return := 999; END CASE; raise info 'pi_return : %',pi_return ; END; / CREATE PROCEDURE gaussdb=# CALL proc_case_branch(3,0); INFO: pi_return : 333 pi_return ----------- 333 (1 row) --删除存储过程 gaussdb=# DROP PROCEDURE proc_case_branch; DROP PROCEDURE
  • DB_TAB_HISTOG RAM S DB_TAB_HISTOGRAMS视图显示当前用户可访问的表和视图的直方图统计信息,即表各列数据的分布情况。所有用户都可以访问该视图。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 DB_TAB_HISTOGRAMS字段 名称 类型 描述 owner character varying(128) 表的拥有者。 table_name character varying(128) 表名。 column_name character varying(4000) 列名。 endpoint_number numeric 直方图的桶号。 endpoint_value numeric 暂不支持,值为NULL。 endpoint_actual_value character varying(4000) 桶端点的实际值。 endpoint_actual_value_raw raw 暂不支持,值为NULL。 endpoint_repeat_count numeric 暂不支持,值为NULL。 scope character varying(7) 暂不支持,值为SHARED。 父主题: 其他系统视图
  • PG_AMPROC PG_AMPROC系统表存储有关与访问方法操作符族相关联的支持过程的信息。每个属于操作符族的支持过程都占有一行。 表1 PG_AMPROC字段 名称 类型 引用 描述 oid oid - 行标识符(隐含字段,必须明确选择)。 amprocfamily oid PG_OPFAMILY.oid 该项的操作符族。 amproclefttype oid PG_TYPE.oid 相关操作符的左输入数据类型。 常见的数据类型请参见数据类型。 amprocrighttype oid PG_TYPE.oid 相关操作符的右输入数据类型。 常见的数据类型请参见数据类型。 amprocnum smallint - 支持过程编号。 amproc regproc PG_PROC.proname 过程的OID。 amproclefttype和amprocrighttype字段的习惯解释,标识一个特定支持过程支持的操作符的左和右输入类型。对于某些访问方式,匹配支持过程本身的输入数据类型,对其他的则不这样。有一个对索引的“缺省”支持过程的概念,amproclefttype和amprocrighttype都等于索引操作符类的opcintype。 父主题: 其他系统表
  • 数据类型介绍 DBE_SQL.DESC_REC 该类型是复合类型,用来存储SQL_DESCRIBE_COLUMNS接口中的描述信息。 DBE_SQL.DESC_REC类型的原型为: 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE TYPE DBE_SQL.DESC_REC AS ( col_type int, col_max_len int, col_name VARCHAR2(32), col_name_len int, col_schema_name VARCHAR2(32), col_schema_name_len int, col_precision int, col_scale int, col_charsetid int, col_charsetform int, col_null_ok BOOLEAN ); DBE_SQL.DESC_TAB 该类型是DESC_REC的TABLE类型,通过TABLE OF语法实现。 DBE_SQL.DESC_TAB类型的原型为: 1 CREATE TYPE DBE_SQL.DESC_TAB AS TABLE OF DBE_SQL.DESC_REC INDEX BY INTEGER; DBE_SQL.DATE_TABLE 该类型是DATE的TABLE类型,通过TABLE OF语法实现。 DBE_SQL.DATE_TABLE类型的原型为: 1 CREATE TYPE DBE_SQL.DATE_TABLE AS TABLE OF DATE INDEX BY INTEGER; DBE_SQL.NUMBER_TABLE 该类型是NUMBER的TABLE类型,通过TABLE OF语法实现。 DBE_SQL.NUMBER_TABLE类型的原型为: 1 CREATE TYPE DBE_SQL.NUMBER_TABLE AS TABLE OF NUMBER INDEX BY INTEGER; DBE_SQL.VARCHAR2_TABLE 该类型是VARCHAR2的TABLE类型,通过TABLE OF语法实现。 DBE_SQL.VARCHAR2_TABLE类型的原型为: 1 CREATE TYPE DBE_SQL.VARCHAR2_TABLE AS TABLE OF VARCHAR2(32767) INDEX BY INTEGER;
共100000条