OpenGassdb数据类型介绍

1、 整数

名称

描述

存储空间

范围

TINYINT

微整数,别名为INT1。

1字节

0 ~ 255

SMALLINT

小范围整数,别名为INT2。

2字节

-32,768 ~ +32,767

INTEGER

常用的整数,别名为INT4。

4字节

-2,147,483,648 ~ +2,147,483,647

BINARY_INTEGER

常用的整数INTEGER的别名。

4字节

-2,147,483,648 ~ +2,147,483,647

BIGINT

大范围的整数,别名为INT8。

8字节

-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807

int16

十六字节的大范围整数,目前不支持用户用于建表等使用。

16字节

-170,141,183,460,469,231,731,687,303,715,884,105,728 ~ +170,141,183,460,469,231,731,687,303,715,884,105,727

--创建具有TINYINT类型数据的表。
gaussdb=# CREATE TABLE int_type_t1
           (
            IT_COL1 TINYINT
           );

--向创建的表中插入数据。
gaussdb=# INSERT INTO int_type_t1 VALUES(10);

--查看数据。
gaussdb=# SELECT * FROM int_type_t1;
 it_col1  
--------- 
 10
(1 row)

--删除表。
gaussdb=# DROP TABLE int_type_t1;
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
--创建具有TINYINT,INTEGER,BIGINT类型数据的表。
gaussdb=# CREATE TABLE int_type_t2 
(
    a TINYINT, 
    b TINYINT,
    c INTEGER,
    d BIGINT
);

--插入数据。
gaussdb=# INSERT INTO int_type_t2 VALUES(100, 10, 1000, 10000);

--查看数据。
gaussdb=# SELECT * FROM int_type_t2;
  a  | b  |  c   |   d   
-----+----+------+-------
 100 | 10 | 1000 | 10000
(1 row)

--删除表。
gaussdb=# DROP TABLE int_type_t2;

 

名称

描述

存储空间

范围

NUMERIC[(p[,s])],

DECIMAL[(p[,s])]

精度p取值范围为[1,1000],标度s取值范围为[0,p]。

说明:

p为总位数,s为小数位数。

用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。

未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。

NUMBER[(p[,s])]

NUMERIC类型的别名。

用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。

未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位

--创建表。
gaussdb=# CREATE TABLE numeric_type_t1 
(
    NT_COL1 NUMERIC(10,4)
);

--插入数据。
gaussdb=# INSERT INTO numeric_type_t1 VALUES(123456.12354);

--查询表中的数据。
gaussdb=# SELECT * FROM numeric_type_t1;
   nt_col1   
-------------
 123456.1235
(1 row)

--删除表。
gaussdb=# DROP TABLE numeric_type_t1;

3、序列整型

名称

描述

存储空间

范围

SMALLSERIAL

二字节序列整型。

2字节

-32,768 ~ +32,767

SERIAL

四字节序列整型。

4字节

-2,147,483,648 ~ +2,147,483,647

BIGSERIAL

八字节序列整型。

8字节

-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807

LARGESERIAL

默认插入十六字节序列整形,实际数值类型和numeric相同。

变长类型,每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。

小数点前最大131,072位,小数点后最大16,383位。

--创建表。
gaussdb=# CREATE TABLE smallserial_type_tab(a SMALLSERIAL);

--插入数据。
gaussdb=# INSERT INTO smallserial_type_tab VALUES(default);

--再次插入数据。
gaussdb=# INSERT INTO smallserial_type_tab VALUES(default);

--查看数据。
gaussdb=# SELECT * FROM smallserial_type_tab;  
 a 
---
 1
 2
(2 rows)

--创建表。
gaussdb=# CREATE TABLE serial_type_tab(b SERIAL);

--插入数据。
gaussdb=# INSERT INTO serial_type_tab VALUES(default);

--再次插入数据。
gaussdb=# INSERT INTO serial_type_tab VALUES(default);

--查看数据。
gaussdb=# SELECT * FROM serial_type_tab; 
 b 
---
 1
 2
(2 rows)

--创建表。
gaussdb=# CREATE TABLE bigserial_type_tab(c BIGSERIAL);

--插入数据。
gaussdb=# INSERT INTO bigserial_type_tab VALUES(default);

--插入数据。
gaussdb=# INSERT INTO bigserial_type_tab VALUES(default);

--查看数据。
gaussdb=# SELECT * FROM bigserial_type_tab;
 c 
---
 1
 2
(2 rows)

--创建表。
gaussdb=# CREATE TABLE largeserial_type_tab(c LARGESERIAL);

--插入数据。
gaussdb=# INSERT INTO largeserial_type_tab VALUES(default);

--插入数据。
gaussdb=# INSERT INTO largeserial_type_tab VALUES(default);

--查看数据。
gaussdb=# SELECT * FROM largeserial_type_tab;
 c 
---
 1
 2
(2 rows)

--删除表。
gaussdb=# DROP TABLE smallserial_type_tab;

gaussdb=# DROP TABLE serial_type_tab;

gaussdb=# DROP TABLE bigserial_type_tab;

SMALLSERIAL,SERIAL,BIGSERIAL和LARGESERIAL类型不是真正的类型,只是为在表中设置唯一标识做的概念上的便利。因此,创建一个整数字段,并且把它的缺省数值安排为从一个序列发生器读取。应用了一个NOT NULL约束以确保NULL不会被插入。在大多数情况下用户可能还希望附加一个UNIQUE或PRIMARY KEY约束避免意外地插入重复的数值,但这个不是自动的。最后,将序列发生器从属于那个字段,这样当该字段或表被删除的时候也一并删除它。目前只支持在创建表时候指定SERIAL列,不可以在已有的表中,增加SERIAL列。另外临时表也不支持创建SERIAL列。因为SERIAL不是真正的类型,也不可以将表中存在的列类型转化为SERIAL。

名称

描述

存储空间

范围

REAL,

FLOAT4

单精度浮点数,不精准。

4字节

-3.402E+38~3.402E+38,6位十进制数字精度。

DOUBLE PRECISION,

FLOAT8

双精度浮点数,不精准。

8字节

-1.79E+308~1.79E+308,15位十进制数字精度。

FLOAT[(p)]

浮点数,不精准。精度p取值范围为[1,53]。

说明:

p为精度,表示二进制总位数。

4字节或8字节

根据精度p不同选择REAL或DOUBLE PRECISION作为内部表示。如不指定精度,内部用DOUBLE PRECISION表示。

BINARY_DOUBLE

是DOUBLE PRECISION的别名。

8字节

-1.79E+308~1.79E+308,15位十进制数字精度。

DEC[(p[,s])]

精度p取值范围为[1,1000],标度s取值范围为[0,p]。

说明:

p为总位数,s为小数位位数。

用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。

未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。

INTEGER[(p[,s])]

精度p取值范围为[1,1000],标度s取值范围为[0,p]。

用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。

-

--创建表。
gaussdb=# CREATE TABLE float_type_t2 
(
    FT_COL1 INTEGER,
    FT_COL2 FLOAT4,
    FT_COL3 FLOAT8,
    FT_COL4 FLOAT(3),
    FT_COL5 BINARY_DOUBLE,
    FT_COL6 DECIMAL(10,4),
    FT_COL7 INTEGER(6,3)
);

--插入数据。
gaussdb=# INSERT INTO float_type_t2 VALUES(10,10.365456,123456.1234,10.3214, 321.321, 123.123654, 123.123654);

--查看数据。
gaussdb=# SELECT * FROM float_type_t2 ;
 ft_col1 | ft_col2 |   ft_col3   | ft_col4 | ft_col5 | ft_col6  | ft_col7 
---------+---------+-------------+---------+---------+----------+---------
      10 | 10.3655 | 123456.1234 | 10.3214 | 321.321 | 123.1237 | 123.124
(1 row)

--删除表。
gaussdb=# DROP TABLE float_type_t2;

货币类型

存储容量

描述

范围

money

8 字节

货币金额

-92233720368547758.08 到 +92233720368547758.07

numeric,int和bigint类型的值可以转化为money类型。如果从real和double precision类型转换到money类型,可以先转化为numeric类型,再转化为money类型,例如:

1
gaussdb=# SELECT '12.34'::float8::numeric::money;

这种用法是不推荐使用的。浮点数不应该用来处理货币类型,因为小数点的位数可能会导致错误。

money类型的值可以转换为numeric类型而不丢失精度。转换为其他类型可能丢失精度,并且必须通过以下两步来完成:

1
gaussdb=# SELECT '52093.89'::money::numeric::float8;

当一个money类型的值除以另一个money类型的值时,结果是double precision(也就是,一个纯数字,而不是money类型);在运算过程中货币单位相互抵消。

布尔类型

名称

描述

存储空间

取值

BOOLEAN

布尔类型

1字节。

  • true:真
  • false:假
  • null:未知(unknown)

  • “真”值的有效文本值是:

    TRUE、't'、'true'、'y'、'yes'、'1' 、'TRUE'、true、整数范围内1~2^63-1、整数范围内-1~-2^63。

  • “假”值的有效文本值是:

    FALSE、'f'、'false'、'n'、'no'、'0'、0、'FALSE'、false。

使用TRUE和FALSE是比较规范的用法(也是SQL兼容的用法)。

示例

显示用字母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;

字符类型

名称

描述

存储空间

CHAR(n)

CHARACTER(n)

NCHAR(n)

定长字符串,不足补空格。n是指字节长度,如不带精度n,默认精度为1。

最大为10MB。

VARCHAR(n)

CHARACTER VARYING(n)

变长字符串。PG兼容模式下,n是字符长度。其他兼容模式下,n是指字节长度。

最大为10MB。

VARCHAR2(n)

变长字符串。是VARCHAR(n)类型的别名。n是指字节长度。

最大为10MB。

NVARCHAR2(n)

变长字符串。n是指字符长度。

最大为10MB。

TEXT

变长字符串。

最大为1GB-1,但还需要考虑到列描述头信息的大小,以及列所在元组的大小限制(也小于1GB-1),因此TEXT类型最大大小可能小于1GB-1。

CLOB

文本大对象。是TEXT类型的别名。

最大为32TB-1,但还需要考虑到列描述头信息的大小,以及列所在元组的大小限制(也小于32TB-1),因此CLOB类型最大大小可能小于32TB-1。

  1. 除了每列的大小限制以外,每个元组的总大小也不可超过1GB-1字节,主要受列的控制头信息、元组控制头信息以及元组中是否存在NULL字段等影响。
  2. NCHAR为bpchar类型的别名,VARCHAR2(n)为VARCHAR(n)类型的别名。
  3. 超过1GB的clob只有dbe_lob相关高级包支持,系统函数不支持大于1GB clob。
  4. 在GaussDB Kernel里另外还有两种定长字符类型。在表2里显示。name类型只用在内部系统表中,作为存储标识符,不建议普通用户使用。该类型长度当前定为64字节(63可用字符加结束符)。类型“char”只用了一个字节的存储空间。他在系统内部主要用于系统表,主要作为简单化的枚举类型使用。
特殊字符类型

名称

描述

存储空间

name

用于对象名的内部类型。

64字节。

"char"

单字节内部类型。

1字节。

日期/时间类型

名称

描述

存储空间

DATE

日期。

说明:

A兼容性下,数据库将空字符串作为NULL处理,数据类型DATE会被替换为TIMESTAMP(0) WITHOUT TIME ZONE。

4字节(兼容模式A下存储空间大小为8字节)

TIME [(p)] [WITHOUT TIME ZONE]

只用于一日内时间。

p表示小数点后的精度,取值范围为0~6。

8字节

TIME [(p)] [WITH TIME ZONE]

只用于一日内时间,带时区。

p表示小数点后的精度,取值范围为0~6。

12字节

TIMESTAMP[(p)] [WITHOUT TIME ZONE]

日期和时间。

p表示小数点后的精度,取值范围为0~6。

8字节

TIMESTAMP[(p)][WITH TIME ZONE]

日期和时间,带时区。TIMESTAMP的别名为TIMESTAMPTZ。

p表示小数点后的精度,取值范围为0~6。

8字节

SMALLDATETIME

日期和时间,不带时区。

精确到分钟,秒位大于等于30秒进一位。

8字节

INTERVAL DAY (l) TO SECOND (p)

时间间隔,X天X小时X分X秒。

  • l:天数的精度,取值范围为0~6。兼容性考虑,目前未实现具体功能。
  • p:秒数的精度,取值范围为0~6。小数末尾的零不显示。

16字节

INTERVAL [FIELDS] [ (p) ]

时间间隔。

  • fields:可以是YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,DAY TO HOUR,DAY TO MINUTE,DAY TO SECOND,HOUR TO MINUTE,HOUR TO SECOND,MINUTE TO SECOND。
  • p:秒数的精度,取值范围为0~6,且fields为SECOND,DAY TO SECOND,HOUR TO SECOND或MINUTE TO SECOND时,参数p才有效。小数末尾的零不显示。

12字节

reltime

相对时间间隔。格式为:

X years X mons X days XX:XX:XX。

采用儒略历计时,规定一年为365.25天,一个月为30天,计算输入值对应的相对时间间隔,输出采用POSTGRES格式。

4字节

abstime

日期和时间。格式为:

YYYY-MM-DD hh:mm:ss+timezone

取值范围为1901-12-13 20:45:53 GMT~2038-01-18 23:59:59 GMT,精度为秒。

4字节

--创建表。
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=# DROP TABLE date_type_tab;

--创建表。
gaussdb=# CREATE TABLE time_type_tab (da time without time zone ,dai time with time zone,dfgh timestamp without time zone,dfga timestamp with time zone, vbg smalldatetime);

--插入数据。
gaussdb=# INSERT INTO time_type_tab VALUES ('21:21:21','21:21:21 pst','2010-12-12','2013-12-11 pst','2003-04-12 04:05:06');

--查看数据。
gaussdb=# SELECT * FROM time_type_tab;
    da    |     dai     |        dfgh         |          dfga          |         vbg         
----------+-------------+---------------------+------------------------+---------------------
 21:21:21 | 21:21:21-08 | 2010-12-12 00:00:00 | 2013-12-11 16:00:00+08 | 2003-04-12 04:05:00
(1 row)

--删除表。
gaussdb=# DROP TABLE time_type_tab;

--创建表。
gaussdb=# CREATE TABLE day_type_tab (a int,b INTERVAL DAY(3) TO SECOND (4)); 

--插入数据。
gaussdb=# INSERT INTO day_type_tab VALUES (1, INTERVAL '3' DAY);

--查看数据。
gaussdb=# SELECT * FROM day_type_tab;
 a |   b    
---+--------
 1 | 3 days
(1 row)

--删除表。
gaussdb=# DROP TABLE day_type_tab;

--创建表。
gaussdb=# CREATE TABLE year_type_tab(a int, b interval year (6));

--插入数据。
gaussdb=# INSERT INTO year_type_tab VALUES(1,interval '2' year);

--查看数据。
gaussdb=# SELECT * FROM year_type_tab;
 a |    b    
---+---------
 1 | 2 years
(1 row)

--删除表。
gaussdb=# DROP TABLE year_type_tab;

二进制类型

名称

描述

存储空间

BLOB

二进制大对象

目前BLOB支持的外部存取接口仅为:

  • DBE_LOB.GET_LENGTH
  • DBE_LOB.READ
  • DBE_LOB.WRITE
  • DBE_LOB.WRITE_APPEND
  • DBE_LOB.COPY
  • DBE_LOB.ERASE

这些接口详细说明请参见DBE_LOB。

说明:

列存不支持BLOB类型

最大为32TB(即35184372088832字节)。

RAW

变长的十六进制类型

说明:

列存不支持RAW类型

4字节加上实际的十六进制字符串。最大为1GB-8203字节(即1073733621字节)。

BYTEA

变长的二进制字符串

4字节加上实际的二进制字符串。最大为1GB-8203字节(即1073733621字节)。

BYTEAWITHOUTORDERWITHEQUALCOL

变长的二进制字符串(密态特性新增的类型,如果加密列的加密类型指定为确定性加密,则该列的实际类型为BYTEAWITHOUTORDERWITHEQUALCOL),元命令打印加密表将显示原始数据类型

4字节加上实际的二进制字符串。最大为1GB减去53字节(即1073741771字节)。

BYTEAWITHOUTORDERCOL

变长的二进制字符串(密态特性新增的类型,如果加密列的加密类型指定为随机加密,则该列的实际类型为BYTEAWITHOUTORDERCOL),元命令打印加密表将显示原始数据类型

4字节加上实际的二进制字符串。最大为1GB减去53字节(即1073741771字节)。

_BYTEAWITHOUTORDERWITHEQUALCOL

变长的二进制字符串,密态特性新增的类型

4字节加上实际的二进制字符串。最大为1GB减去53字节(即1073741771字节)。

_BYTEAWITHOUTORDERCOL

变长的二进制字符串,密态特性新增的类型

4字节加上实际的二进制字符串。最大为1GB减

去53字节(即1073741771字

节)。

--创建表。
gaussdb=# CREATE TABLE blob_type_t1 
(
    BT_COL1 INTEGER,
    BT_COL2 BLOB,
    BT_COL3 RAW,
    BT_COL4 BYTEA
) ;

--插入数据。
gaussdb=# INSERT INTO blob_type_t1 VALUES(10,empty_blob(),
HEXTORAW('DEADBEEF'),E'\\xDEADBEEF');

--查询表中的数据。
gaussdb=# SELECT * FROM blob_type_t1;
 bt_col1 | bt_col2 | bt_col3  |  bt_col4   
---------+---------+----------+------------
      10 |         | DEADBEEF | \xdeadbeef
(1 row)

--删除表。
gaussdb=# DROP TABLE blob_type_t1;

几何类型

几何类型

名称

存储空间

说明

表现形式

point

16字节

平面中的点

(x,y)

lseg

32字节

(有限)线段

((x1,y1),(x2,y2))

box

32字节

矩形

((x1,y1),(x2,y2))

path

16+16n字节

闭合路径(与多边形类似)

((x1,y1),...)

path

16+16n字节

开放路径

[(x1,y1),...]

polygon

40+16n字节

多边形(与闭合路径相似)

((x1,y1),...)

circle

24 字节

<(x,y),r> (圆心和半径)

 

GaussDB Kernel提供了一系列的函数和操作符用来进行各种几何计算,如拉伸、转换、旋转、计算相交等。详细信息请参考几何函数和操作符。

点是几何类型的基本二维构造单位。用下面语法描述point的数值:

( x , y )
x , y

x和y是用浮点数表示的点的坐标。

点输出使用第一种语法。

线段

线段(lseg)是用一对点来代表的。用下面的语法描述lseg的数值:

[ ( x1 , y1 ) , ( x2 , y2 ) ]
( ( x1 , y1 ) , ( x2 , y2 ) )
( x1 , y1 ) , ( x2 , y2 )
x1 , y1   ,   x2 , y2

(x1,y1)和(x2,y2)表示线段的端点。

线段输出使用第一种语法。

矩形

矩形是用一对对角点来表示的。用下面的语法描述box的值:

( ( x1 , y1 ) , ( x2 , y2 ) )
( x1 , y1 ) , ( x2 , y2 )
x1 , y1   ,   x2 , y2

(x1,y1)和(x2,y2)表示矩形的一对对角点。

矩形的输出使用第二种语法。

任何两个对角都可以出现在输入中,但按照那样的顺序,右上角和左下角的值会被重新排序以存储。

路径

路径由一系列连接的点组成。路径可能是开放的,也就是认为列表中第一个点和最后一个点没有连接,也可能是闭合的,这时认为第一个和最后一个点连接起来。

用下面的语法描述path的数值:

[ ( x1 , y1 ) , ... , ( xn , yn ) ]
( ( x1 , y1 ) , ... , ( xn , yn ) )
( x1 , y1 ) , ... , ( xn , yn )
( x1 , y1   , ... ,   xn , yn )
x1 , y1   , ... ,   xn , yn

点表示组成路径的线段的端点。方括弧([])表明一个开放的路径,圆括弧(())表明一个闭合的路径。当最外层的括号被省略,如在第三至第五语法,会假定一个封闭的路径。

路径的输出使用第一种或第二种语法输出。

多边形

多边形由一系列点代表(多边形的顶点)。多边形可以认为与闭合路径一样,但是存储方式不一样而且有自己的一套支持函数。

用下面的语法描述polygon的数值:

( ( x1 , y1 ) , ... , ( xn , yn ) )
( x1 , y1 ) , ... , ( xn , yn )
( x1 , y1   , ... ,   xn , yn )
x1 , y1   , ... ,   xn , yn

点表示多边形的端点。

多边形输出使用第一种语法。

圆由一个圆心和半径标识。用下面的语法描述circle的数值:

< ( x , y ) , r >
( ( x , y ) , r )
( x , y ) , r
x , y   , r

(x,y)表示圆心,r表示半径。

圆的输出用第一种格式。

JSON/JSONB类型

JSON(JavaScript Object Notation)数据,可以是单独的一个标量,也可以是一个数组,也可以是一个键值对象,其中数组和对象可以统称容器(container):

  • 标量(scalar):单一的数字、bool、string、null都可以叫做标量。
  • 数组(array):[]结构,里面存放的元素可以是任意类型的JSON,并且不要求数组内所有元素都是同一类型。
  • 对象(object):{}结构,存储key:value的键值对,其键只能是用“”包裹起来的字符串,值可以是任意类型的JSON,对于重复的键,按最后一个键值对为准。

GaussDB Kernel内存在两种数据类型JSON和JSONB,可以用来存储JSON数据。其中JSON是对输入的字符串的完整拷贝,使用时再去解析,所以它会保留输入的空格、重复键以及顺序等;JSONB解析输入后保存的二进制,它在解析时会删除语义无关的细节和重复的键,对键值也会进行排序,使用时不用再次解析。

因此可以发现,两者其实都是JSON,它们接受相同的字符串作为输入。它们实际的主要差别是效率。JSON数据类型存储输入文本的精确拷贝,处理函数必须在每个执行上重新解析; 而JSONB数据以分解的二进制格式存储, 这使得它由于添加了转换机制而在输入上稍微慢些,但是在处理上明显更快, 因为不需要重新解析。同时由于JSONB类型存在解析后的格式归一化等操作,同等的语义下只会有一种格式,因此可以更好更强大的支持很多其他额外的操作,比如按照一定的规则进行大小比较等。JSONB也支持索引,这也是一个明显的优势。

输入格式

输入必须是一个符合JSON数据格式的字符串,此字符串用单引号''声明。

null (null-json):仅null,全小写。

select 'null'::json;   -- suc
select 'NULL'::jsonb;  -- err

数字 (num-json):正负整数、小数、0,支持科学计数法。

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,全小写。

select 'true'::json;select 'false'::jsonb;  

字符串(str-json):必须是加双引号的字符串。

select '"a"'::json;select '"abc"'::jsonb;  

数组(array-json):使用中括号[]包裹,满足数组书写条件。数组内元素类型可以是任意合法的JSON,且不要求类型一致。

select '[1, 2, "foo", null]'::json;select '[]'::json;select '[1, 2, "foo", null, [[]], {}]'::jsonb; 

对象(object-json):使用大括号{}包裹,键必须是满足JSON字符串规则的字符串,值可以是任意合法的JSON。

select '{}'::json;select '{"a": 1, "b": {"a": 2,  "b": null}}'::json;select '{"foo": [true, "bar"], "tags": {"a": 1, "b": null}}'::jsonb;  

你可能感兴趣的:(java,数据库,sql)