PostgreSQL - 数据类型

PostgreSQL - 数据类型 首页 / PostgreSQL入门教程 / PostgreSQL - 数据类型

在本章中,无涯教程将讨论PostgreSQL中使用的数据类型,在创建表格时,您需要为每一列指定一种数据类型,即要在表格字段中存储的数据类型。

PostgreSQL支持多种数据类型,此外,用户可以使用 CREATE TYPE SQL命令创建自己的自定义数据类型,PostgreSQL中有不同类别的数据类型。

Numeric类型

数值类型由2字节,4字节和8字节整数,4字节和8字节浮点数以及可选精度的小数组成。

名称存储空间范围
smallint 2个字节-32768至+32767
integer 4个字节-2147483648至+2147483647
bigint 8个字节-9223372036854775808至9223372036854775807
decimalvariable小数点前最多131072位;小数点后最多16383位数字
numericvariable小数点前最多131072位;小数点后最多16383位数字
real 4个字节 6位小数位数精度
double precision 8个字节 15位小数位数精度
smallserial 2个字节 1到32767
serial 4个字节 1到2147483647
bigserial 8个字节 1到9223372036854775807

Monetary类型

money 类型以固定的分数精度存储货币金额,可以将 numeric,int和bigint 数据类型的值强制转换为 money。

名称存储空间说明范围
money 8个字节货币金额 -92233720368547758758.08至+92233720368547758.07

Character类型

下表列出了PostgreSQL中可用的通用字符类型。

S. No.Name & 描述
1

character varying(n),varchar(n)

有限制的可变长度

2

character(n),char(n)

固定长,空白填充

3

text

可变的无限长度

Binary Data类型

bytea 数据类型允许存储二进制字符串,如下表所示。

名称存储空间说明
bytea 1或4个字节加上实际的二进制字符串可变长度的二进制字符串

Date/Time类型

PostgreSQL支持全套SQL日期和时间类型,如下表所示。

名称存储空间说明最低值最高值
timestamp[[p]]  8个字节日期和时间(无时区)公元前4713公元294276
TIMESTAMPTZ 8个字节日期和时间(带时区)公元前4713公元294276
date 4个字节日期公元前4713公元5874897
time[(p)]  8个字节时间 00:00:00 24:00:00
interval[fields] [(p)] 12个字节时间间隔-178000000年 178000000年

Boolean 类型

PostgreSQL提供了标准的SQL类型Boolean。布尔数据类型可以具有状态 true , false 和第三状态 unknown ,这由SQL空值表示。

名称存储空间说明
boolean 1个字节正确或错误的状态

Enumerated类型

枚举(枚举)类型是包含静态的,有序的一组值的数据类型。它们等效于多种编程语言支持的枚举类型。

CREATE TYPE week AS ENUM ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');

枚举一旦创建,便可以像其他任何类型一样使用。

Netword Adress类型

PostgreSQL提供了用于存储IPv4,IPv6和MAC地址的数据类型。

名称存储空间说明
cidr 7或19个字节 IPv4和IPv6网络
inet 7或19个字节 IPv4和IPv6主机和网络
macaddr 6个字节 MAC地址

Bit String类型

位字符串类型用于存储位掩码,它们是0或1,有两种SQL位类型:bit(n)和bit variant(n),其中n是正整数。

Text Search类型

此类型支持全文本搜索,即通过自然语言文档集合进行搜索以找到最匹配查询。为此有两种数据类型-

S. No.Name & 描述
1

tsvector

这是不同单词的排序列表,这些单词已经过归一化以合并同一单词的不同变体,称为"lexemes"。

2

tsquery

这将存储要搜索的词素,并将它们结合起来以遵循布尔运算符&(AND),|。(OR),和!(不)。括号可用于强制对运算符进行分组。

UUID类型

UUID(通用唯一标识符)是由小写的十六进制数字组成的序列,在由连字符分隔的几组中,特别是一组八位数字,然后是三组四位数,然后是一组12位数字,用于总共32位数字,代表128位。

UUID的示例是-550e8400-e29b-41d4-a716-446655440000

XML类型

XML数据类型可用于存储XML数据,为了存储XML数据,首先必须使用函数xmlparse创建XML值,如下所示-

XMLPARSE (DOCUMENT '<?xml version="1.0"?>
<tutorial>
<title>PostgreSQL Tutorial </title>
   <topics>...</topics>
</tutorial>')

XMLPARSE (CONTENT 'xyz<foo>bar</foo><bar>foo</bar>')

JSON类型

json 数据类型可用于存储JSON(JavaScript对象表示法)数据,这样的数据也可以存储为 text ,但是 json 数据类型具有检查每个存储的值都是有效JSON值的优点。还提供了相关的支持功能,这些功能可以直接用于处理JSON数据类型,如下所示。

ExampleExample输出
array_to_json('{{1,5},{99,100}}':: int []) [[1,5],[99,100]]
row_to_json(row(1,'foo')) {" f1":1," f2":" foo"}

Array类型

PostgreSQL提供了将表的列定义为可变长度多维数组的机会,可以创建任何内置或用户定义的基本类型,枚举类型或复合类型的数组。

数组声明

数组类型可以声明为

CREATE TABLE monthly_savings (
   name text,
   saving_per_quarter integer[],
   scheme text[][]
);

或使用关键字" ARRAY"作为

CREATE TABLE monthly_savings (
   name text,
   saving_per_quarter integer ARRAY[4],
   scheme text[][]
);

向数组插入值

数组值可以作为文字常量插入,将元素值括在花括号内,并用逗号分隔。一个如下所示-

INSERT INTO monthly_savings 
VALUES (‘Manisha', 
‘{20000, 14600, 23500, 13250}', 
‘{{“FD”, MF”}, {“FD”, Property”}}'); 

访问数组元素

下面显示了访问数组的示例,下面给出的命令将选择第二季度比第四季度储蓄更多的人。

SELECT name FROM monhly_savings WHERE saving_per_quarter[2] > saving_per_quarter[4];

修改数组元素

修改数组的如下所示。

UPDATE monthly_savings SET saving_per_quarter = '{25000,25000,27000,27000}'
WHERE name = 'Manisha';

或使用ARRAY表达式语法-

UPDATE monthly_savings SET saving_per_quarter = ARRAY[25000,25000,27000,27000]
WHERE name = 'Manisha';

搜索数组元素

搜索数组的如下所示。

链接:https://www.learnfk.comhttps://www.learnfk.com/postgresql/postgresql-data-types.html

来源:LearnFk无涯教程网

SELECT * FROM monthly_savings WHERE saving_per_quarter[1] = 10000 OR
saving_per_quarter[2] = 10000 OR
saving_per_quarter[3] = 10000 OR
saving_per_quarter[4] = 10000;

如果知道数组的大小,则可以使用上面给出的搜索方法。否则,以下示例显示了如何在不知道大小的情况下进行搜索。

SELECT * FROM monthly_savings WHERE 10000 = ANY (saving_per_quarter);

Composite类型

此类型表示字段名称及其数据类型的列表,即,行的结构或表的记录。

复合类型声明

以下示例显示如何声明复合类型

CREATE TYPE inventory_item AS (
   name text,
   supplier_id integer,
   price numeric
);

可以在创建表中使用此数据类型,如下所示:

CREATE TABLE on_hand (
   item inventory_item,
   count integer
);

插入值

可以将复合值作为文字常量插入,将字段值括在括号内,并用逗号分隔。一个如下所示-

INSERT INTO on_hand VALUES (ROW('fuzzy dice', 42, 1.99), 1000);

这对于上面定义的 inventory_item 有效,ROW关键字实际上是可选的,只要您在表达式中具有多个字段即可。

访问值

要访问复合列的字段,请在字段名后面加上一个点,就像从表名中选择一个字段一样。如,要从无涯教程的on_hand示例表中选择一些子字段,查询将如下所示-

SELECT (item).name FROM on_hand WHERE (item).price > 9.99;

您甚至还可以使用表名(如在多表查询中),如下所示:

SELECT (on_hand.item).name FROM on_hand WHERE (on_hand.item).price > 9.99;

Range类型

范围类型表示使用一系列数据的数据类型,范围类型可以是离散范围(如,所有整数值1至10)或连续范围(如,在10:00 am和11:00 am之间的任何时间点)。

可用的内置范围类型包括以下范围-

  • int4range    - 整数范围

  • int8range    - bigint的范围

  • numrange   - 数字范围

  • tsrange        - 不带时区的时间戳范围

  • tstzrange     - 带时区的时间戳范围

  • daterange    - 日期范围

可以创建自定义范围类型以提供新的范围类型,如,以inet类型为基础的IP地址范围,或以float数据类型为基础的float范围。

范围类型分别使用[]和()字符支持包含范围和排除范围边界。如," [4,9)"表示所有从4开始并包括4到但不包括9的整数。

Pseudo类型

PostgreSQL类型系统包含许多专用条目,这些条目统称为伪类型,伪类型不能用作列数据类型,但可以用来声明函数的参数或输出类型。

S. No.Name & 描述
1

any

指示函数接受任何输入数据类型。

2

anyelement

指示函数接受任何数据类型。

3

anyarray

指示函数接受任何数组数据类型。

4

anynonarray

指示函数接受任何非数组数据类型。

5

anyenum

指示函数接受任何枚举数据类型。

6

anyrange

无涯教程网

指示函数接受任何范围数据类型。

7

cstring

指示函数接受或返回以Null结尾的C字符串。

8

internal

指示函数接受或返回服务器内部数据类型。

9

language_handler

声明了过程语言调用处理程序以返回language_handler。

10

fdw_handler

声明了外部数据包装器处理程序以返回fdw_handler。

11

record

标识返回未指定行类型的函数。

12

trigger

声明一个触发器函数以返回触发器。

13

void

指示函数不返回任何值。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

深入浅出区块链 -〔陈浩〕

零基础学Python -〔尹会生〕

分布式协议与算法实战 -〔韩健〕

分布式金融架构课 -〔任杰〕

郭东白的架构课 -〔郭东白〕

徐昊 · TDD项目实战70讲 -〔徐昊〕

Vue 3 企业级项目实战课 -〔杨文坚〕

LangChain 实战课 -〔黄佳〕

徐昊 · AI 时代的软件工程 -〔徐昊〕

好记忆不如烂笔头。留下您的足迹吧 :)