PostgreSQL 数据类型
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:表示逻辑值,只有三个可能的值:
TRUE、FALSE和NULL。适用于存储真/假条件。
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>');
- TSVECTOR 和 TSQUERY:分别用于全文搜索的存储和查询操作,支持高效的文本索引。
总结
PostgreSQL 提供了丰富的数据类型,满足不同应用场景的需求。通过合理选择数据类型,能提高数据库性能并确保数据一致性和完整性。
更多详细内容,请关注其他相关文章!