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 |
การใช้ประเภทที่อยู่เครือข่ายมีข้อดีดังต่อไปนี้
- ประหยัดพื้นที่จัดเก็บ
- การตรวจสอบข้อผิดพลาดอินพุต
- ฟังก์ชั่นเช่นการค้นหาข้อมูลตามซับเน็ต
ประเภทการค้นหาข้อความ
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 ประเภท
- JSON
- เจสันบี
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 มีรายการวัตถุประสงค์พิเศษมากมายที่เรียกว่าประเภทหลอก
- แนวทางปฏิบัติที่ดีที่สุดคือการใช้ชนิดข้อมูล "ข้อความ" เว้นแต่คุณต้องการจำกัดอินพุต