零基础学习PostgreSQL:实战篇 - 数据类型解析

发表时间: 2023-06-06 23:00

PostgreSQL是一种功能强大的开源关系型数据库管理系统,具有广泛的数据类型支持。在本教程中,我们将介绍PostgreSQL中可用的各种数据类型,包括数值、字符串、几何、时间、日期、布尔、货币和json类型。

数值类型

PostgreSQL支持各种数值类型,包括整数、小数和浮点数。下面是一些常见的数值类型及其有效值范围。

整数类型

PostgreSQL支持以下整数类型:

  • smallint:2字节,范围为-32768到+32767
  • integer:4字节,范围为-2147483648到+2147483647
  • bigint:8字节,范围为-9223372036854775808到+9223372036854775807

这些类型可以存储整数值,例如:

CREATE TABLE example (    id serial PRIMARY KEY,    small smallint,    int integer,    big bigint);INSERT INTO example (small, int, big) VALUES (-32768, 2147483647, 9223372036854775807);

小数类型

PostgreSQL支持以下小数类型:

  • decimal:用户指定的精度和标度,最大精度为131072位,最大标度为16383
  • numeric:用户指定的精度和标度,最大精度为131072位,最大标度为16383
  • real:4字节,单精度浮点数
  • double precision:8字节,双精度浮点数

这些类型可以存储小数值,例如:

CREATE TABLE example (    id serial PRIMARY KEY,    dec decimal(10,2),    num numeric(10,2),    r real,    d double precision);INSERT INTO example (dec, num, r, d) VALUES (1234.56, 1234.56, 1234.56, 1234.56);

字符串类型

PostgreSQL支持各种字符串类型,包括固定长度和可变长度字符串。下面是一些常见的字符串类型及其有效值范围。

固定长度字符串类型

PostgreSQL支持以下固定长度字符串类型:

  • char(n):长度为n的固定长度字符串,n的范围是1到10485760
  • character(n):长度为n的固定长度字符串,n的范围是1到10485760

这些类型可以存储固定长度的字符串,例如:

CREATE TABLE example (    id serial PRIMARY KEY,    c char(10),    ch character(10));INSERT INTO example (c, ch) VALUES ('hello', 'world');

可变长度字符串类型

PostgreSQL支持以下可变长度字符串类型:

  • varchar(n):长度为n的可变长度字符串,n的范围是1到10485760
  • character varying(n):长度为n的可变长度字符串,n的范围是1到10485760
  • text:可变长度字符串,最大长度为10485760

这些类型可以存储可变长度的字符串,例如:

CREATE TABLE example (    id serial PRIMARY KEY,    v varchar(10),    cv character varying(10),    t text);INSERT INTO example (v, cv, t) VALUES ('hello', 'world', 'hello world');

几何类型

PostgreSQL支持各种几何类型,包括点、线、多边形和圆。下面是一些常见的几何类型及其有效值范围。

点类型

点类型表示二维平面中的一个点,由x和y坐标组成。PostgreSQL支持以下点类型:

  • point:由x和y坐标组成的点

这些类型可以存储点坐标,例如:

CREATE TABLE example (    id serial PRIMARY KEY,    p point);INSERT INTO example (p) VALUES ('(1,2)');

线类型

线类型表示二维平面中的一条线,由起点和终点坐标组成。PostgreSQL支持以下线类型:

  • line:由起点和终点坐标组成的线
  • lseg:由起点和终点坐标组成的线段
  • box:由左下和右上角坐标组成的矩形框

这些类型可以存储线段和矩形框,例如:

CREATE TABLE example (    id serial PRIMARY KEY,    l line,    ls lseg,    b box);INSERT INTO example (l, ls, b) VALUES ('[(1,2),(3,4)]', '[(1,2),(3,4)]', '((1,2),(3,4))');

多边形类型

多边形类型表示二维平面中的一个多边形,由一组点坐标组成。PostgreSQL支持以下多边形类型:

  • path:由一组点坐标组成的多边形
  • polygon:由一组点坐标组成的封闭多边形

这些类型可以存储多边形,例如:

CREATE TABLE example (    id serial PRIMARY KEY,    pa path,    po polygon);INSERT INTO example (pa, po) VALUES ('((1,2),(3,4),(5,6))', '((1,2),(3,4),(5,6))');

圆类型

圆类型表示二维平面中的一个圆,由圆心坐标和半径组成。PostgreSQL支持以下圆类型:

  • circle:由圆心坐标和半径组成的圆

这些类型可以存储圆,例如:

CREATE TABLE example (    id serial PRIMARY KEY,    c circle);INSERT INTO example (c) VALUES ('<(1,2),3>');

时间类型

PostgreSQL支持各种时间类型,包括日期、时间和时间戳。下面是一些常见的时间类型及其有效值范围。

日期类型

日期类型表示一个日期,由年、月和日组成。PostgreSQL支持以下日期类型:

  • date:日期类型,范围为0001-01-01到5874897-12-31

这些类型可以存储日期,例如:

CREATE TABLE example (    id serial PRIMARY KEY,    d date);INSERT INTO example (d) VALUES ('2022-01-01');

时间类型

时间类型表示一天中的时间,由小时、分钟和秒组成。PostgreSQL支持以下时间类型:

  • time:时间类型,范围为00:00:00到24:00:00
  • time with time zone:带时区的时间类型,范围为00:00:00到24:00:00

这些类型可以存储时间,例如:

CREATE TABLE example (    id serial PRIMARY KEY,    t time,    tz time with time zone);INSERT INTO example (t, tz) VALUES ('12:34:56', '12:34:56+08');

时间戳类型

时间戳类型表示日期和时间的组合,由年、月、日、小时、分钟和秒组成。PostgreSQL支持以下时间戳类型:

  • timestamp:时间戳类型,范围为0001-01-01 00:00:00到294276-12-31 23:59:59
  • timestamp with time zone:带时区的时间戳类型,范围为0001-01-01 00:00:00到294276-12-31 23:59:59

这些类型可以存储日期和时间,例如:

CREATE TABLE example (    id serial PRIMARY KEY,    ts timestamp,    tsz timestamp with time zone);INSERT INTO example (ts, tsz) VALUES ('2022-01-01 12:34:56', '2022-01-01 12:34:56+08');

日期类型

PostgreSQL支持各种日期类型,包括日期、时间和时间戳。下面是一些常见的日期类型及其有效值范围。

日期类型

日期类型表示一个日期,由年、月和日组成。PostgreSQL支持以下日期类型:

  • date:日期类型,范围为0001-01-01到5874897-12-31

这些类型可以存储日期,例如:

CREATE TABLE example (    id serial PRIMARY KEY,    d date);INSERT INTO example (d) VALUES ('2022-01-01');

时间类型

时间类型表示一天中的时间,由小时、分钟和秒组成。PostgreSQL支持以下时间类型:

  • time:时间类型,范围为00:00:00到24:00:00
  • time with time zone:带时区的时间类型,范围为00:00:00到24:00:00

这些类型可以存储时间,例如:

CREATE TABLE example (    id serial PRIMARY KEY,    t time,    tz time with time zone);INSERT INTO example (t, tz) VALUES ('12:34:56', '12:34:56+08');

时间戳类型

时间戳类型表示日期和时间的组合,由年、月、日、小时、分钟和秒组成。PostgreSQL支持以下时间戳类型:

  • timestamp:时间戳类型,范围为0001-01-01 00:00:00到294276-12-31 23:59:59
  • timestamp with time zone:带时区的时间戳类型,范围为0001-01-01 00:00:00到294276-12-31 23:59:59

这些类型可以存储日期和时间,例如:

CREATE TABLE example (    id serial PRIMARY KEY,    ts timestamp,    tsz timestamp with time zone);INSERT INTO example (ts, tsz) VALUES ('2022-01-01 12:34:56', '2022-01-01 12:34:56+08');

布尔类型

PostgreSQL支持布尔类型,表示真或假。以下是布尔类型的有效值:

  • true:真
  • false:假

这些类型可以存储布尔值,例如:

CREATE TABLE example (    id serial PRIMARY KEY,    b boolean);INSERT INTO example (b) VALUES (true);

货币类型

PostgreSQL支持货币类型,表示货币值。以下是货币类型的有效值:

  • money:货币类型,范围为-92233720368547758.08到+92233720368547758.07

这些类型可以存储货币值,例如:

CREATE TABLE example (    id serial PRIMARY KEY,    m money);INSERT INTO example (m) VALUES ('34.56');

JSON类型

PostgreSQL支持JSON类型,可以存储JSON格式的数据。以下是JSON类型的有效值:

  • json:JSON类型,存储JSON格式的数据
  • jsonb:二进制JSON类型,存储JSON格式的数据

这些类型可以存储JSON格式的数据,例如:

CREATE TABLE example (    id serial PRIMARY KEY,    j json,    jb jsonb);INSERT INTO example (j, jb) VALUES ('{"name": "John", "age": 30}', '{"name": "John", "age": 30}');

结论

本教程介绍了PostgreSQL中可用的各种数据类型,包括数值、字符串、几何、时间、日期、布尔、货币和json类型。熟悉这些数据类型及其有效值范围可以帮助您更好地使用PostgreSQL。