PostgreSQL Các kiểu dữ liệu: Byte, Số, Ký tự, Nhị phân

PostgreSQL cung cấp một tập hợp phong phú các kiểu dữ liệu gốc cho người dùng. Người dùng có thể thêm các kiểu mới với sự trợ giúp của lệnh CREATE TYPE. Nó cũng làm cho các truy vấn đơn giản hơn và dễ đọc hơn.

Các kiểu dữ liệu trong PostgreSQL

PostgreSQL hỗ trợ các kiểu dữ liệu sau:

  • Các loại văn bản
  • Các loại số
  • Ngày và giờ
  • XML
  • JSON
  • Boolean
  • bits
  • Dữ liệu nhị phân
  • mạng
  • Mảng
  • Tạo kiểu dữ liệu của bạn
  • Boolean
  • Tạm thời
  • UUID
  • Mảng
  • JSON
  • Các kiểu dữ liệu đặc biệt để lưu trữ địa chỉ mạng và dữ liệu hình học.

Hãy học PostgreSQL chi tiết các kiểu dữ liệu

Kiểu dữ liệu ký tự

PostgreSQL hỗ trợ các kiểu dữ liệu ký tự để lưu trữ giá trị văn bản. PostgreSQL xây dựng các kiểu dữ liệu ký tự từ các cấu trúc bên trong giống nhau. PostgreSQL cung cấp ba loại dữ liệu ký tự: CHAR(n), VARCHAR(n) và TEXT.

Họ tên Mô tả Chi tiết
varchar(n) Cho phép bạn khai báo độ dài thay đổi có giới hạn
Char(n) Chiều dài cố định, đệm trống
bản văn Người dùng có thể sử dụng kiểu dữ liệu này để khai báo một biến có độ dài không giới hạn

Kiểu dữ liệu số

PostgreSQL hỗ trợ hai loại số riêng biệt:

  • Số nguyên
  • Số dấu phẩy động
Họ tên Kích thước cửa hàng Phạm vi
lửa nhỏ 2 byte -32768 thành + 32767
số nguyên 4 byte -2147483648 thành + 2147483647
cố chấp 8 byte -9223372036854775808 9223372036854775807
số thập phân biến Nếu bạn khai báo nó là kiểu dữ liệu thập phân thì phạm vi từ 131072 chữ số trước dấu thập phân đến 16383 chữ số sau dấu thập phân
số biến Nếu bạn khai báo nó dưới dạng số, bạn có thể bao gồm số có tối đa 131072 chữ số trước dấu thập phân đến 16383 chữ số sau dấu thập phân
thực 4 byte Độ chính xác 6 chữ số thập phân
tăng gấp đôi 8 byte Độ chính xác 15 chữ số thập phân

Các kiểu dữ liệu nhị phân

Chuỗi nhị phân là một chuỗi các octet hoặc byte. Các kiểu dữ liệu Postgres nhị phân được chia theo hai cách.

  • Chuỗi nhị phân cho phép lưu trữ tỷ lệ cược có giá trị bằng 0
  • Octet không in được

Các chuỗi ký tự không cho phép các octet bằng 0 và cũng không cho phép bất kỳ giá trị và chuỗi octet nào khác không hợp lệ theo quy tắc mã hóa bộ ký tự của cơ sở dữ liệu.

Họ tên Kích thước lưu trữ Mô tả Chi tiết
byte 1 đến 4 byte cộng với kích thước của chuỗi nhị phân Chuỗi nhị phân có độ dài thay đổi

Loại địa chỉ mạng

Nhiều ứng dụng lưu trữ thông tin mạng như địa chỉ IP của người dùng hoặc cảm biến. PostgreSQL có ba loại gốc giúp bạn tối ưu hóa dữ liệu mạng.

Họ tên Kích thước máy Mô tả Chi tiết
rượu cít 7 hoặc 19 byte IPV4 và IPv6 mạng
inet 7 hoặc 19 byte Máy chủ và mạng IPV4 và IPV5
macaddr 6 byte Địa chỉ MAC

Sử dụng Kiểu Địa Chỉ Mạng có những ưu điểm sau

  1. Tiết kiệm không gian lưu trữ
  2. Kiểm tra lỗi đầu vào
  3. Các chức năng như tìm kiếm dữ liệu theo mạng con

Loại tìm kiếm văn bản

PostgreSQL cung cấp hai kiểu dữ liệu được thiết kế để hỗ trợ tìm kiếm toàn văn. Tìm kiếm toàn văn là tìm kiếm qua một tập hợp các tài liệu ngôn ngữ tự nhiên để tìm kiếm những tài liệu phù hợp nhất với truy vấn.

  • Tìm kiếm văn bản Tsvector PostgreSQL các loại biến đại diện cho một tài liệu ở dạng được tối ưu hóa cho tìm kiếm văn bản
  • Tìm kiếm văn bản loại truy vấn lưu trữ các từ khóa cần tìm kiếm

Kiểu dữ liệu ngày/giờ

PostgreSQL dấu thời gian cung cấp độ chính xác micro giây thay vì độ chính xác thứ hai. Hơn nữa, bạn còn có tùy chọn lưu trữ theo múi giờ hoặc không. PostgreSQL sẽ chuyển đổi dấu thời gian có múi giờ thành UTC khi nhập và lưu trữ nó.

Đầu vào ngày và giờ được chấp nhận ở nhiều định dạng khác nhau, bao gồm Postgres truyền thống, ISO 8601. Tương thích với SQL, v.v.

PostgreSQL hỗ trợ đặt hàng Ngày/Tháng/Năm. Các định dạng được hỗ trợ là DMY, MDY, YMD

Các kiểu dữ liệu tạm thời

Họ tên Kích thước máy Phạm vi Độ phân giải
Dấu thời gian không có múi giờ 8 byte 4713 TCN đến 294276 SCN 1 micro giây/14 chữ số
Dấu thời gian với múi giờ 8 byte 4713 TCN đến 294276 SCN 1 micro giây/14 chữ số
ngày 4 byte 4713 TCN đến 294276 SCN Một ngày
Thời gian không có múi giờ 8 byte 00:00:00 to 24:00:00 1 micro giây/14 chữ số
Thời gian với múi giờ 12 byte 00:00:00 + 1459 đến 24:00:00-1459 1 micro giây/14 chữ số
Khoảng thời gian 12 byte -178000000 đến 178000000 năm 1 micro giây/14 chữ số

Các ví dụ

Đầu vào Mô tả Chi tiết
2025-09-07 ISO 8601, ngày 7 tháng XNUMX với bất kỳ kiểu ngày nào (định dạng được đề xuất)
Tháng Chín 7, 2025 Ngày 7 tháng XNUMX với bất kỳ kiểu hẹn hò nào
9/7/2025 Ngày 7 tháng 9 với MDY, ngày XNUMX tháng XNUMX với DMY
9/7/25 Ngày 7 tháng 2025 năm XNUMX, với MDY
2025-Sep-7 Ngày 7 tháng XNUMX với bất kỳ kiểu hẹn hò nào
Tháng chín-7-2018 Ngày 7 tháng XNUMX với bất kỳ kiểu hẹn hò nào
7-Sep-25 Ngày 7 tháng 2025 năm XNUMX, với YMD
20250907 ISO 8601,7 tháng 20225 năm XNUMX ở mọi chế độ
2025.250 năm và ngày trong năm, trong trường hợp này là ngày 7 tháng 2025 năm XNUMX
J25250 Ngày Julian

Thời gian/Thời gian với đầu vào múi giờ

Đầu vào Mô tả Chi tiết
11:19:38.507
11:19:38
11:19
111938
ISO 8601
11: 19 AM Tương tự như 11:19
11: 19 PM giống như 23:19
23: 19-3
23: 19-03: 00
231900-03
ISO 8601, giống như 11:19 tối theo giờ EST
23: ESTUMX EST múi giờ được chỉ định là EST, giống như 11:19 tối EST

Kiểu Boolean

Kiểu dữ liệu Boolean có thể chứa

  • Thật
  • Sai
  • vô giá trị

các giá trị.

Bạn sử dụng một bool or boolean từ khóa để khai báo một cột có kiểu dữ liệu Boolean.

Khi bạn chèn các giá trị vào cột boolean, Postgre sẽ chuyển đổi các giá trị như

  • y
  • 1
  • t
  • đúng

vào 1.

Trong khi các giá trị như

  • Không
  • N
  • 0
  • F
  • Sai

được chuyển đổi thành 0

Trong khi chọn dữ liệu, các giá trị lại được chuyển đổi trở lại thành có, đúng, y, v.v.

Các kiểu dữ liệu hình học

Các kiểu dữ liệu hình học biểu diễn các đối tượng không gian hai chiều. Chúng giúp thực hiện các hoạt động như xoay, chia tỷ lệ, dịch thuật, v.v.

Họ tên Kích thước lưu trữ Đại diện Mô tả Chi tiết
Điểm 16 byte Điểm trên mặt phẳng (x, y)
Dòng 32 byte Dòng vô hạn ((xl.yl ).(x2.y2))
Lseg 32 byte Đoạn đường hữu hạn ((xl.yl ).(x2.y2))
Box 32 byte Rectangular Box ((xl.yl ).(x2.y2))
Đường dẫn 16n + 16n byte Đóng và mở đường dẫn ((xl.yl),…)
Polygon 40 + 16n byte Polygon [(xl.yl)….]
Vòng tròn 24 byte Vòng tròn <(xy).r> (tâm và bán kính)

Các loại liệt kê

Liệt kê PostgreSQL kiểu dữ liệu rất hữu ích để thể hiện thông tin hiếm khi thay đổi như mã quốc gia hoặc id chi nhánh. Kiểu dữ liệu liệt kê được thể hiện trong bảng có khóa ngoại để đảm bảo tính toàn vẹn dữ liệu.

Ví dụ

Màu tóc khá tĩnh trong cơ sở dữ liệu nhân khẩu học

CREATE TYPE hair_color AS ENUM
('brown','black','red','grey','blond')

Các loại liệt kê

Loại phạm vi

Nhiều ứng dụng kinh doanh yêu cầu dữ liệu trong phạm vi. Thông thường, hai cột (ví dụ: ngày bắt đầu, ngày kết thúc) được xác định để xử lý các phạm vi. Điều này vừa không hiệu quả vừa khó bảo trì.

Postgre đã xây dựng các loại phạm vi như sau

  • int4range - Hiển thị phạm vi số nguyên
  • int8range — Phạm vi hiển thị của bigint
  • numrange - Hiển thị phạm vi số
  • tstrange — Giúp bạn hiển thị dấu thời gian mà không cần múi giờ
  • lạ - Cho phép bạn hiển thị dấu thời gian theo múi giờ
  • phạm vi ngày - Phạm vi ngày

loại UUID

Nhận dạng duy nhất toàn cầu (UUID) là số lượng 128 bit được tạo bởi thuật toán. Rất khó có khả năng một người khác trên thế giới sẽ tạo ra cùng một mã định danh bằng cách sử dụng cùng một thuật toán. Đó là lý do tại sao đối với các hệ thống phân tán, những mã định danh này là lựa chọn lý tưởng vì nó mang lại tính duy nhất trong một cơ sở dữ liệu duy nhất. UUID được viết dưới dạng một nhóm các chữ số thập lục phân viết thường, với các nhóm khác nhau được phân tách bằng dấu gạch nối.

PostgreSQL có loại dữ liệu UUID gốc tiêu tốn 16 byte dung lượng lưu trữ.. UUID là loại Dữ liệu lý tưởng cho khóa chính.

Ví dụ

d5f28c97-b962-43be-9cf8-ca1632182e8e

Postgre cũng chấp nhận các hình thức đầu vào UUID thay thế như tất cả chữ hoa, không có dấu gạch nối, dấu ngoặc nhọn, v.v.

loại XML

PostgreSQL cho phép bạn lưu trữ dữ liệu XML theo một kiểu dữ liệu, nhưng nó không gì khác hơn là một phần mở rộng cho kiểu dữ liệu văn bản. Nhưng ưu điểm là nó kiểm tra xem XML đầu vào có được định dạng đúng hay không.

Ví dụ

XMLPARSE (DOCUMENT '<?xml version="1.0"?><tutorial><chapter>Data Type</chapter><chapter>...</chapter></tutorial>')

Loại JSON

Để lưu trữ dữ liệu JSON PostgreSQL cung cấp 2 loại dữ liệu

  1. JSON
  2. JSONB
json Jsonb
Phần mở rộng đơn giản của kiểu dữ liệu văn bản có xác thực JSON Biểu diễn nhị phân của dữ liệu JSON
Chèn nhanh nhưng truy xuất dữ liệu tương đối chậm. Insert chậm nhưng select (truy xuất dữ liệu nhanh)
Lưu dữ liệu đã nhập chính xác theo cách bao gồm cả khoảng trắng. Hỗ trợ lập chỉ mục. Có thể tối ưu hóa khoảng trắng để truy xuất nhanh hơn.
Xử lý lại khi truy xuất dữ liệu Không cần xử lý lại khi truy xuất dữ liệu

Loại dữ liệu JSON được sử dụng rộng rãi nhất là jsonb trừ khi có một số nhu cầu đặc biệt về sử dụng loại dữ liệu JSON.

Ví dụ

CREATE TABLE employee (
  id integer NOT NULL,
  age  integer NOT NULL,
  data jsonb
);

INSERT INTO employee VALUES (1, 35, '{"name": "Tom Price", "tags": ["Motivated", "SelfLearner"], "onboareded": true}'); 

Loại giả

PostgreSQL có nhiều mục có mục đích đặc biệt được gọi là loại giả. Bạn không thể sử dụng loại giả như PostgreSQL các kiểu cột. Được sử dụng để khai báo đối số hoặc kiểu trả về của hàm.

Mỗi loại giả có sẵn đều hữu ích trong trường hợp tài liệu hành vi của hàm không tương ứng với việc đơn giản lấy hoặc trả về giá trị của một đối tượng cụ thể. Kiểu dữ liệu SQL.

Họ tên Mô tả Chi tiết
Bất kì Hàm chấp nhận tất cả các kiểu dữ liệu đầu vào.
Một mảng Hàm chấp nhận bất kỳ kiểu dữ liệu mảng nào.
Bất kỳ phần tử nào Hàm chấp nhận bất kỳ loại dữ liệu nào.
Bất kỳ enum nào Hàm chấp nhận bất kỳ kiểu dữ liệu enum nào.
Không có mảng Hàm chấp nhận mọi kiểu dữ liệu không phải mảng.
Chuỗi C Hàm chấp nhận hoặc trả về chuỗi C kết thúc bằng null.
nội Hàm nội bộ chấp nhận hoặc trả về kiểu dữ liệu nội bộ của máy chủ.
xử lý ngôn ngữ Nó được khai báo để trả về trình xử lý ngôn ngữ.
Kỷ lục Tìm hàm trả về loại hàng không xác định.
Cò súng Một hàm trigger được sử dụng để trả về trigger.

Điều quan trọng là người dùng đang sử dụng hàm này cần đảm bảo rằng hàm sẽ hoạt động an toàn khi sử dụng loại giả làm loại đối số.

Các phương pháp hay nhất khi sử dụng Kiểu dữ liệu

  • Sử dụng kiểu dữ liệu “văn bản” trừ khi bạn muốn giới hạn đầu vào
  • Không bao giờ sử dụng “char”.
  • Số nguyên sử dụng “int”. Chỉ sử dụng bigint khi bạn có số thực sự lớn
  • Hầu như luôn luôn sử dụng “số”
  • Sử dụng phao trong PostgreSQL nếu bạn có nguồn dữ liệu IEEE 754

Tổng kết

  • PostgreSQL cung cấp một tập hợp phong phú các kiểu dữ liệu gốc cho người dùng
  • PostgreSQL hỗ trợ các kiểu dữ liệu ký tự để lưu trữ giá trị văn bản
  • PostgreSQL hỗ trợ hai loại số riêng biệt: 1. Số nguyên, 2. Số dấu phẩy động
  • Chuỗi nhị phân là một chuỗi byte hoặc octet
  • PostgreSQL có loại địa chỉ Mạng giúp bạn tối ưu hóa việc lưu trữ dữ liệu mạng
  • Tìm kiếm văn bản PostgreSQL cấu trúc dữ liệu được thiết kế để hỗ trợ tìm kiếm toàn văn
  • Các kiểu dữ liệu PSQL ngày/giờ cho phép thông tin ngày và giờ ở nhiều định dạng khác nhau
  • Các loại trường Boolean Postgres có thể chứa ba giá trị 1. Đúng 2. Sai 3. Null
  • hình học PostgreSQL kiểu dữ liệu đại diện cho các đối tượng không gian hai chiều
  • Các kiểu dữ liệu được liệt kê trong PostgreSQL rất hữu ích để thể hiện thông tin hiếm khi thay đổi như mã quốc gia hoặc id chi nhánh
  • Nhận dạng duy nhất toàn cầu (UUID) là số lượng 128 bit được tạo bởi thuật toán
  • PostgreSQL có nhiều mục có mục đích đặc biệt được gọi là loại giả
  • Cách tốt nhất là sử dụng kiểu dữ liệu “văn bản” trừ khi bạn muốn giới hạn số lượng đầu vào