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
- Tiết kiệm không gian lưu trữ
- Kiểm tra lỗi đầu vào
- 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ư
- Có
- 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')
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
- JSON
- 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