PostgreSQL cung cấp một tập hợp các kiểu dữ liệu gốc phong phú 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
- Loại số
- Ngày và giờ
- XML
- JSON
- Boolean
- Chút ít
- Dữ liệu nhị phân
- Mạng lưới
- Mảng
- Tạo loại dữ liệu của bạn
- Boolean
- Thời gian
- 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.
Chúng ta hãy nghiên cứu chi tiết các kiểu dữ liệu PostgreSQL
- Kiểu dữ liệu nhân vật
- Kiểu dữ liệu số
- Kiểu dữ liệu nhị phân
- Loại địa chỉ mạng
- Loại tìm kiếm văn bản
- Kiểu dữ liệu ngày / giờ
- Loại Boolean
- Các kiểu dữ liệu hình học
- Các loại được liệt kê
- Loại phạm vi
- Loại UUID
- Kiểu XML
- Loại JSON
- Loại giả
Kiểu dữ liệu nhân vật
PostgreSQL hỗ trợ các kiểu dữ liệu ký tự để lưu trữ các 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 kiểu dữ liệu ký tự: CHAR (n), VARCHAR (n) và TEXT.
Tên | Sự miêu tả |
---|---|
varchar (n) | Cho phép bạn khai báo độ dài thay đổi với một giới hạn |
Char (n) | Chiều dài cố định, có đệm trống |
Bản văn | Sử 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
Tên | Quy mô cửa hàng | Phạm vi |
---|---|---|
lửa nhỏ | 2 byte | -32768 đến +32767 |
số nguyên | 4 byte | -2147483648 đến +2147483647 |
bigint | 8 byte | -9223372036854775808 đến 9223372036854775807 |
thập phân | Biến đổi | Nếu bạn đã khai báo nó là loại dữ liệu thập phân, 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 đổi | Nếu bạn khai báo nó dưới dạng số, bạn có thể bao gồm số lên tới 131072 chữ số trước dấu thập phân đến 16383 chữ số sau dấu thập phân |
thực tế | 4 byte | 6 chữ số thập phân chính xác |
gấp đôi | 8 byte | 15 chữ số thập phân chính xá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. Kiểu dữ liệu Binary Postgres đượ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 không
- Các octet không in được
Các chuỗi ký tự không cho phép các octet bằng không và cũng không cho phép bất kỳ giá trị và chuỗi ký tự 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.
Tên | Kích thước lưu trữ | Sự miêu 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 kiểu gốc giúp bạn tối ưu hóa dữ liệu mạng.
Tên | Kích thước | Sự miêu tả |
---|---|---|
rượu táo | 7 hoặc 19 byes | Mạng IPV4 và IPv6 |
Inet | 7 hoặc 19 byte | Máy chủ và mạng IPV4 và IPV5 |
macaddr | 6 byte | Địa chỉ MAC |
Sử dụng các loại đị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 bằng 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 bản. Tìm kiếm toàn văn bản là tìm kiếm thông qua một bộ sưu tậ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 một truy vấn.
- Tìm kiếm văn bản Tsvector Các kiểu biến PostgreSQL đạ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
- Loại truy vấn tìm kiếm văn bản lưu trữ các từ khóa cần được tìm kiếm
Kiểu dữ liệu ngày / giờ
Dấu thời gian PostgreSQL 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ũng 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 với múi giờ thành UTC trên đầu vào và lưu trữ nó.
Nhập 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 loại dữ liệu tạm thời
Tên | Kích thước | Phạm vi | Độ phân giải |
---|---|---|---|
Dấu thời gian không có múi giờ | 8 byte | 4713 trước Công nguyên đến 294276 sau Công nguyên | 1microsecond / 14 chữ số |
Dấu thời gian với múi giờ | 8 byte | 4713 trước Công nguyên đến 294276 sau Công nguyên | 1microsecond / 14 chữ số |
ngày | 4 byte | 4713 trước Công nguyên đến 294276 sau Công nguyên | Một ngày |
Thời gian không có múi giờ | 8 byte | 00:00:00 đến 24:00:00 | 1microsecond / 14 chữ số |
Thời gian với múi giờ | 12 byte | 00:00:00 + 1459 đến 24: 00: 00-1459 | 1microsecond / 14 chữ số |
Khoảng thời gian | 12 byte | -178000000 đến 178000000 năm | 1microsecond / 14 chữ số |
Ví dụ:
Đầu vào | Sự miêu tả |
---|---|
2025-09-07 | ISO 8601, ngày 7 tháng 9 với bất kỳ kiểu ngày nào (định dạng được khuyến nghị) |
Ngày 7 tháng 9 năm 2025 | Ngày 7 tháng 9 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 9 tháng 7 với DMY |
9/7/25 | Ngày 7 tháng 9 năm 2025, với MDY |
2025-7 / 9 | Ngày 7 tháng 9 với bất kỳ kiểu hẹn hò nào |
-7-2018 | Ngày 7 tháng 9 với bất kỳ kiểu hẹn hò nào |
7-9-25 | Ngày 7 tháng 9 năm 2025, với YMD |
20250907 | ISO 8601,7 tháng 9 năm 20225 ở bất kỳ chế độ nào |
2025.250 | năm và ngày trong năm, trong trường hợp này là ngày 7 tháng 9 năm 2025 |
J25250 | Ngày Julian |
Thời gian / thời gian với đầu vào múi giờ
Đầu vào | Sự miêu tả |
---|---|
11: 19: 38.507 11:19:38 11:19 111938 | ISO 8601 |
11:19 sáng | Giống như 11:19 |
11:19 chiều | giống như 23:19 |
23: 19-3 23: 19-03: 00 231900-03 | ISO 8601, giống như 11:19 PM EST |
23:19 EST | múi giờ được chỉ định là EST, giống như 11:19 PM EST |
Loại Boolean
Kiểu dữ liệu Boolean có thể giữ
- Thật
- Sai
- vô giá trị
các giá trị.
Bạn sử dụng từ khóa bool hoặc boolean để 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 một cột boolean, Postgre sẽ chuyển đổi các giá trị như
- Đúng
- y
- 1
- t
- thật
thành 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 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 đại diện cho 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, v.v.
Tên | Kích thước lưu trữ | Đại diện | Sự miêu tả |
---|---|---|---|
Điểm | 16 byte | Chỉ trên một mặt phẳng | (x, y) |
Hàng | 32 byte | Dòng vô hạn | ((xl.yl). (x2.y2)) |
Lseg | 32 byte | Đoạn thẳng hữu hạn | ((xl.yl). (x2.y2)) |
Cái hộp | 32 byte | Hộp hình chữ nhật | ((xl.yl). (x2.y2)) |
Con đường | 16n + 16n byte | Đóng và mở đường dẫn | ((xl.yl),…) |
Đa giác | 40 + 16n byte | Đa giác | [(xl.yl)….] |
Vòng tròn | 24 byte | Vòng tròn | <(xy) .r> (tâm điểm và bán kính) |
Các loại được liệt kê
Kiểu dữ liệu PostgreSQL được liệt kê rất hữu ích để biểu diễ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 Enumerated được biểu diễn trong một bảng với các khóa ngoại để đảm bảo tính toàn vẹn của dữ liệu.
Thí 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ó duy 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 không có múi giờ
- lạ - Cho phép bạn hiển thị dấu thời gian với múi giờ
- phạm vi ngày - Phạm vi ngày
Loại UUID
Số nhận dạng duy nhất phổ biến (UUID) là một đại lượng 128 bit được tạo ra bởi một thuật toán. Rất ít khả năng cùng một số nhận dạng sẽ được tạo bởi một người khác trên thế giới 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, các mã định danh này là một lựa chọn lý tưởng vì nó cung cấp 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 ngang.
PostgreSQL có kiểu dữ liệu UUID gốc sử dụng 16 byte dung lượng lưu trữ… UUID là kiểu dữ liệu lý tưởng cho các khóa chính.
Thí dụ:
d5f28c97-b962-43be-9cf8-ca1632182e8e
Postgre cũng chấp nhận các dạng đầu vào UUID thay thế như tất cả các chữ hoa, không có dấu gạch nối, dấu ngoặc nhọn, v.v.
Kiểu XML
PostgreSQL cho phép bạn lưu trữ dữ liệu XML trong một kiểu dữ liệu, nhưng nó chỉ 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 tốt hay không.
Thí dụ:
XMLPARSE (DOCUMENT '') Data Type …
Loại JSON
Để lưu trữ dữ liệu JSON, PostgreSQL cung cấp 2 kiểu dữ liệu
- JSON
- JSONB
json | Jsonb |
---|---|
Một phần mở rộng đơn giản của kiểu dữ liệu văn bản với 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. | Chèn chậm nhưng hãy chọn (truy xuất dữ liệu nhanh) |
Lưu dữ liệu đã nhập chính xác theo cách nó bao gồm 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 |
Kiểu dữ liệu JSON được sử dụng rộng rãi nhất đã sử dụng chúng tôi jsonb trừ khi có một số nhu cầu chuyên biệt để sử dụng kiểu dữ liệu JSON.
Thí 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à kiểu giả. Bạn không thể sử dụng kiểu giả làm kiểu cột PostgreSQL. Có được sử dụng để khai báo hoặc đối số của hàm hoặc kiểu trả về.
Mỗi kiểu giả có sẵn đều hữu ích trong các tình huống mà tài liệu về hành vi của một hàm không tương ứng với việc chỉ lấy hoặc trả về một giá trị của một kiểu dữ liệu SQL cụ thể.
Tên | Sự miêu tả |
---|---|
Bất kì | Hàm chấp nhận tất 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ỳ kiểu dữ liệu nào. |
Bất kỳ enum | Hàm chấp nhận bất kỳ kiểu dữ liệu enum nào. |
Nonarray | Hàm chấp nhận bất kỳ kiểu dữ liệu không phải là mảng nào. |
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 bộ | Hàm nội bộ chấp nhận hoặc trả về kiểu dữ liệu máy chủ-nội bộ. |
Language_handler | Nó được khai báo để trả về trình xử lý ngôn ngữ. |
Ghi lại | Tìm một hàm trả về loại hàng không xác định. |
Kích hoạt | Một hàm kích hoạt được sử dụng để trả về trình kích hoạt. |
Đ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 một kiểu giả được sử dụng làm kiểu đối số.
Các phương pháp hay nhất sử dụng Loại 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ó những con số thực sự lớn
- Sử dụng "số" hầu như luôn luôn
- Sử dụng float trong PostgreSQL nếu bạn có nguồn dữ liệu IEEE 754
Tóm lược
- PostgreSQL cung cấp một tập hợp các kiểu dữ liệu gốc phong phú cho người dùng
- PostgreSQL hỗ trợ các kiểu dữ liệu ký tự để lưu trữ các 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 bộ tám
- PostgreSQL có Kiểu đị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 Cấu trúc dữ liệu PostgreSQL được thiết kế để hỗ trợ tìm kiếm toàn văn bản
- Ngày / giờ Các kiểu dữ liệu PSQL cho phép thông tin ngày và giờ ở các định dạng khác nhau
- Các kiểu trường Boolean Postgres có thể chứa ba giá trị 1. Đúng 2. Sai 3. Không
- Kiểu dữ liệu hình học PostgreSQL đạ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
- Số nhận dạng duy nhất phổ biến (UUID) là một đại lượng 128 bit được tạo ra bởi một thuật toán
- PostgreSQL có nhiều mục mục đích đặc biệt được gọi là kiểu 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 đầu vào