华为云用户手册

  • 特殊值 GaussDB (DWS)支持几个特殊值,在读取的时候将被转换成普通的日期/时间值,请参考表5。 表5 特殊值 输入字符串 适用类型 描述 epoch date,timestamp 1970-01-01 00:00:00+00 (Unix系统零时) infinity timestamp 比任何其他时间戳都晚 -infinity timestamp 比任何其他时间戳都早 now date,time,timestamp 当前事务的开始时间 today date,timestamp 今日午夜 tomorrow date,timestamp 明日午夜 yesterday date,timestamp 昨日午夜 allballs time 00:00:00.00 UTC
  • 示例 显示用字母t和f输出boolean值。 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728 --创建表。CREATE TABLE bool_type_t1 ( BT_COL1 BOOLEAN, BT_COL2 TEXT) DISTRIBUTE BY HASH(BT_COL2);--插入数据。INSERT INTO bool_type_t1 VALUES (TRUE, 'sic est');INSERT INTO bool_type_t1 VALUES (FALSE, 'non est');--查看数据。SELECT * FROM bool_type_t1; bt_col1 | bt_col2 ---------+--------- t | sic est f | non est(2 rows)SELECT * FROM bool_type_t1 WHERE bt_col1 = 't'; bt_col1 | bt_col2 ---------+--------- t | sic est(1 row)--删除表。DROP TABLE bool_type_t1;
  • 二进制类型 GaussDB(DWS)支持的二进制类型请参见表1。 表1 二进制类型 名称 描述 存储空间 BLOB 二进制大对象 目前BLOB支持的外部存取接口仅为: DBMS_LOB.GETLENGTH DBMS_LOB.READ DBMS_LOB.WRITE DBMS_LOB.WRITEAPPEND DBMS_LOB.COPY DBMS_LOB.ERASE 这些接口详细说明请参见DBMS_LOB。 说明: 列存不支持BLOB类型 最大为1G-8023B(即1073733621B)。 RAW 变长的十六进制类型 说明: 列存不支持RAW类型 4字节加上实际的十六进制字符串。最大为1G-8023B(即1073733621B)。 BYTEA 变长的二进制字符串 4字节加上实际的二进制字符串。最大为1G-8023B(即1073733621B)。 除了每列的大小限制以外,每个元组的总大小也不可超过1G-8203字节。 示例 1 2 3 4 5 6 7 8 910111213141516171819202122 --创建表。CREATE TABLE blob_type_t1 ( BT_COL1 INTEGER, BT_COL2 BLOB, BT_COL3 RAW, BT_COL4 BYTEA) DISTRIBUTE BY REPLICATION;--插入数据。INSERT INTO blob_type_t1 VALUES(10,empty_blob(),HEXTORAW('DEADBEEF'),E'\\xDEADBEEF');--查询表中的数据。SELECT * FROM blob_type_t1; bt_col1 | bt_col2 | bt_col3 | bt_col4 ---------+---------+----------+------------ 10 | | DEADBEEF | \xdeadbeef(1 row)--删除表。DROP TABLE blob_type_t1; 父主题: 数据类型
  • 位串类型 位串就是一串1和0的字符串。它们可以用于存储位掩码。 GaussDB(DWS)支持两种位串类型:bit(n)和bit varying(n),其中n是一个正整数。 bit类型的数据必须准确匹配长度n,如果存储短或者长的数据都会报错。bit varying类型的数据是最长为n的变长类型,超过n的类型会被拒绝。一个没有长度的bit等效于bit(1),没有长度的bit varying表示没有长度限制。 如果显式地把一个位串值转换成bit(n),则此位串右边的内容将被截断或者在右边补齐零,直到刚好n位,而且不会抛出任何错误。类似地,如果显式地把一个位串数值转换成bit varying(n),如果它超过了n位,则它的右边将被截断。 位串类型使用示例: 创建示例表bit_type_t1: 123456 CREATE TABLE bit_type_t1 ( BT_COL1 INTEGER, BT_COL2 BIT(3), BT_COL3 BIT VARYING(5)) DISTRIBUTE BY REPLICATION; 插入数据: 1 INSERT INTO bit_type_t1 VALUES(1, B'101', B'00'); 插入数据的长度不符合类型的标准会报错。 123 INSERT INTO bit_type_t1 VALUES(2, B'10', B'101');ERROR: bit string length 2 does not match type bit(3)CONTEXT: referenced column: bt_col2 将不符合类型长度的数据进行转换: 1 INSERT INTO bit_type_t1 VALUES(2, B'10'::bit(3), B'101'); 查看数据: 123456 SELECT * FROM bit_type_t1; bt_col1 | bt_col2 | bt_col3 ---------+---------+--------- 1 | 101 | 00 2 | 100 | 101(2 rows) 父主题: 数据类型
  • UUID格式 UUID由开放软件基金会标准化,作为分布式计算环境的一部分,在互联网工程任务组(IETF)公布的RFC 4122标准中对UUID进行了标准化。标准的UUID由36个字符组成,其中包括32个16进制数字和4个连字符‘-’,形式为8-4-4-4-12,标准的UUID示例如下: 1 a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 除了标准型的UUID,GaussDB(DWS)同样支持以其他方式输入:大写字母和数字、由花括号包围的标准格式、省略部分或所有连字符、在任意一组四位数字之后加一个连字符。示例: 1234 A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}a0eebc999c0b4ef8bb6d6bb9bd380a11a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11
  • jsonb高级特性 json和jsonb的主要差异在于存储方式上的不同,jsonb存储的是解析后的二进制,能够体现JSON的层次结构,更便于直接访问等,因此jsonb较json具有很多高级特性。 格式归一化 对于输入的object-json字符串,解析成jsonb二进制后,会天然的丢弃语义上无关紧要的细节,比如空格: 12345 SELECT ' [1, " a ", {"a" :1 }] '::jsonb; jsonb----------------------[1, " a ", {"a": 1}](1 row) 对于object-json,会删除重复的键值,只保留最后一个出现的,例如: 12345 SELECT '{"a" : 1, "a" : 2}'::jsonb;jsonb----------{"a": 2}(1 row) 对于object-json,键值会重新进行排序,排序规则:长度长的在后、长度相等则ascii码大的在后,例如: 12345 SELECT '{"aa" : 1, "b" : 2, "a" : 3}'::jsonb; jsonb---------------------------{"a": 3, "b": 2, "aa": 1}(1 row)
  • 输入格式 json和jsonb输入必须是一个符合JSON数据格式的字符串,此字符串用单引号''声明。 null (null-json):仅null,全小写。 12 SELECT 'null'::json; -- sucSELECT 'NULL'::jsonb; -- err 数字 (num-json):正负整数、小数、0,支持科学计数法。 1234 SELECT '1'::json;SELECT '-1.5'::json;SELECT '-1.5e-5'::jsonb, '-1.5e+2'::jsonb;SELECT '001'::json, '+15'::json, 'NaN'::json; -- 不支持多余的前导0,正数的+号,以及NaN和infinity。 布尔(bool-json):仅true、false,全小写。 12 SELECT 'true'::json;SELECT 'false'::jsonb; 字符串(str-json):必须是加双引号的字符串。 12 SELECT '"a"'::json;SELECT '"abc"'::jsonb; 数组(array-json):使用中括号[]包裹,满足数组书写条件。数组内元素类型可以是任意合法的JSON,且不要求类型一致。 123 SELECT '[1, 2, "foo", null]'::json;SELECT '[]'::json;SELECT '[1, 2, "foo", null, [[]], {}]'::jsonb; 对象(object-json):使用大括号{}包裹,键必须是满足JSON字符串规则的字符串,值可以是任意合法的JSON。 123 SELECT '{}'::json;SELECT '{"a": 1, "b": {"a": 2, "b": null}}'::json;SELECT '{"foo": [true, "bar"], "tags": {"a": 1, "b": null}}'::jsonb;
  • macaddr macaddr类型存储MAC地址,也就是以太网卡硬件地址(尽管MAC地址还用于其它用途)。可以接受下列格式: '08:00:2b:01:02:03''08-00-2b-01-02-03''08002b:010203''08002b-010203''0800.2b01.0203''08002b010203' 这些示例都表示同一个地址。对于数据位a到f,大小写都行。输出时都是以第一种形式展示。
  • inet inet类型在一个数据区域内保存主机的IPv4或IPv6地址,以及一个可选子网。主机地址中网络地址的位数表示子网(“子网掩码”)。如果子网掩码是32并且地址是IPv4,则这个值不表示任何子网,只表示一台主机。在IPv6里,地址长度是128位,因此128位表示唯一的主机地址。 该类型的输入格式是address/y,address表示IPv4或者IPv6地址,y是子网掩码的二进制位数。如果省略/y,则子网掩码对IPv4是32,对IPv6是128,所以该值表示只有一台主机。如果该值表示只有一台主机,/y将不会显示。 inet和cidr类型之间的基本区别是inet接受子网掩码,而cidr不接受。
  • cidr cidr(无类别域间路由,Classless Inter-Domain Routing)类型,保存一个IPv4或IPv6网络地址。声明网络格式为address/y,address表示IPv4或者IPv6地址,y表示子网掩码的二进制位数。如果省略y,则掩码部分使用已有类别的网络编号系统进行计算,但要求输入的数据已经包括了确定掩码所需的所有字节。 示例一:CIDR格式换算为IP地址网段 例如,10.0.0.0/8换算为32位二进制地址:00001010.00000000.00000000.00000000。其中/8表示8位网络ID,即32位二进制地址中前8位是固定不变的,对应网段为:00001010.00000000.00000000.00000000~00001010.11111111.11111111.11111111。则换算为十进制后,10.0.0.0/8表示:子网掩码为255.0.0.0,对应网段为10.0.0.0~10.255.255.255。 示例二:IP地址网段换算为CIDR格式 例如,192.168.0.0~192.168.31.255,后两段IP换算为二进制地址:00000000.00000000~00011111.11111111,可以得出前19位(8*2+3)是固定不变的,则换算为CIDR格式后,表示为:192.168.0.0/19。 表2 cidr类型输入举例 cidr输入 cidr输出 abbrev(cidr) 192.168.100.128/25 192.168.100.128/25 192.168.100.128/25 192.168/24 192.168.0.0/24 192.168.0/24 192.168/25 192.168.0.0/25 192.168.0.0/25 192.168.1 192.168.1.0/24 192.168.1/24 192.168 192.168.0.0/24 192.168.0/24 10.1.2 10.1.2.0/24 10.1.2/24 10.1 10.1.0.0/16 10.1/16 10 10.0.0.0/8 10/8 10.1.2.3/32 10.1.2.3/32 10.1.2.3/32 2001:4f8:3:ba::/64 2001:4f8:3:ba::/64 2001:4f8:3:ba::/64 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128 2001:4f8:3:ba:2e0:81ff:fe22:d1f1
  • SQL语法文本格式约定 为了方便对语法使用的理解,在文档中对SQL语法文本按如下格式进行表述。 格式 意义 大写 语法关键字(语句中保持不变、必须与语法格式一致的部分)采用大写表示。 小写 参数(语句中必须由实际值进行替代的部分)采用小写表示。 [ ] 可选语法项。表示用“[ ]”括起来的部分是可选的。 { } 必选语法项。 ... 表示前面的元素可重复出现。 [ x | y | ... ] 表示从两个或多个选项中选取一个或者不选。 { x | y | ... } 表示从两个或多个选项中选取一个。 [x | y | ... ] [ ... ] 表示可选多个参数或者不选,如果选择多个参数,则参数之间用空格分隔。 [ x | y | ... ] [ ,... ] 表示可选多个参数或者不选,如果选择多个参数,则参数之间用逗号分隔。 { x | y | ... } [ ... ] 表示可选多个参数,至少选一个,如果选择多个参数,则参数之间以空格分隔。 { x | y | ... } [ ,... ] 表示可选多个参数,至少选一个,如果选择多个参数,则参数之间用逗号分隔。
  • 货币类型 货币类型存储带有固定小数精度的货币金额。表1中显示的范围假设有两位小数。可以以任意格式输入,包括整型、浮点型或者典型的货币格式(如“$1,000.00”)。根据区域字符集,输出一般是最后一种形式。 表1 货币类型 名字 存储容量 描述 范围 money 8 字节 货币金额 -92233720368547758.08 到 +92233720368547758.07 numeric,int和bigint类型的值可以转化为money类型。如果从real和double precision类型转换到money类型,可以先转化为numeric类型,再转化为money类型,例如: 1 SELECT '12.34'::float8::numeric::money; 这种用法是不推荐使用的。浮点数不应该用来处理货币类型,因为小数点的位数可能会导致错误。 money类型的值可以转换为numeric类型而不丢失精度。转换为其他类型可能丢失精度,并且必须通过以下两步来完成: 1 SELECT '52093.89'::money::numeric::float8; 当一个money类型的值除以另一个money类型的值时,结果是double precision(也就是,一个纯数字,而不是money类型);在运算过程中货币单位相互抵消。 父主题: 数据类型
  • 示例 创建表reason_t2,并向表中插入数据: 1 2 3 4 5 6 7 8 910111213 CREATE TABLE reason_t2( a int primary key, b int, c int);INSERT INTO reason_t2 VALUES (1, 2, 3);SELECT * FROM reason_t2 ORDER BY 1; a | b | c---+---+--- 1 | 2 | 3 (1 rows) 向表reason_t2中插入两条数据,一条有冲突,一条无冲突。有冲突的数据进行忽略,无冲突的数据进行插入: 1234567 INSERT INTO reason_t2 VALUES (1, 4, 5),(2, 6, 7) ON CONFLICT(a) DO NOTHING;SELECT * FROM reason_t2 ORDER BY 1; a | b | c---+---+---- 1 | 2 | 3 2 | 6 | 7(2 rows) 向表reason_t2中插入数据,一条有冲突,一条无冲突。有冲突的数据进行更新,无冲突的数据进行插入: 12345678 INSERT INTO reason_t2 VALUES (1, 4, 5),(3, 8, 9) ON CONFLICT(a) DO UPDATE SET b = EXCLUDED.b, c = EXCLUDED.c;SELECT * FROM reason_t2 ORDER BY 1; a | b | c---+---+---- 1 | 4 | 5 2 | 6 | 7 3 | 8 | 9 (3 rows) 根据过滤条件筛选被更新的行: 12345678 INSERT INTO reason_t2 VALUES (2, 7, 8) ON CONFLICT (a) DO UPDATE SET b = excluded.b, c = excluded.c WHERE reason_t2.c = 7;SELECT * FROM reason_t2 ORDER BY 1; a | b | c---+---+--- 1 | 4 | 5 2 | 7 | 8 3 | 8 | 9(3 rows) 向表reason_t中插入数据,有冲突的数据进行更新并调整更新映射关系,即c列更新到b,b列更新到c: 12345678 INSERT INTO reason_t2 VALUES (1, 2, 3) ON CONFLICT (a) DO UPDATE SET b = excluded.c, c = excluded.b;SELECT * FROM reason_t2 ORDER BY 1; a | b | c---+---+--- 1 | 3 | 2 2 | 7 | 8 3 | 8 | 9(3 rows)
  • 语法格式 详细介绍请参见INSERT的语法格式。有两种UPSERT语法格式: 表1 UPSERT语法格式 语法格式 冲突更新 冲突忽略 第一种:不指定索引 INSERT INTO ON DUPLICATE KEY UPDATE INSERT IGNOREINSERT INTO ON CONFLICT DO NOTHING 第二种:从指定列名或者约束上可以推断唯一约束 INSERT INTO ON CONFLICT(...) DO UPDATE SETINSERT INTO ON CONFLICT ON CONSTRAINT con_name DO UPDATE SET INSERT INTO ON CONFLICT(...) DO NOTHINGINSERT INTO ON CONFLICT ON CONSTRAINT con_name DO NOTHING
  • RoaringBitmap类型 GaussDB(DWS)自8.1.3集群版本开始,支持RoaringBitmap数据类型,用于存储位图数据集。 roaringbitmap数据类型支持行存,列存表。 表1 RoaringBitmap类型 名字 存储容量 描述 范围 RoaringBitmap 32 字节 存储位图数据集 -2,147,483,648~2,147,483,647 示例:创建带有roaringbitmap数据类型的表。 12 CREATE TABLE r_row (a int ,b text, c roaringbitmap);CREATE TABLE r_col (a int ,b text, c roaringbitmap) with (orientation=column); 父主题: 数据类型
  • rb_build_agg(int) 描述:将分组内的int值聚合成一个roaringbitmap值。 返回值类型:roaringbitmap 示例: 123456 CREATE TABLE t1 (a int ,b int);NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using round-robin as the distribution mode by default.HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.CREATE TABLEINSERT INTO t1 SELECT generate_series(1,10),generate_series(1,20,2);INSERT 0 10 1 2 3 4 5 6 7 8 91011121314 SELECT rb_iterate(rb_build_agg(b)) FROM t1;rb_iterate------------135791113151719(10 rows)
  • rb_or_agg(roaringbitmap) 描述:将分组内的roaringbitmap按照并的逻辑组合成一个roaringbitmap。 示例: 1 2 3 4 5 6 7 8 91011121314 SELECT a, rb_to_array(rb_or_agg(b)) FROM r1 GROUP BY a ORDER BY a; a | rb_to_array----+------------- 1 | {1} 2 | {3,5} 3 | {5,9} 4 | {7,13} 5 | {9,17} 6 | {1,11} 7 | {5,13} 8 | {9,15} 9 | {13,17} 10 | {17,19}(10 rows)
  • rb_xor_agg(roaringbitmap) 描述:将分组内的roaringbitmap按照异或的逻辑组合成一个roaringbitmap。 示例: 1 2 3 4 5 6 7 8 91011121314 SELECT a, rb_to_array(rb_xor_agg(b)) FROM r1 GROUP BY a ORDER BY a;a | rb_to_array----+------------- 1 | {} 2 | {5} 3 | {9} 4 | {13} 5 | {17} 6 | {1} 7 | {5} 8 | {9} 9 | {13} 10 | {17}(10 rows)
  • rb_and_agg(roaringbitmap) 描述:将分组内的roaringbitmap数据按照交的操作聚合成一个roaringbitmap集合。 示例: 1 2 3 4 5 6 7 8 9101112131415161718 CREATE TABLE r1(a int ,b roaringbitmap);INSERT INTO r1 SELECT a, rb_build_agg(b) FROM t1 GROUP BY a;INSERT INTO t1 SELECT generate_series(1,10),generate_series(1,20,4);INSERT INTO r1 SELECT a, rb_build_agg(b) FROM t1 GROUP BY a;SELECT a, rb_to_array(rb_and_agg(b)) FROM r1 GROUP BY a ORDER BY a; a | rb_to_array----+------------- 1 | {1} 2 | {3} 3 | {5} 4 | {7} 5 | {9} 6 | {11} 7 | {13} 8 | {15} 9 | {17}10 | {19}(10 rows)
  • rb_and_cardinality_agg(roaringbitmap) 描述:分组内的roaringbitmap按照交集计算后的基数。 返回值类型:int 示例: 1 2 3 4 5 6 7 8 91011121314 SELECT a, rb_and_cardinality_agg(b) FROM r1 GROUP BY a ORDER BY 1; a | rb_and_cardinality_agg----+------------------------ 1 | 1 2 | 1 3 | 1 4 | 1 5 | 1 6 | 1 7 | 1 8 | 1 9 | 1 10 | 1(10 rows)
  • rb_or_cardinality_agg(roaringbitmap) 描述:将分组内的roaringbitmap按照并集计算后的基数。 示例: 1 2 3 4 5 6 7 8 91011121314 SELECT a, rb_or_cardinality_agg(b) FROM r1 GROUP BY a ORDER BY 1; a | rb_or_cardinality_agg----+----------------------- 1 | 1 2 | 2 3 | 2 4 | 2 5 | 2 6 | 2 7 | 2 8 | 2 9 | 2 10 | 2(10 rows)
  • rb_xor_cardinality_agg(roaringbitmap) 描述:将分组内的roaringbitmap按照异或的逻辑合并后的基数。 示例: 1 2 3 4 5 6 7 8 91011121314 SELECT a, rb_xor_cardinality_agg(b) FROM r1 GROUP BY a ORDER BY 1; a | rb_xor_cardinality_agg----+------------------------ 1 | 0 2 | 1 3 | 1 4 | 1 5 | 1 6 | 1 7 | 1 8 | 1 9 | 1 10 | 1(10 rows)
  • to_tsvector([ config regconfig , ] document text) 描述:去除文件信息,并转换为tsvector类型。 返回类型:tsvector 示例: 12345 SELECT to_tsvector('english', 'The Fat Rats'); to_tsvector ----------------- 'fat':2 'rat':3(1 row)
  • ts_rank_cd([ weights float4[], ] vector tsvector, query tsquery [, normalization integer ]) 描述:排序文件查询使用覆盖密度。 返回类型:float4 示例: 12345 SELECT ts_rank_cd('hello world'::tsvector, 'world'::tsquery); ts_rank_cd ------------ 0(1 row)
  • setweight(tsvector, "char") 描述:给tsvector类型的每个元素分配权值。 返回类型:tsvector 示例: 12345 SELECT setweight('fat:2,4 cat:3 rat:5B'::tsvector, 'A'); setweight ------------------------------- 'cat':3A 'fat':2A,4A 'rat':5A(1 row)
  • ts_rewrite(query tsquery, select text) 描述:使用SELECT命令的结果替代目标中tsquery类型的单词。 返回类型:tsquery 示例: 12345 SELECT ts_rewrite('world'::tsquery, 'select ''world''::tsquery, ''hello''::tsquery'); ts_rewrite ------------ 'hello'(1 row)
  • ts_rewrite(query tsquery, target tsquery, substitute tsquery) 描述:替换目标tsquery类型的单词。 返回类型:tsquery 示例: 12345 SELECT ts_rewrite('a & b'::tsquery, 'a'::tsquery, 'foo|bar'::tsquery); ts_rewrite ------------------------- 'b' & ( 'foo' | 'bar' )(1 row)
  • ts_rank([ weights float4[], ] vector tsvector, query tsquery [, normalization integer ]) 描述:文档查询排名。 返回类型:float4 示例: 12345 SELECT ts_rank('hello world'::tsvector, 'world'::tsquery); ts_rank ---------- .0607927(1 row)
  • plainto_tsquery([ config regconfig , ] query text) 描述:产生tsquery类型的词汇,并忽略标点。 返回类型:tsquery 示例: 12345 SELECT plainto_tsquery('english', 'The Fat Rats'); plainto_tsquery ----------------- 'fat' & 'rat'(1 row)
  • - 描述:减 示例: 1 2 3 4 5 6 7 8 910 SELECT inet '192.168.1.43' - 36 AS RESULT; result ------------- 192.168.1.7(1 row)SELECT inet '192.168.1.43' - inet '192.168.1.19' AS RESULT; result -------- 24(1 row)
共100000条
提示

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