PostgreSQL ประเภทข้อมูล: ไบต์, ตัวเลข, ตัวอักษร, ไบนารี

PostgreSQL นำเสนอชุดข้อมูลประเภทดั้งเดิมที่หลากหลายสำหรับผู้ใช้ ผู้ใช้สามารถเพิ่มประเภทใหม่ได้ด้วยความช่วยเหลือของคำสั่ง CREATE TYPE นอกจากนี้ยังทำให้แบบสอบถามง่ายขึ้นและอ่านได้ง่ายขึ้นอีกด้วย

ประเภทข้อมูลใน PostgreSQL

PostgreSQL รองรับชนิดข้อมูลต่อไปนี้:

  • ประเภทข้อความ
  • ประเภทตัวเลข
  • วันที่และเวลา
  • XML
  • JSON
  • บูลีน
  • เกร็ด
  • ข้อมูลไบนารี
  • เครือข่าย
  • อาร์เรย์
  • สร้างประเภทข้อมูลของคุณ
  • บูลีน
  • ชั่วคราว
  • UUID
  • แถว
  • JSON
  • ชนิดข้อมูลพิเศษสำหรับจัดเก็บที่อยู่เครือข่ายและข้อมูลเชิงเรขาคณิต

มาเรียนกันเถอะ PostgreSQL ประเภทข้อมูลโดยละเอียด

ประเภทข้อมูลตัวละคร

PostgreSQL รองรับประเภทข้อมูลอักขระสำหรับจัดเก็บค่าข้อความ PostgreSQL สร้างชนิดข้อมูลอักขระจากโครงสร้างภายในเดียวกัน PostgreSQL มีประเภทข้อมูลอักขระสามประเภท: CHAR(n), VARCHAR(n) และ TEXT

Name Descriptไอออน
วาร์ชาร์(n) ช่วยให้คุณสามารถประกาศความยาวผันแปรได้โดยมีขีดจำกัด
ถ่าน(n) ความยาวคงที่ เบาะเปล่า
ข้อความ ใช้สามารถใช้ข้อมูลประเภทนี้ในการประกาศตัวแปรที่มีความยาวไม่จำกัด

ประเภทข้อมูลตัวเลข

PostgreSQL รองรับตัวเลขสองประเภทที่แตกต่างกัน:

  • จำนวนเต็ม
  • ตัวเลขจุดลอยตัว
Name ขนาดร้าน พิสัย
ขนาดเล็ก ไบต์ 2 -32768 to + 32767
จำนวนเต็ม ไบต์ 4 -2147483648 to + 2147483647
ใหญ่ ไบต์ 8 -9223372036854775808 ไป 9223372036854775807
ทศนิยม ตัวแปร หากประกาศเป็นประเภทข้อมูลทศนิยมจะมีตั้งแต่ 131072 หลักก่อนจุดทศนิยม ถึง 16383 หลักหลังจุดทศนิยม
เป็นตัวเลข ตัวแปร หากประกาศเป็นตัวเลขสามารถใส่ตัวเลขก่อนจุดทศนิยมได้ 131072 หลัก ถึง 16383 หลักหลังจุดทศนิยม
จริง ไบต์ 4 ความแม่นยำระดับทศนิยม 6 หลัก
สอง ไบต์ 8 ความแม่นยำระดับทศนิยม 15 หลัก

ประเภทข้อมูลไบนารี

สตริงไบนารี่คือลำดับของอ็อกเท็ตหรือไบต์ ประเภทข้อมูล Binary Postgres แบ่งออกเป็นสองวิธี

  • สตริงไบนารี่อนุญาตให้เก็บอัตราต่อรองของค่าศูนย์
  • ออคเต็ตที่ไม่สามารถพิมพ์ได้

สตริงอักขระไม่อนุญาตให้มีค่าออคเต็ตเป็นศูนย์ และยังไม่อนุญาตให้ใช้ค่าออคเต็ตและลำดับอื่นๆ ที่ไม่ถูกต้องตามกฎการเข้ารหัสชุดอักขระของฐานข้อมูล

Name ขนาดพื้นที่จัดเก็บ Descriptไอออน
byte 1 ถึง 4 ไบต์บวกขนาดของสตริงไบนารี่ สตริงไบนารี่ที่มีความยาวผันแปรได้

ประเภทที่อยู่เครือข่าย

แอปพลิเคชันจำนวนมากจัดเก็บข้อมูลเครือข่าย เช่น ที่อยู่ IP ของผู้ใช้หรือเซ็นเซอร์ PostgreSQL มีเนทิฟสามประเภทซึ่งช่วยให้คุณเพิ่มประสิทธิภาพข้อมูลเครือข่าย

Name ขนาด Descriptไอออน
ไซเดอร์ 7 หรือ 19 ไบต์ IPV4 และ IPv6 เครือข่าย
ผู้เคร่งครัดในวินัย 7 หรือ 19 ไบต์ โฮสต์และเครือข่าย IPV4 และ IPV5
แมคคาด ไบต์ 6 ที่อยู่ MAC

การใช้ประเภทที่อยู่เครือข่ายมีข้อดีดังต่อไปนี้

  1. ประหยัดพื้นที่จัดเก็บ
  2. การตรวจสอบข้อผิดพลาดอินพุต
  3. ฟังก์ชั่นเช่นการค้นหาข้อมูลตามซับเน็ต

ประเภทการค้นหาข้อความ

PostgreSQL มีประเภทข้อมูลสองประเภทที่ได้รับการออกแบบมาเพื่อรองรับการค้นหาข้อความแบบเต็ม การค้นหาข้อความแบบเต็มคือการค้นหาผ่านคอลเล็กชันเอกสารภาษาธรรมชาติเพื่อค้นหาเอกสารที่ตรงกับคำค้นหามากที่สุด

  • ค้นหาข้อความ Tsvector PostgreSQL ประเภทตัวแปรแสดงถึงเอกสารในรูปแบบที่ปรับให้เหมาะสมสำหรับการค้นหาข้อความ
  • การค้นหาข้อความประเภทข้อความค้นหาจะเก็บคำสำคัญที่ต้องการค้นหา

ประเภทข้อมูลวันที่/เวลา

PostgreSQL การประทับเวลาให้ความแม่นยำในระดับไมโครวินาทีแทนที่จะเป็นความแม่นยำระดับที่สอง นอกจากนี้คุณยังมีตัวเลือกในการจัดเก็บแบบมีเขตเวลาหรือไม่มีก็ได้ PostgreSQL จะแปลงการประทับเวลาด้วยเขตเวลาเป็น UTC ในอินพุตและจัดเก็บ

การป้อนข้อมูลวันที่และเวลาเป็นที่ยอมรับในรูปแบบต่างๆ รวมถึง Postgres แบบดั้งเดิม, ISO 8601 รองรับ SQL เป็นต้น

PostgreSQL รองรับการสั่งวัน/เดือน/ปี รูปแบบที่รองรับคือ DMY, MDY, YMD

ประเภทข้อมูลชั่วคราว

Name ขนาด พิสัย ความละเอียด
การประทับเวลาโดยไม่มีเขตเวลา ไบต์ 8 4713 ปีก่อนคริสตกาล ถึง ค.ศ. 294276 1 ไมโครวินาที/14 หลัก
การประทับเวลาด้วยเขตเวลา ไบต์ 8 4713 ปีก่อนคริสตกาล ถึง ค.ศ. 294276 1 ไมโครวินาที/14 หลัก
ข้อมูล ไบต์ 4 4713 ปีก่อนคริสตกาล ถึง ค.ศ. 294276 อยู่มาวันหนึ่ง
เวลาที่ไม่มีเขตเวลา ไบต์ 8 00:00:00 to 24:00:00 1 ไมโครวินาที/14 หลัก
เวลากับเขตเวลา ไบต์ 12 00:00:00 น. + 1459 ถึง 24:00:00-1459 1 ไมโครวินาที/14 หลัก
ระยะห่าง ไบต์ 12 -178000000 ถึง 178000000 ปี 1 ไมโครวินาที/14 หลัก

ตัวอย่าง

อินพุต Descriptไอออน
2025-09-07 ISO 8601 วันที่ 7 กันยายน พร้อมรูปแบบวันที่ใดก็ได้ (รูปแบบที่แนะนำ)
September 7, 2025 7 กันยายนกับสไตล์วันที่ใดก็ได้
9/7/2025 7 กันยายนกับ MDY 9 กรกฎาคมกับ DMY
9/7/25 7 กันยายน 2025 กับ MDY
2025-Sep-7 7 กันยายนกับสไตล์วันที่ใดก็ได้
7 ก.ย. 2018 7 กันยายนกับสไตล์วันที่ใดก็ได้
7-Sep-25 7 กันยายน 2025 กับ YMD
20250907 ISO 8601,7 ก.ย. 20225 ในโหมดใดก็ได้
2025.250 ปีและวันของปี ในกรณีนี้คือ 7 กันยายน 2025
J25250 จูเลียนเดท

เวลา/ เวลาพร้อมอินพุตโซนเวลา

อินพุต Descriptไอออน
11:19:38.507
11:19:38
11:19
111938
ISO.8601
11: 19 น เช่นเดียวกับ 11:19
11: 19 ส่วนตัว เช่นเดียวกับ 23:19
23: 19-3
23:19-03:00
231900-03
ISO 8601 เหมือนกับ 11:19 น. EST
23: 19 EST โซนเวลาที่ระบุเป็น EST เช่นเดียวกับ 11:19 น. EST

ประเภทบูลีน

ชนิดข้อมูลบูลีนสามารถเก็บได้

  • จริง
  • เท็จ
  • โมฆะ

ค่า

คุณใช้ a บูล or บูล คีย์เวิร์ดเพื่อประกาศคอลัมน์ที่มีชนิดข้อมูลบูลีน

เมื่อคุณแทรกค่าลงในคอลัมน์บูลีน Postgre จะแปลงค่าต่างๆ เช่น

  • ใช่
  • y
  • 1
  • t
  • จริง

เป็น 1

ในขณะที่คุณค่าเช่น

  • ไม่
  • N
  • 0
  • F
  • เท็จ

จะถูกแปลงเป็น 0

ขณะเลือกข้อมูล ค่าจะถูกแปลงกลับเป็นใช่ จริง y ฯลฯ อีกครั้ง

ประเภทข้อมูลเรขาคณิต

ประเภทข้อมูลทางเรขาคณิตแสดงถึงวัตถุเชิงพื้นที่สองมิติ ซึ่งช่วยในการดำเนินการต่างๆ เช่น การหมุน การปรับขนาด การแปล ฯลฯ

Name ขนาดการจัดเก็บ การเป็นตัวแทน Descriptไอออน
จุด ไบต์ 16 ชี้ไปที่เครื่องบิน (x,ย)
Line ไบต์ 32 เส้นอนันต์ ((xl.yl ).(x2.y2))
แอลเซก ไบต์ 32 ส่วนของเส้นจำกัด ((xl.yl ).(x2.y2))
Box ไบต์ 32 รูปสี่เหลี่ยมผืนผ้า Box ((xl.yl ).(x2.y2))
เส้นทาง 16n + 16n ไบต์ ปิดและเปิดเส้นทาง ((xl.yl),…)
รูปหลายเหลี่ยม 40 + 16n ไบต์ รูปหลายเหลี่ยม [(xl.yl)….]
วงกลม ไบต์ 24 วงกลม <(xy).r> (จุดกึ่งกลางและรัศมี)

ประเภทที่แจงนับ

แจกแจง PostgreSQL ชนิดข้อมูลมีประโยชน์ในการแสดงข้อมูลที่ไม่ค่อยเปลี่ยนแปลง เช่น รหัสประเทศ หรือรหัสสาขา ประเภทข้อมูลที่แจกแจงจะแสดงในตารางที่มีคีย์นอกเพื่อให้แน่ใจว่าข้อมูลมีความสมบูรณ์

ตัวอย่าง

สีผมค่อนข้างคงที่ในฐานข้อมูลประชากร

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

ประเภทที่แจงนับ

ประเภทช่วง

แอปพลิเคชันทางธุรกิจจำนวนมากต้องการข้อมูลในช่วง โดยทั่วไปแล้ว สองคอลัมน์ (ตัวอย่าง: วันที่เริ่มต้น, วันที่สิ้นสุด) ถูกกำหนดไว้เพื่อจัดการกับช่วง สิ่งนี้ไม่มีประสิทธิภาพและยากต่อการบำรุงรักษา

Postgre ได้สร้างประเภทช่วงดังต่อไปนี้

  • int4range - แสดงช่วงของจำนวนเต็ม
  • int8range - แสดงช่วงของ bigint
  • numrange - แสดงช่วงตัวเลข
  • tstrange — ช่วยให้คุณแสดงการประทับเวลาโดยไม่มีเขตเวลา
  • แปลก — ให้คุณแสดงการประทับเวลาพร้อมเขตเวลา
  • ช่วงวันที่ — ช่วงวันที่

ประเภท UUID

Universally Unique Identifies (UUID) คือปริมาณ 128 บิตซึ่งสร้างขึ้นโดยอัลกอริทึม ไม่น่าเป็นไปได้อย่างยิ่งที่บุคคลอื่นในโลกจะสร้างตัวระบุเดียวกันโดยใช้อัลกอริทึมเดียวกัน นั่นเป็นเหตุผลว่าทำไมสำหรับระบบแบบกระจาย ตัวระบุเหล่านี้จึงเป็นตัวเลือกที่เหมาะสมที่สุด เนื่องจากมีความเป็นเอกลักษณ์ภายในฐานข้อมูลเดียว UUID ถูกเขียนเป็นกลุ่มของเลขฐานสิบหกตัวพิมพ์เล็ก โดยมีกลุ่มต่างๆ คั่นด้วยเครื่องหมายขีดกลาง

PostgreSQL มีประเภทข้อมูล UUID ดั้งเดิมซึ่งใช้พื้นที่เก็บข้อมูล 16 ไบต์ .. UUID เป็นประเภทข้อมูลในอุดมคติสำหรับคีย์หลัก

ตัวอย่าง

d5f28c97-b962-43be-9cf8-ca1632182e8e

Postgre ยังยอมรับรูปแบบอื่นของอินพุต UUID เช่น ตัวพิมพ์ใหญ่ทั้งหมด ไม่มีเครื่องหมายยัติภังค์ วงเล็บปีกกา ฯลฯ

ประเภท XML

PostgreSQL ช่วยให้คุณสามารถจัดเก็บข้อมูล XML ในรูปแบบข้อมูลได้ แต่จะไม่มีอะไรมากไปกว่าส่วนขยายของประเภทข้อมูลข้อความ แต่ข้อดีคือตรวจสอบว่า XML อินพุตมีรูปแบบที่ถูกต้องหรือไม่

ตัวอย่าง

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

ประเภท JSON

เพื่อจัดเก็บข้อมูล JSON PostgreSQL มีข้อมูล 2 ประเภท

  1. JSON
  2. เจสันบี
JSON เจสันบี
ส่วนขยายอย่างง่ายของประเภทข้อมูลข้อความพร้อมการตรวจสอบ JSON การแสดงไบนารีของข้อมูล JSON
การแทรกทำได้รวดเร็วแต่การดึงข้อมูลค่อนข้างช้า การแทรกช้าแต่เลือก (การดึงข้อมูลทำได้เร็ว)
บันทึกข้อมูลที่ป้อนในลักษณะเดียวกับการรวมช่องว่าง รองรับการจัดทำดัชนี อาจปรับช่องว่างให้เหมาะสมเพื่อให้ดึงข้อมูลได้เร็วขึ้น
การประมวลผลซ้ำในการดึงข้อมูล ไม่จำเป็นต้องมีการประมวลผลซ้ำในการดึงข้อมูล

ประเภทข้อมูล JSON ที่ใช้กันอย่างแพร่หลายส่วนใหญ่ใช้ us jsonb เว้นแต่จะมีความจำเป็นพิเศษบางประการในการใช้ประเภทข้อมูล JSON

ตัวอย่าง

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}'); 

ประเภทหลอก

PostgreSQL มีรายการวัตถุประสงค์พิเศษมากมายที่เรียกว่าประเภทหลอก คุณไม่สามารถใช้ประเภทหลอกเป็นได้ PostgreSQL ประเภทคอลัมน์ ใช้ในการประกาศหรืออาร์กิวเมนต์ของฟังก์ชันหรือประเภทการส่งคืน

ประเภทหลอกที่มีอยู่แต่ละประเภทมีประโยชน์ในสถานการณ์ที่เอกสารลักษณะการทำงานของฟังก์ชันไม่สอดคล้องกับการรับหรือส่งคืนค่าเฉพาะ ชนิดข้อมูล SQL.

Name Descriptไอออน
ใด ฟังก์ชั่นยอมรับประเภทข้อมูลอินพุตทั้งหมด
อาร์เรย์ ฟังก์ชันยอมรับชนิดข้อมูลอาร์เรย์ใดๆ
องค์ประกอบใดๆ ฟังก์ชันยอมรับข้อมูลชนิดใดก็ได้
แจงนับใดๆ ฟังก์ชันยอมรับชนิดข้อมูลแจงนับใดๆ
ไม่อาร์เรย์ ฟังก์ชันยอมรับชนิดข้อมูลที่ไม่ใช่อาร์เรย์
ซีสตริง ฟังก์ชันยอมรับหรือส่งคืนสตริง C ที่สิ้นสุดด้วยค่า null
ภายใน ฟังก์ชันภายในยอมรับหรือส่งคืนชนิดข้อมูลภายในเซิร์ฟเวอร์
ภาษา_ตัวจัดการ มีการประกาศให้ส่งคืนตัวจัดการภาษา
บันทึก ค้นหาฟังก์ชันที่ส่งคืนประเภทแถวที่ไม่ระบุ
ทริกเกอร์ ฟังก์ชันทริกเกอร์ใช้เพื่อส่งคืนทริกเกอร์

สิ่งสำคัญคือผู้ใช้ที่ใช้ฟังก์ชันนี้ต้องแน่ใจว่าฟังก์ชันจะทำงานอย่างปลอดภัยเมื่อใช้ประเภทหลอกเป็นประเภทอาร์กิวเมนต์

แนวทางปฏิบัติที่ดีที่สุดโดยใช้ชนิดข้อมูล

  • ใช้ประเภทข้อมูล "ข้อความ" เว้นแต่คุณต้องการจำกัดอินพุต
  • ห้ามใช้ “ถ่าน”
  • จำนวนเต็มใช้ "int" ใช้ bigint เฉพาะเมื่อคุณมีตัวเลขที่ใหญ่จริงๆ เท่านั้น
  • ใช้ “ตัวเลข” เกือบทุกครั้ง
  • ใช้ลอยเข้า PostgreSQL หากคุณมีแหล่งข้อมูล IEEE 754

สรุป

  • PostgreSQL นำเสนอชุดข้อมูลเนทิฟที่หลากหลายสำหรับผู้ใช้
  • PostgreSQL รองรับประเภทข้อมูลอักขระสำหรับจัดเก็บค่าข้อความ
  • PostgreSQL รองรับตัวเลข 1 ประเภทที่แตกต่างกัน: 2. จำนวนเต็ม XNUMX. ตัวเลขจุดลอยตัว
  • สตริงไบนารี่คือลำดับของไบต์หรือออคเต็ต
  • PostgreSQL มีประเภทที่อยู่เครือข่ายเพื่อช่วยคุณเพิ่มประสิทธิภาพการจัดเก็บข้อมูลเครือข่าย
  • ค้นหาข้อความ PostgreSQL โครงสร้างข้อมูลได้รับการออกแบบเพื่อรองรับการค้นหาข้อความแบบเต็ม
  • ประเภทข้อมูลวันที่/เวลา PSQL อนุญาตข้อมูลวันที่และเวลาในรูปแบบต่างๆ
  • ประเภทฟิลด์ Boolean Postgres สามารถเก็บค่าได้ 1 ค่า 2. True 3. False XNUMX. Null
  • ทางเรขาคณิต PostgreSQL ชนิดข้อมูลแสดงถึงวัตถุเชิงพื้นที่สองมิติ
  • ประเภทข้อมูลที่ระบุใน PostgreSQL มีประโยชน์สำหรับการแสดงข้อมูลที่ไม่ค่อยเปลี่ยนแปลง เช่น รหัสประเทศ หรือรหัสสาขา
  • Universally Unique Identifies (UUID) คือปริมาณ 128 บิตซึ่งสร้างขึ้นโดยอัลกอริทึม
  • PostgreSQL มีรายการวัตถุประสงค์พิเศษมากมายที่เรียกว่าประเภทหลอก
  • แนวทางปฏิบัติที่ดีที่สุดคือการใช้ชนิดข้อมูล "ข้อความ" เว้นแต่คุณต้องการจำกัดอินพุต