云服务器内容精选

  • 多边形 多边形由一系列点代表(多边形的顶点)。多边形可以认为与闭合路径一样,但是存储方式不一样而且有自己的一套支持函数。 用下面的语法描述polygon的数值: ( ( x1 , y1 ) , ... , ( xn , yn ) ) ( x1 , y1 ) , ... , ( xn , yn ) ( x1 , y1 , ... , xn , yn ) x1 , y1 , ... , xn , yn 点表示多边形的顶点,点的数值类型为float8类型。 多边形输出使用第一种语法。 示例: gaussdb=# SELECT polygon(box '((0,0),(1,1))'); polygon --------------------------- ((0,0),(0,1),(1,1),(1,0)) (1 row)
  • 线段 线段(lseg)是用一对点来代表的。用下面的语法描述lseg的数值: [ ( x1 , y1 ) , ( x2 , y2 ) ] ( ( x1 , y1 ) , ( x2 , y2 ) ) ( x1 , y1 ) , ( x2 , y2 ) x1 , y1 , x2 , y2 (x1,y1)和(x2,y2)表示线段的端点,点的数值类型为float8类型。 线段输出使用第一种语法。 示例: gaussdb=# SELECT lseg(point(1.1, 2.2), point(3.3, 4.4)); lseg ----------------------- [(1.1,2.2),(3.3,4.4)] (1 row)
  • 矩形 矩形是用一对对角点来表示的。用下面的语法描述box的值: ( ( x1 , y1 ) , ( x2 , y2 ) ) ( x1 , y1 ) , ( x2 , y2 ) x1 , y1 , x2 , y2 (x1,y1)和(x2,y2)表示矩形的一对对角点,点的数值类型为float8类型。 矩形的输出使用第二种语法。 任何两个对角都可以出现在输入中,但按照该种顺序,右上角和左下角的值会被重新排序以存储。 示例: gaussdb=# SELECT box(point(1.1, 2.2), point(3.3, 4.4)); box --------------------- (3.3,4.4),(1.1,2.2) (1 row)
  • 路径 路径由一系列连接的点组成。路径可能是开放的,也就是认为列表中第一个点和最后一个点没有连接,也可能是闭合的,这时认为第一个点和最后一个点连接起来。 用下面的语法描述path的数值: [ ( x1 , y1 ) , ... , ( xn , yn ) ] ( ( x1 , y1 ) , ... , ( xn , yn ) ) ( x1 , y1 ) , ... , ( xn , yn ) ( x1 , y1 , ... , xn , yn ) x1 , y1 , ... , xn , yn 点表示组成路径的线段的端点,点的数值类型为float8类型。方括号([])表明一个开放的路径,圆括号(())表明一个闭合的路径。当最外层的括号被省略,如在第三至第五语法,会假定一个封闭的路径。 路径的输出使用第一种或第二种语法输出。 示例: gaussdb=# SELECT path(polygon '((0,0),(1,1),(2,0))'); path --------------------- ((0,0),(1,1),(2,0)) (1 row)
  • 离散范围类型 一种范围的元素类型具有一个定义的“步长”,例如integer或date。在这些类型中,如果两个元素之间没有合法值,它们可以被说成是相邻。这与连续范围相反,连续范围中总是(或者几乎总是)可以在两个给定值之间标识其他元素值。例如,numeric类型之上的一个范围就是连续的,timestamp上的范围也是(尽管timestamp具有有限的精度,并且在理论上可以被当作离散的,但是可以认为它是连续的,因为通常并不关心它的步长)。 另一种考虑离散范围类型的方法是对每一个元素值都有一个清晰的“下一个”或“上一个”值。通过选择原来给定的下一个或上一个元素值来取代它,就可以在一个范围界限的包含和排除表达之间转换。例如,在一个整数范围类型中,[4,8]和(3,9)表示相同的值集合,但是对于numeric上的范围就不是这样。 一个离散范围类型应该具有一个正规化函数,即明确元素类型的指定步长。正规化函数负责把范围类型的相等值转换成具有相同的表达,特别是与包含或者排除界限一致。如果没有指定一个正规化函数,那么具有不同格式的范围将总是会被当作不等,即使它们实际上是表达相同的一组值。 内建的范围类型int4range、int8range和daterange都使用一种正规的形式,该形式包括下界并且排除上界,即[)。但是用户定义的范围类型可以使用其他形式。
  • 无限(无界)范围 一个范围的下界可以被忽略,意味着所有小于上界的值都被包括在范围中。 同样,如果范围的上界被忽略,那么所有比下界大的值都被包括在范围中。如果上下界都被忽略,该元素类型的所有值都被认为在该范围中。 当不设置范围的上界和下界时, 即上界为正无穷大,下界为负无穷大,该范围为无限(无界)范围。 具有infinity概念的元素类型可以作为显式边界值。 例如,在时间戳范围[today,infinity)和[today,infinity] ,[today,infinity)表示不包括特殊的timestamp值infinity,[today,infinity]表示包括特殊的timestamp值infinity。 函数lower_inf和upper_inf分别测试一个范围的无限上下界。
  • 范围输入/输出 范围输入模式: (lower-bound,upper-bound) (lower-bound,upper-bound] [lower-bound,upper-bound) [lower-bound,upper-bound] empty 范围输出模式: [lower-bound,upper-bound) empty ()或[]指示上下界是否为排除的或者包含的。empty表示一个空范围(一个不包含点的范围)。 lower-bound可以是作为subtype的合法输入的一个字符串,或者是空(表示没有下界)。同样,upper-bound可以是作为subtype的合法输入的一个字符串,或者是空(表示没有上界)。 每个界限值可以使用"(双引号)字符引用。如果界限值包含圆括号、方括号、逗号、双引号或反斜线时,必须使用双引号进行引用,否则这些字符会被认作范围语法的一部分。要把一个双引号或反斜线放在一个被引用的界限值中,需在其前面添加一个反斜线(还有,在一个双引号引用的界限值中的一对双引号表示一个双引号字符,这与SQL字符串中的单引号规则类似)。此外,避免引用或者使用反斜线转义来保护所有数据字符,否则数据字符会被当作范围语法的一部分。如果要写一个是空字符串的界限值,则可以写成"",因为什么都不写表示一个无限界限。 范围值前后允许有空格,但是圆括号或方括号之间的任何空格会被当做上下界值的一部分(取决于元素类型,它可能是也可能不是有意义的)。 例子: --包括3,不包括7之间的所有点。 gaussdb=# SELECT '[3,7)'::int4range; int4range ----------- [3,7) (1 row) --既不包括3也不包括7之间的所有点。 gaussdb=# SELECT '(3,7)'::int4range; int4range ----------- [4,7) (1 row) --只包括单独一个点4。 gaussdb=# SELECT '[4,4]'::int4range; int4range ----------- [4,5) (1 row) --不包括点(并且将被标准化为 '空')。 gaussdb=# SELECT '[4,4)'::int4range; int4range ----------- empty (1 row)
  • 构造范围 每一种范围类型都有一个与其同名的构造器函数。使用构造器函数常常比写一个范围文字常数更方便,因为它避免了对界限值的额外引用。构造器函数接收两个或三个参数。两个参数的形式以标准的形式构造一个范围(下界是包含的,上界是排除的),而三个参数的形式按照第三个参数指定的界限形式构造一个范围。第三个参数必须是下列字符串之一: “()”、 “(]”、 “[)”或者 “[]”。 --完整形式是:下界、上界以及指示界限包含性/排除性的文本参数。 gaussdb=# SELECT numrange(1.0, 14.0, '(]'); numrange ------------ (1.0,14.0] (1 row) --如果第三个参数被忽略,则假定为 '[)'。 gaussdb=# SELECT numrange(1.0, 14.0); numrange ------------ [1.0,14.0) (1 row) --尽管这里指定了 '(]',显示时该值将被转换成标准形式,因为int8range是一种离散范围类型。 gaussdb=# SELECT int8range(1, 14, '(]'); int8range ----------- [2,15) (1 row) --为一个界限使用NULL导致范围在那一边是无界的。 gaussdb=# SELECT numrange(NULL, 2.2); numrange ---------- (,2.2) (1 row)
  • 示例 显示用字母t和f输出Boolean值。 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 --创建表。 gaussdb=# CREATE TABLE bool_type_t1 ( BT_COL1 BOOLEAN, BT_COL2 TEXT ); --插入数据。 gaussdb=# INSERT INTO bool_type_t1 VALUES (TRUE, 'sic est'); gaussdb=# INSERT INTO bool_type_t1 VALUES (FALSE, 'non est'); --查看数据。 gaussdb=# SELECT * FROM bool_type_t1; bt_col1 | bt_col2 ---------+--------- t | sic est f | non est (2 rows) gaussdb=# SELECT * FROM bool_type_t1 WHERE bt_col1 = 't'; bt_col1 | bt_col2 ---------+--------- t | sic est (1 row) --删除表。 gaussdb=# DROP TABLE bool_type_t1;
  • 示例 -- 生成一个UUID类型的序列号 gaussdb=# SELECT uuid(); uuid -------------------------------------- 846b9d00-172d-c63d-4a03-e8b4700370e0 (1 row) -- 创建表 gaussdb=# CREATE TABLE uuid_test(id int, test uuid); -- 插入数据,使用系统生成的uuid插入数据 gaussdb=# INSERT INTO uuid_test VALUES(1, uuid()::uuid); -- 插入数据,使用示例格式插入数据 gaussdb=# INSERT INTO uuid_test VALUES(2, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11'); gaussdb=# INSERT INTO uuid_test VALUES(3, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}'); gaussdb=# INSERT INTO uuid_test VALUES(4, 'a0eebc999c0b4ef8bb6d6bb9bd380a11'); gaussdb=# INSERT INTO uuid_test VALUES(5, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11'); -- 查看数据,输出时以标准格式输出 gaussdb=# SELECT * FROM uuid_test; id | test ----+-------------------------------------- 1 | 1b52051c-1731-c63d-4a03-e8b4700370e0 2 | a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 3 | a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 4 | a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 5 | a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 (5 rows) -- 删除表 gaussdb=# DROPTABLE uuid_test;
  • 向量类型的使用 向量类型的使用示例如下: -- 创建含向量类型的表,同时设定数据维度。建表时向量类型必须要指定维度。 gaussdb=# CREATE TABLE t1(id int unique, repr floatvector(4)); gaussdb=# CREATE TABLE t2(id int unique, repr boolvector(3)); -- 插入数据 gaussdb=# INSERT INTO t1 VALUES(0, '[30,12,12,25]'); gaussdb=# INSERT INTO t2 VALUES(1, '[1, 0, 1]');
  • 示例 -- 生成一个UUID类型的序列号 gaussdb=# SELECT uuid(); uuid -------------------------------------- 846b9d00-172d-c63d-4a03-e8b4700370e0 (1 row) -- 创建表 gaussdb=# CREATE TABLE uuid_test(id int, test uuid) DISTRIBUTE BY HASH(test); -- 插入数据,使用系统生成的uuid插入数据 gaussdb=# INSERT INTO uuid_test VALUES(1, uuid()::uuid); -- 插入数据,使用示例格式插入数据 gaussdb=# INSERT INTO uuid_test VALUES(2, 'A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11'); gaussdb=# INSERT INTO uuid_test VALUES(3, '{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}'); gaussdb=# INSERT INTO uuid_test VALUES(4, 'a0eebc999c0b4ef8bb6d6bb9bd380a11'); gaussdb=# INSERT INTO uuid_test VALUES(5, 'a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11'); -- 查看数据,输出时以标准格式输出 gaussdb=# SELECT * FROM uuid_test; id | test ----+-------------------------------------- 1 | 1b52051c-1731-c63d-4a03-e8b4700370e0 2 | a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 3 | a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 4 | a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 5 | a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11 (5 rows) -- 删除表 gaussdb=# DROP TABLE uuid_test;
  • 向量化引擎支持的数据类型 向量化引擎支持的数据类型如表1所示。 表1 向量化引擎支持的数据类型 类别 数据类型 长度 是否支持 Numeric Types tinyint [unsigned] 1 支持 smallint [unsigned] 2 支持 mediumint [unsigned] 3 支持 integer [unsigned] 4 支持 bigint [unsigned] 8 支持 decimal -1 支持 numeric -1 支持 real 4 支持 double precision 8 支持 smallserial 2 支持 serial 4 支持 bigserial 8 支持 largeserial -1 支持 Monetary Types money 8 支持 Boolean Types boolean 1 支持 Character Types character varying(n), varchar(n) -1 支持 character(n), char(n),nchar(n) n 支持 character、char 1 支持 text -1 支持 varchar2(n) -1 支持 nvarchar2(n) -1 支持 clob -1 支持 Binary Types blob -1 不支持 raw -1 支持 bytea -1 支持 Bit String Types bit(n) n 支持 bit varying(n) -1 支持 Date/Time Types timestamp with time zone 8 支持 timestamp without time zone 8 支持 date 4 支持 time without time zone 8 支持 time with time zone 12 支持 interval 16 支持 Network Address Types cidr 7 or 19 支持 inet 7 or 19 支持 macaddr 6 不支持 XML Types xml -1 支持 Other Types enum enum 类型由若干个标签构成的列表,每一个标签值都是一个非空字符串,且字符串长度必须不超过63个字节。 支持 ... ... 不支持 enum类型当前仅支持如下方式创建,详情请参见CREATE TYPE。 CREATE TYPE name AS ENUM (['label' [, ...]]); 父主题: 数据类型
  • 货币类型 货币类型存储带有固定小数精度的货币金额。 表1中显示的范围假设有两位小数。可以以任意格式输入,包括整型、浮点型或者典型的货币格式(如“$1,000.00”)。根据区域字符集,输出一般是最后一种形式。 表1 货币类型 名称 描述 存储空间 范围 money 货币金额 8 字节 -92233720368547758.08 ~ +92233720368547758.07 numeric、int和bigint类型的值可以转换为money类型。如果从real和double precision类型转换到money类型,可以先转换为numeric类型,再转换为money类型,例如: 1 2 3 4 5 gaussdb=# SELECT '12.34'::float8::numeric::money; money -------- $12.34 (1 row) 这种用法是不推荐使用的。浮点数不应该用来处理货币类型,因为小数点的位数可能会导致错误。 money类型的值可以转换为numeric类型而不丢失精度。转换为其他类型可能丢失精度,并且必须通过以下两步来完成: 1 2 3 4 5 gaussdb=# SELECT '52093.89'::money::numeric::float8; float8 ---------- 52093.89 (1 row) 当一个money类型的值除以另一个money类型的值时,结果是double precision(也就是,一个纯数字,而不是money类型);在运算过程中货币单位相互抵消。 父主题: 数据类型
  • 向量类型的使用 向量类型的使用示例如下: -- 创建含向量类型的表,同时设定数据维度。建表时向量类型必须要指定维度。 gaussdb=# CREATE TABLE t1(id int unique, repr floatvector(4)); gaussdb=# CREATE TABLE t2(id int unique, repr boolvector(3)); -- 插入数据 gaussdb=# INSERT INTO t1 VALUES(0, '[30,12,12,25]'); gaussdb=# INSERT INTO t2 VALUES(1, '[1, 0, 1]');