PostgreSQL 数据类型
                           
天天向上
发布: 2025-03-09 18:56:53

原创
335 人浏览过

PostgreSQL 提供了多种数据类型,适用于不同的应用场景。以下是 PostgreSQL 中常用的数据类型分类和详细介绍。


1. 数字类型

整数类型

  • SMALLINT:存储 -32,768 到 32,767 范围的整数,通常用于小范围整数。
  • INTEGER:存储 -2,147,483,648 到 2,147,483,647 范围的整数,常用于一般整数。
  • BIGINT:存储 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 范围的整数,适用于大整数。

浮动点类型

  • REAL:单精度浮点数,占用 4 字节。适用于较小精度的浮动点数据。
  • DOUBLE PRECISION:双精度浮点数,占用 8 字节,适用于需要更高精度的浮动点数据。
  • NUMERIC / DECIMAL:精确的数字类型,可以指定小数位数,适用于高精度要求的场景,比如财务计算。可以设置最大总位数和小数位数,如 NUMERIC(10, 2) 表示最多 10 位数,其中 2 位为小数。

2. 字符串类型

  • CHAR(n):固定长度的字符串,存储长度为 n 的字符串。如果插入的字符串不足 n 个字符,会用空格填充。
  • VARCHAR(n):可变长度的字符串,最多可以存储 n 个字符,适用于较短的字符串。
  • TEXT:没有长度限制的字符串,适用于长文本数据。

3. 日期和时间类型

  • DATE:存储日期,格式为 YYYY-MM-DD,不包含时间。
  • TIME:存储时间,格式为 HH:MI:SS,不包含日期。
  • TIMESTAMP:存储日期和时间,格式为 YYYY-MM-DD HH:MI:SS,常用于记录事件的发生时间。
  • TIMESTAMPTZ:与 TIMESTAMP 相似,但包含时区信息。适用于跨时区的应用。
  • INTERVAL:存储时间间隔,表示两个时间点之间的差异,例如“3 days”表示 3 天的时间间隔。

4. 布尔类型

  • BOOLEAN:表示逻辑值,只有三个可能的值:TRUEFALSENULL。适用于存储真/假条件。

5. 二进制数据类型

  • BYTEA:存储二进制数据,如文件、图像等,适用于存储非文本数据。

6. 数组类型

PostgreSQL 支持数组数据类型,可以存储同一类型的多个值。

  • INTEGER[]:整数数组,存储多个整数值。
  CREATE TABLE test_array (numbers INTEGER[]);
  INSERT INTO test_array (numbers) VALUES ('{1, 2, 3}');
  • 可以为任意数据类型创建数组。

7. JSON 和 JSONB 类型

  • JSON:用于存储 JSON 格式的文本数据,可以用来存储结构化的数据,适用于需要动态模式的数据。
  • JSONB:二进制 JSON,提供比 JSON 更高效的存储和查询性能,尤其在进行复杂查询时更优。适合存储不定结构的 JSON 数据。
CREATE TABLE test_json (
    data JSONB
);
INSERT INTO test_json (data) VALUES ('{"name": "John", "age": 30}');

8. 枚举类型 (ENUM)

枚举类型允许你为列定义一组有限的值。适用于某些字段值的集合是固定的,比如状态、类型等。

CREATE TYPE mood AS ENUM ('happy', 'sad', 'neutral');
CREATE TABLE test_enum (
    current_mood mood
);
INSERT INTO test_enum (current_mood) VALUES ('happy');

9. 自定义类型

PostgreSQL 允许用户创建自定义类型,来满足特定需求。例如,可以创建复合类型(类似于表结构)或范围类型(表示一个范围区间)。

  • 复合类型:由多个字段组成,类似于表结构。
CREATE TYPE person AS (
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    age INTEGER
);
  • 范围类型:表示范围的数据类型,例如一个整数范围、日期范围等。
CREATE TABLE test_range (
    age_range INT4RANGE
);
INSERT INTO test_range (age_range) VALUES ('[30,40]');

10. 网络地址类型

PostgreSQL 提供了几种用于存储网络地址类型的字段。

  • INET:存储 IP 地址,支持 IPv4 和 IPv6。
  • CIDR:存储网络地址(如网络前缀)。
CREATE TABLE test_network (
    ip_address INET
);
INSERT INTO test_network (ip_address) VALUES ('192.168.1.1');

11. 其他常用数据类型

  • UUID:存储全球唯一标识符(UUID),通常用于需要唯一标识的场景,如用户 ID。
CREATE TABLE test_uuid (
    user_id UUID
);
  • XML:存储 XML 数据,用于存储结构化的标记数据。
CREATE TABLE test_xml (
    data XML
);
INSERT INTO test_xml (data) VALUES ('<user><name>John</name><age>30</age></user>');
  • TSVECTORTSQUERY:分别用于全文搜索的存储和查询操作,支持高效的文本索引。

总结

PostgreSQL 提供了丰富的数据类型,满足不同应用场景的需求。通过合理选择数据类型,能提高数据库性能并确保数据一致性和完整性。

更多详细内容,请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *