| โครงสร้าง |
|---|
| แคตตาล็อกเดี่ยวที่แยกกันโดยสมบูรณ์ บรรจุ schema ทั้งหมดภายในคลัสเตอร์ | แยกแอปพลิเคชันหรือสภาพแวดล้อมที่ต้องไม่แชร์ข้อมูลกัน |
| เนมสเปซที่มีชื่อภายในฐานข้อมูล ใช้รวมกลุ่มอ็อบเจกต์ที่เกี่ยวข้องกัน | จัดระเบียบอ็อบเจกต์ตามฟีเจอร์หรือเจ้าของ และเลี่ยงการชนกันของชื่อ |
| ตำแหน่งบนดิสก์ที่ตั้งชื่อไว้ ใช้วางไฟล์ของตารางและอินเด็กซ์ | ส่งตารางที่ใช้งานหนักไปยังพื้นที่เก็บที่เร็ว และเก็บข้อมูลเย็นไว้บนดิสก์ราคาถูก |
| การตั้งค่าที่กำหนดว่าชื่ออ็อบเจกต์ที่ไม่ระบุ schema จะไปตรงกับ schema ใด | ชี้เซสชันไปที่ schema ที่ถูกต้อง เพื่อให้คิวรีใช้ชื่อแบบสั้นได้ |
| คำอธิบายที่เก็บบนอ็อบเจกต์ใดก็ได้ของฐานข้อมูล ด้วย COMMENT ON | เขียนกำกับตารางและคอลัมน์ไว้ในที่ที่ผู้เขียนคิวรีคนถัดไปจะเจอ |
| ตารางและวิว |
|---|
| ริเลชันที่มีชื่อ ซึ่งเก็บแถวในคอลัมน์ที่กำหนดประเภทไว้ | ที่เก็บหลักของข้อมูลถาวร |
| ตารางที่แถวทั้งหมดหายไปเมื่อจบเซสชันหรือทรานแซกชัน | เก็บข้อมูลชั่วคราวหรือข้อมูลรอจัดการ ที่ต้องไม่อยู่เกินอายุการเชื่อมต่อ |
| ตารางแม่ที่แตกออกเป็นพาร์ติชันลูกตามคีย์ที่ประกาศไว้ | ทำให้ตารางขนาดใหญ่มากจัดการได้ ด้วยการแจกแถวตามช่วงหรือรายการลงพาร์ติชัน |
| ตารางที่แถวอยู่ในระบบภายนอก เข้าถึงผ่าน foreign data wrapper | คิวรีฐานข้อมูลหรือไฟล์ระยะไกลราวกับเป็นตารางในเครื่อง |
| คิวรีที่เก็บไว้แล้วเปิดเผยในรูปตารางเสมือน | นำเสนอแถวชุดเดียวกันผ่านตัวกรองหรือการ join ที่ต่างกัน |
| วิวแบบง่ายที่ส่งต่อ INSERT, UPDATE และ DELETE ไปยังตารางต้นทาง | เปิดเผยส่วนที่ผ่านการกรองหรือ join ของตาราง โดยยังเขียนได้ |
| วิวที่ชุดผลลัพธ์ถูกเขียนลงดิสก์และรีเฟรชเมื่อต้องการ | แคช aggregate หรือการ join ที่แพง แล้วอ่านกลับอย่างรวดเร็ว |
| ฟังก์ชันที่คืนชุดแถว ซึ่งใช้ได้ทุกที่ที่ตารางใช้ได้ | ขยายชุดที่คำนวณได้เฉพาะที่ เหมือนที่ unnest เปลี่ยนอาร์เรย์ให้เป็นแถว |
| อินเด็กซ์ |
|---|
| อินเด็กซ์แบบต้นไม้สมดุล สำหรับการค้นหาแบบเท่ากับและแบบช่วง | เร่งความเร็ว WHERE, JOIN และ ORDER BY บนคอลัมน์ที่เรียงลำดับได้ |
| อินเด็กซ์ที่ปฏิเสธค่าซ้ำในคีย์ของมัน | บังคับความไม่ซ้ำบนคอลัมน์เดี่ยวหรือชุดคอลัมน์ |
| อินเด็กซ์แบบกลับด้านหรือแบบต้นไม้ค้นหาทั่วไป สำหรับค่าที่ไม่ใช่สเกลาร์ | ทำอินเด็กซ์ให้อาร์เรย์, JSONB, ข้อความเต็ม หรือข้อมูลเรขาคณิต |
| อินเด็กซ์ที่สร้างเฉพาะบนแถวที่ตรงกับเงื่อนไข WHERE | ทำอินเด็กซ์เฉพาะส่วนที่ใช้งานหนัก แล้วข้ามส่วนที่เหลือเพื่อประหยัดพื้นที่ |
| ประเภทและส่วนขยาย |
|---|
| ประเภทที่ผู้ใช้กำหนดเอง ซึ่งค่าทั้งหมดมาจากรายการป้ายกำกับคงที่ | จำกัดคอลัมน์ให้เป็นชุดปิด เช่น รหัสสถานะ |
| ประเภทฐานบวกกับ check constraint ตั้งชื่อไว้เพื่อใช้ซ้ำเป็นประเภทคอลัมน์ | ใช้นิยามที่ผ่านการตรวจสอบชุดเดียวกัน เช่น text ที่ไม่ว่าง กับหลายคอลัมน์ |
| ชุดกฎที่กำหนดว่าสตริงเปรียบเทียบและเรียงลำดับกันอย่างไร | ได้การเรียงลำดับที่ถูกต้องตามตัวพิมพ์ใหญ่-เล็ก วรรณยุกต์ หรือโลเคลเฉพาะ |
| แพ็กเกจที่ติดตั้งได้ เพิ่มฟังก์ชัน ประเภท หรือโอเปอเรเตอร์ให้ฐานข้อมูล | นำเครื่องมือที่พิสูจน์แล้ว เช่น PostGIS หรือ pg_trgm มาใช้ในขั้นตอนเดียว |
| ตัวสร้างรหัสและค่าที่สร้างอัตโนมัติ |
|---|
| อ็อบเจกต์ตัวนับอิสระที่คายเลขจำนวนเต็มออกมาต่อเนื่อง | เลี้ยงคีย์แบบ serial เมื่อหลายตารางใช้ตัวสร้างร่วมกัน |
| คอลัมน์ของตารางที่มี sequence ภายในหนุนหลัง ตามมาตรฐาน SQL | คีย์หลักแบบเพิ่มค่าอัตโนมัติยุคใหม่ ที่นิยมกว่า SERIAL |
| คอลัมน์ที่ค่าถูกคำนวณจากคอลัมน์อื่นในแถวเดียวกัน | เก็บหรือเปิดเผยค่าอนุพันธ์โดยไม่ต้องเขียนด้วยมือ |
| รูทีน |
|---|
| บล็อก SQL ที่มีชื่อ ซึ่งคืนค่าหรือแถว | ห่อโลจิกที่ใช้ซ้ำได้ แล้วเรียกใช้ภายในคิวรี |
| บล็อกที่มีชื่อ ซึ่งรันการกระทำและควบคุมทรานแซกชันของตัวเอง | ETL หลายขั้นตอน ที่รูทีน commit หรือ rollback ภายในตัวเอง |
| รูทีนที่พับแถวนำเข้าจำนวนมากให้เหลือค่าเดียว ผ่านฟังก์ชัน state และ final | นิยามการรวมแบบกำหนดเอง เช่น ค่าเฉลี่ยถ่วงน้ำหนัก |
| สัญลักษณ์ที่ผูกกับฟังก์ชันหนึ่งหรือหลายตัว สำหรับประเภท operand เฉพาะ | ให้ประเภทของคุณเองมีไวยากรณ์เป็นธรรมชาติ เช่น a + b หรือ @> |
| เส้นทางการแปลงที่ประกาศไว้ จากประเภทหนึ่งไปยังอีกประเภทหนึ่ง | ควบคุมว่าค่าเปลี่ยนประเภทอย่างไร รวมถึงการแปลงใดที่เกิดขึ้นโดยปริยาย |
| รูทีนที่ผูกกับเหตุการณ์ของตาราง และทำงานโดยอัตโนมัติ | ตรวจสอบ ตรวจความถูกต้อง หรือส่งต่อการเปลี่ยนแปลง บน INSERT, UPDATE หรือ DELETE |
| ทริกเกอร์ที่ทำงานเมื่อเกิดเหตุการณ์ระดับฐานข้อมูล เช่น คำสั่ง DDL | บันทึก บล็อก หรือตรวจสอบการเปลี่ยนแปลง schema ทั้งฐานข้อมูล |
| คิวรีที่ parse แล้วเก็บไว้เพื่อรันซ้ำด้วยพารามิเตอร์ที่ผูกไว้ | ใช้การ parse และแผนงานเดียวซ้ำ บนการรันหลายครั้งของคิวรีเดียวกัน |
| แฮนเดิลที่คงชุดผลลัพธ์เปิดไว้ เพื่อดึงข้อมูลทีละแถว | เลื่อนดูผลลัพธ์ขนาดใหญ่ทีละหน้า หรือไล่แถวภายในรูทีน |
| ความปลอดภัยและกฎ |
|---|
| ตัวตนที่มีชื่อซึ่งถือสิทธิ์ต่าง ๆ ผู้ใช้คือ role ที่ล็อกอินได้ | กลุ่มสิทธิ์ไว้ครั้งเดียว แล้วมอบให้คน บริการ หรือ role อื่น |
| คำสั่งที่มอบสิทธิ์บนอ็อบเจกต์ให้แก่ role หรือเพิกถอนสิทธิ์นั้น | กำหนดว่า role ใดอ่าน เขียน หรือรันอ็อบเจกต์แต่ละชนิดได้ |
| สิทธิ์โดยกำเนิดของผู้สร้างที่จะแก้ไขหรือลบอ็อบเจกต์ แยกจากคำสั่ง grant | ระบุ role ที่รับผิดชอบวงจรชีวิตของอ็อบเจกต์ |
| คำสั่งถาวรที่มอบสิทธิ์ให้อัตโนมัติ บนอ็อบเจกต์ที่ role สร้างขึ้นในภายหลัง | ตั้งสิทธิ์ล่วงหน้า ให้ตารางใหม่ไม่ต้อง grant ด้วยมือสำหรับ role ของแอป |
| กฎที่ปฏิเสธการเขียนซึ่งละเมิดเงื่อนไขที่ประกาศไว้ | บังคับการรับประกันของ NOT NULL, CHECK, UNIQUE, PRIMARY KEY และ FOREIGN KEY |
| กฎระดับ role ที่ซ่อนแถวที่เซสชันต้องไม่เห็น | แยกผู้เช่าหรือควบคุมการเข้าถึงรายผู้ใช้ โดยไม่ต้องเขียนคิวรีของแอปใหม่ |
| นามแฝงที่แก้ชื่อหนึ่งไปยังอ็อบเจกต์ที่อยู่ที่อื่น เป็นของเดิมใน Oracle และ SQL Server | ย้ายผัง schema ระหว่างการพอร์ต ส่วน PostgreSQL ใช้ search_path แทน |
| นิยามว่าการกระทำใดถูกบันทึกไว้เพื่อทบทวน ผ่าน pgaudit หรือเครื่องมือของผู้ขาย | พิสูจน์ว่าใครอ่านหรือแก้ข้อมูลใด เพื่อการปฏิบัติตามกฎและการสืบสวน |
| คำสั่งที่เขียนคิวรีที่เข้ามาใหม่ ให้กลายเป็นคำสั่งอื่น | การเปลี่ยนทางการเขียนแบบดั้งเดิม ปัจจุบัน PostgreSQL นิยม trigger หรือ updatable view |
| การจำลองข้อมูล |
|---|
| นิยามฝั่งผู้ส่ง ว่าตารางใดและประเภทการเปลี่ยนแปลงใดจะสตรีมออกไปยัง replica | ประกาศสิ่งที่ฐานข้อมูลเสนอให้ผู้รับ logical replication |
| ผู้รับที่เชื่อมต่อไปยัง publication แล้วนำการเปลี่ยนแปลงไปใช้กับตารางในเครื่อง | ดึงการเปลี่ยนแปลงจากฐานข้อมูล PostgreSQL อื่น เข้ามาในฐานข้อมูลนี้ |
| ตัวทำเครื่องหมายที่ทำให้ primary คง WAL ไว้ จนกว่าผู้บริโภคจะอ่านครบ | รับประกันว่า standby หรือผู้รับจะกลับมาทำต่อได้ โดยไม่สูญเสียการเปลี่ยนแปลง |