ปัญหาที่เกี่ยวข้องกับการเข้ารหัสข้อมูล แก้ไขปัญหาการเข้ารหัสหน้าเว็บไม่ถูกต้อง ASCII - การเข้ารหัสข้อความพื้นฐานสำหรับตัวอักษรละติน

ฉันคิดมานานพอสมควรเกี่ยวกับคำถามที่ว่าควรเลือกระบบจัดการฐานข้อมูล (DBMS) ใดสำหรับบทความของฉัน และตัดสินใจเลือก PostgreSQL
ทางเลือกเกิดจากสาเหตุหลายประการ:

  1. ฟรี DBMS
  2. ติดตั้งง่าย.
  3. รองรับระบบปฏิบัติการหลัก
  4. โปรแกรม pgAdmin ที่สะดวกสำหรับการทำงานกับฐานข้อมูล
  5. นี้ DBMS ที่ทันสมัยพร้อมโอกาสดีๆ

โดยพื้นฐานแล้ว JDK มีฐานข้อมูลในตัว - Derby แต่ในความคิดของฉันมันใช้งานไม่สะดวกมาก โดยทั่วไปแล้ว MySQL ก็ไม่เลว แต่ก็มียูทิลิตี้ที่ค่อนข้างไม่สะดวกในการป้อนคำสั่ง ฐานข้อมูลที่เหลือจะได้รับค่าตอบแทนหรือไม่ค่อยมีใครรู้จัก แน่นอนว่าหลังจากอ่านบทความของฉันแล้ว ไม่มีใครหยุดคุณจากการพยายามทำงานกับฐานข้อมูลเหล่านี้ด้วยตัวเอง

ดาวน์โหลด เวอร์ชันที่ต้องการ PostgreSQL มีอยู่ในหน้านี้: ดาวน์โหลด PostgreSQL
บน ช่วงเวลานี้ฉันใช้เวอร์ชัน 9.5.2 ฉันไม่รู้ว่าเมื่อคุณอ่านบทความจะเป็นเวอร์ชันใด แต่ฉันหวังว่าในปีต่อ ๆ ไปสิ่งต่าง ๆ จะไม่เปลี่ยนแปลงอย่างรุนแรง
ระวัง - ดาวน์โหลดเวอร์ชันสำหรับคุณ ระบบปฏิบัติการ- จากนั้นคุณเริ่มการติดตั้ง บนหน้าจอจะมีลักษณะเช่นนี้

ในหน้าจอที่สองคุณต้องเลือกไดเร็กทอรีการติดตั้ง ฉันไม่แนะนำให้ติดตั้งไปที่ “ ไฟล์โปรแกรม” โดยค่าเริ่มต้น เนื่องจาก บน Windows แพลตฟอร์มเซิร์ฟเวอร์นี่อาจเต็มไปด้วย ในระบบบ้านน่าจะไม่มีปัญหาอะไร แต่อย่างที่พวกเขาพูดกันว่า “ถ้าคุณดื่มนม คุณก็จะเป่าน้ำ” ดังนั้นฉันจึงมักจะใส่ไดเร็กทอรี “C:\PostgreSQL\”

บน หน้าจอถัดไปคุณต้องป้อนรหัสผ่านสำหรับผู้ใช้ "postgres" สำหรับการพัฒนา ฉันเลือกรหัสผ่านเดียวกัน: “postgres”

หน้าจอถัดไปจะถามถึงพอร์ตที่ PostgreSQL จะหยุดทำงาน หากคุณไม่ได้ติดตั้ง PostgreSQL คุณสามารถคงค่าเริ่มต้นไว้ที่ "5432" ได้

การแปลเป็นภาษาท้องถิ่นสามารถทิ้งไว้ตามที่เป็นอยู่ ใครสนใจสามารถเลือกสิ่งที่เฉพาะเจาะจงได้ โดยหลักการแล้ว ฉันไม่มีปัญหาในการเลือกค่าเริ่มต้น

มาเริ่มการติดตั้งกัน...

และรอให้มันจบลง

เมื่อเสร็จแล้วคุณจะได้รับแจ้งให้ติดตั้ง สาธารณูปโภคเพิ่มเติม Stack Builder - ปกติฉันจะไม่ตรวจสอบ ดังนั้นคุณจึงสามารถยกเลิกการเลือกและคลิก "เสร็จสิ้น"

ใน การติดตั้งทั่วไปสิ้นสุดแล้ว ตอนนี้อยู่ในรายการ บริการวินโดวส์คุณสามารถดู PostgreSQL ได้

ฉันมักจะติดตั้ง เริ่มต้นด้วยตนเองบริการ แต่สิ่งนี้สะดวกสำหรับคุณ

สิ่งที่เหลืออยู่ก็คือการค้นหาว่าแพ็คเกจ PostgreSQL มีโปรแกรมที่สะดวกและเข้าใจง่ายสำหรับการจัดการ DBMS - pgAdmin III สามารถพบได้ในหน้าเริ่มต้น เมนูวินโดวส์(หากคุณกำลังทำงานบนระบบปฏิบัติการอื่น ให้ค้นหา คุณอาจจะพบมัน)
เริ่มต้นแล้วทุกอย่างค่อนข้างง่าย

ดับเบิลคลิกที่ PostgreSQL 9.5 ทางด้านซ้าย - คุณอาจถูกขอให้ป้อนรหัสผ่าน
ถัดไปคุณจะเห็นโครงสร้างของ DBMS ของคุณทางด้านซ้าย

เปิดส่วน "ฐานข้อมูล" ทางด้านซ้ายและดูฐานข้อมูล "postgres" ที่สร้างไว้ล่วงหน้าแล้ว
คลิก คลิกขวาเมาส์ไปที่รายการ "ฐานข้อมูล" และเลือก " ฐานใหม่ข้อมูล..." แบบฟอร์มป้อนข้อมูลจะปรากฏขึ้น - ในการเริ่มต้นเพียงป้อนชื่อฐานข้อมูล - ฉันเรียกมันว่า "contactdb"

เลือกฐานข้อมูลที่สร้างขึ้นใหม่ด้วยเมาส์และรับโอกาสในการทำทุกอย่างที่คุณต้องการ

ในการรันคำสั่ง คุณต้องเปิดตัวแก้ไข SQL วิธีที่ง่ายที่สุดคือการกดปุ่มที่แผงด้านบน

ใน เปิดหน้าต่างคุณสามารถพิมพ์คำสั่ง SQL ได้

โดยทั่วไปทุกอย่างพร้อมแล้ว เราสามารถเรียกใช้สคริปต์ SQL ซึ่งจะสร้างตารางที่เราต้องการสำหรับผู้ติดต่อและแทรกข้อมูลทดสอบลงไป
ในการสร้างข้อมูลที่เราต้องการ สคริปต์ SQL จะมีลักษณะดังนี้:

วางตารางหากมี JC_CONTACT; สร้างตาราง JC_CONTACT (CONTACT_ID SERIAL, FIRST_NAME VARCHAR (50) ไม่เป็นโมฆะ, LAST_NAME VARCHAR (50) ไม่เป็นโมฆะ, PHONE VARCHAR (50) ไม่เป็นโมฆะ, อีเมล VARCHAR (50) ไม่เป็นโมฆะ, คีย์หลัก (CONTACT_ID)); แทรกลงในค่า JC_CONTACT (FIRST_NAME, LAST_NAME, โทรศัพท์, อีเมล) ("Peter", "Belgy", "+79112345678" [ป้องกันอีเมล]"); แทรกลงในค่า JC_CONTACT (FIRST_NAME, LAST_NAME, โทรศัพท์, อีเมล) ("Helga", "Forte", "+79118765432" [ป้องกันอีเมล]"); SELECT * จาก JC_CONTACT;

วางตารางถ้ามี JC_CONTACT ;

สร้างตาราง JC_CONTACT

CONTACT_ID ซีเรียล ,

FIRST_NAME VARCHAR (50) ไม่เป็นโมฆะ

LAST_NAME VARCHAR (50 ) ไม่เป็นโมฆะ

โทรศัพท์ VARCHAR (50) ไม่เป็นโมฆะ

อีเมล VARCHAR (50) ไม่เป็นโมฆะ

คีย์หลัก (CONTACT_ID)

แทรกลงในค่า JC_CONTACT (FIRST_NAME, LAST_NAME, โทรศัพท์, อีเมล) ("Peter" , "Belgy" , "+79112345678" , " [ป้องกันอีเมล]" ) ;

แทรกลงในค่า JC_CONTACT (FIRST_NAME, LAST_NAME, โทรศัพท์, อีเมล) ("Helga" , "Forte" , "+79118765432" , " [ป้องกันอีเมล]" ) ;

SELECT * จาก JC_CONTACT ;

  • SQL
  • การพัฒนาเว็บไซต์
    • การแปล

    วันนี้เราจะมาพูดถึงข้อดีของ Postgres เหนือระบบอื่นๆ กันบ้าง โอเพ่นซอร์ส- เราจะพูดถึงหัวข้อนี้โดยละเอียดมากขึ้นอย่างแน่นอนที่ PG Day"16 รัสเซีย ซึ่งเหลือเวลาอีกเพียงสองเดือนเท่านั้น

    คุณอาจถามตัวเองว่า “ทำไมต้อง PostgreSQL” ท้ายที่สุดมีตัวเลือกอื่นสำหรับฐานข้อมูลเชิงสัมพันธ์ที่เปิดอยู่ รหัสแหล่งที่มา(เราดูที่ MySQL, MariaDB และ Firebird สำหรับวัตถุประสงค์ของบทความนี้) แล้ว Postgres สามารถเสนออะไรได้บ้างที่พวกเขาไม่มี สโลแกนของ PostgreSQL ระบุว่าเป็น "ฐานข้อมูลโอเพ่นซอร์สที่ทันสมัยที่สุดในโลก" เราจะให้เหตุผลหลายประการว่าทำไม Postgres ถึงแถลงการณ์ดังกล่าว

    ในส่วนแรกของซีรี่ส์นี้ เราจะพูดถึงการจัดเก็บข้อมูล - โมเดล โครงสร้าง ประเภท และข้อจำกัดด้านขนาด และมามุ่งเน้นที่การสุ่มตัวอย่างและการจัดการข้อมูลให้มากขึ้น

    แบบจำลองข้อมูล

    PostgreSQL ไม่ใช่แค่เชิงสัมพันธ์ แต่เป็น DBMS เชิงวัตถุสัมพันธ์ สิ่งนี้ทำให้มีข้อได้เปรียบเหนือฐานข้อมูล SQL แบบโอเพ่นซอร์สอื่นๆ เช่น MySQL, MariaDB และ Firebird

    ลักษณะพื้นฐานของฐานข้อมูลเชิงวัตถุสัมพันธ์คือการรองรับอ็อบเจ็กต์ผู้ใช้และพฤติกรรมของฐานข้อมูล รวมถึงประเภทข้อมูล ฟังก์ชัน การดำเนินการ โดเมน และดัชนี สิ่งนี้ทำให้ Postgres มีความยืดหยุ่นและเชื่อถือได้อย่างไม่น่าเชื่อ เหนือสิ่งอื่นใด มันสามารถสร้าง จัดเก็บ และเรียกคืนได้ โครงสร้างที่ซับซ้อนข้อมูล. ในตัวอย่างบางส่วนด้านล่าง คุณจะเห็นโครงสร้างแบบซ้อนและแบบผสมที่ RDBMS มาตรฐานไม่รองรับ

    โครงสร้างและชนิดข้อมูล

    มีรายการประเภทข้อมูลมากมายที่ Postgres รองรับ นอกเหนือจากประเภทตัวเลข ทศนิยม ข้อความ บูลีน และประเภทข้อมูลอื่นๆ ที่คาดหวัง (และรูปแบบอื่นๆ มากมาย) PostgreSQL ยังรองรับ uuid การเงิน การแจกแจง เรขาคณิต ไบนารี ที่อยู่เครือข่าย, สตริงบิต, ค้นหาข้อความ, xml, json, อาร์เรย์, ประเภทและช่วงคอมโพสิต รวมถึงบางส่วน ประเภทภายในเพื่อระบุวัตถุและตำแหน่งบันทึก พูดตามตรง MySQL, MariaDB และ Firebird มีประเภทข้อมูลเหล่านี้อยู่บ้าง แต่มีเพียง Postgres เท่านั้นที่สนับสนุนข้อมูลเหล่านี้ทั้งหมด

    ลองมาดูบางส่วนให้ละเอียดยิ่งขึ้น:

    ที่อยู่เครือข่าย
    PostgreSQL จัดเตรียมพื้นที่เก็บข้อมูล ประเภทต่างๆที่อยู่เครือข่าย ประเภทข้อมูล CIDR (Classless Internet Domain Routing) เป็นไปตามแบบแผนสำหรับที่อยู่เครือข่าย IPv4 และ IPv6 นี่คือตัวอย่างบางส่วน:
    • 192.168.100.128/25
    • 10.1.2.3/32
    • 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128
    • ::ffff:1.2.3.0/128
    นอกจากนี้ ยังมีสำหรับจัดเก็บที่อยู่เครือข่ายด้วยประเภทข้อมูล INET ซึ่งใช้สำหรับโฮสต์ IPv4 และ IPv6 โดยที่ซับเน็ตเป็นทางเลือก ชนิดข้อมูล MACADDR สามารถใช้เพื่อจัดเก็บที่อยู่ MAC สำหรับการระบุฮาร์ดแวร์ เช่น 08-00-2b-01-02-03

    MySQL และ MariaDB ยังมีฟังก์ชัน INET สำหรับการแปลงที่อยู่เครือข่าย แต่ไม่มีประเภทข้อมูลสำหรับจัดเก็บที่อยู่เครือข่ายภายใน Firebird ยังไม่มีประเภทสำหรับจัดเก็บที่อยู่เครือข่าย

    อาร์เรย์หลายมิติ
    เนื่องจาก Postgres เป็นฐานข้อมูลเชิงวัตถุจึงสามารถจัดเก็บอาร์เรย์ของค่าได้เป็นส่วนใหญ่ ประเภทที่มีอยู่ข้อมูล. ซึ่งสามารถทำได้โดยการเพิ่ม วงเล็บเหลี่ยมกับข้อกำหนดชนิดข้อมูลสำหรับคอลัมน์หรือใช้นิพจน์ ARRAY สามารถระบุขนาดของอาร์เรย์ได้ แต่ไม่จำเป็น มาดูเมนูปิกนิกวันหยุดเพื่อสาธิตการใช้อาร์เรย์กัน:

    เราสร้างตารางที่มีค่าเป็นอาร์เรย์ สร้างตาราง Holiday_picnic (varchar วันหยุด (50) -- ค่าสตริงข้อความแซนวิช -- ข้อความด้านอาร์เรย์ -- อาร์เรย์หลายมิติข้อความของหวาน ARRAY -- อาร์เรย์ของข้อความเครื่องดื่ม ARRAY -- อาร์เรย์ของ 4 องค์ประกอบ); -- แทรกค่าอาร์เรย์ลงในตาราง INSERT INTO Holiday_picnic VALUES ("วันแรงงาน", "("เนื้อย่าง", "ผัก", "ไก่งวง")", "( ("สลัดมันฝรั่ง", "สลัดผักสด", "สลัดมักกะโรนี "), ("มันฝรั่งทอด", "แครกเกอร์") )", "("ค็อกเทลผลไม้", "พายเบอร์รี่", "ไอศกรีม")", "("โซดา", "น้ำผลไม้", "เบียร์" ,"น้ำ ")");
    MySQL, MariaDB และ Firebird ไม่สามารถทำได้ เพื่อจัดเก็บอาร์เรย์ของค่าดังกล่าวในรูปแบบดั้งเดิม ฐานข้อมูลเชิงสัมพันธ์คุณจะต้องใช้วิธีแก้ปัญหาและสร้าง โต๊ะแยกพร้อมแถวสำหรับแต่ละค่าอาร์เรย์

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

    สร้างตารางเพื่อจัดเก็บเส้นทาง สร้างเส้นทางตาราง (trail_name varchar(250), เส้นทาง Trail_path); -- แทรกเส้นทางลงในตาราง -- ซึ่งเส้นทางจะถูกกำหนดโดยพิกัดในรูปแบบละติจูด-ลองจิจูด INSERT INTO Trails VALUES ("เส้นทาง Dool - Creeping Forest Trail Loop", ((37.172,-122.22261666667), (37.171616666667, -122.22385), (37.1735,-122.2236), (37.175416666667,-122.223), (37.1758,-122.22378333333), (37.179466666667,-122.22866666667), (37.18 395,-122.226 75), (37.180783333333,-122.22466666667), (37.176116666667, -122.2222), (37.1753 ,-122.22293333333), (37.173116666667,-122.22281666667)));
    ส่วนขยาย PostGIS สำหรับ PostgreSQL ขยายคุณสมบัติข้อมูลเรขาคณิตที่มีอยู่ด้วยประเภทเชิงพื้นที่เสริม ฟังก์ชัน ตัวดำเนินการ และดัชนี ให้การสนับสนุนตำแหน่งและรองรับทั้งข้อมูลแรสเตอร์และเวกเตอร์ นอกจากนี้ยังให้ความเข้ากันได้กับเครื่องมือภูมิสารสนเทศของบุคคลที่สาม (ลิขสิทธิ์และโอเพ่นซอร์ส) สำหรับการแสดง แสดงผล และทำงานกับข้อมูล

    โปรดทราบว่า MySQL 5.7.8 และ MariaDB ตั้งแต่เวอร์ชัน 5.3.3 ได้เพิ่มส่วนขยายประเภทข้อมูลเพื่อรองรับมาตรฐานข้อมูลทางภูมิศาสตร์ของ OpenGIS นี้ เวอร์ชัน MySQLและเวอร์ชันถัดๆ ไปของ MariaDB เสนอพื้นที่จัดเก็บประเภทข้อมูลที่คล้ายกับ Postgres geodata ดั้งเดิม อย่างไรก็ตามใน MySQL และ MariaDB ค่าข้อมูลจะต้องถูกแปลงเป็นรูปแบบเรขาคณิตก่อน คำสั่งง่ายๆก่อนที่จะถูกแทรกลงในตาราง ขณะนี้ Firebird ไม่รองรับประเภทข้อมูลเชิงเรขาคณิต

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

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

    MySQL 5.7.8 และ MariaDB 10.0.1 เพิ่มการรองรับออบเจ็กต์ JSON ดั้งเดิม แต่แม้ว่าจะมีฟังก์ชันและตัวดำเนินการมากมายสำหรับ JSON ที่มีอยู่ในฐานข้อมูลเหล่านี้ แต่ก็ไม่ได้จัดทำดัชนีในลักษณะเดียวกับ JSONB ใน PostgreSQL Firebird ยังไม่ได้เข้าร่วมเทรนด์และรองรับเฉพาะวัตถุ JSON ในรูปแบบข้อความเท่านั้น

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

    สร้างอันใหม่ ประเภทคอมโพสิต"ไวน์" สร้างประเภทไวน์ AS (wine_vineyard varchar (50), wine_type varchar (50), wine_year int); -- สร้างตารางที่ใช้ประเภทคอมโพสิต "ไวน์" สร้างการจับคู่ตาราง (menu_entree varchar (50), wine_pairing wine) -- แทรกข้อมูลลงในตารางโดยใช้นิพจน์ ROW INSERT INTO pairings VALUES ("Lobster Tail",ROW("Stag""s Leap","Chardonnay", 2012)), ("Elk Medallions",ROW("Rombauer" , "กาแบร์เนต์ โซวิญง", 2012)); /* เลือกจากตารางโดยใช้ชื่อคอลัมน์ (ใช้วงเล็บคั่นด้วยจุดจากชื่อฟิลด์ในประเภทคอมโพสิต) */ SELECT (wine_pairing).wine_vineyard, (wine_pairing).wine_type FROM pairings WHERE menu_entree = "Elk Medallions";
    เนื่องจากไม่เกี่ยวข้องกับวัตถุ MySQL, MariaDB และ Firebird จึงไม่มีฟังก์ชันการทำงานที่มีประสิทธิภาพดังกล่าว

    มิติข้อมูล

    PostgreSQL สามารถรองรับข้อมูลได้จำนวนมาก ข้อจำกัดที่เผยแพร่ในปัจจุบันมีดังต่อไปนี้:

    ในการเขียน [ประมาณ. ต่อ: องค์กรที่ผู้เขียนบทความต้นฉบับทำงาน] เราจะปรับขนาดการติดตั้งของคุณโดยอัตโนมัติเพื่อให้คุณไม่ต้องกังวลกับการเติบโตของปริมาณข้อมูล แต่อย่างที่ผู้ดูแลฐานข้อมูลรู้ดี คุณควรระวังฐานข้อมูลขนาดใหญ่เกินไปและ ความเป็นไปได้ไม่จำกัด- เราแนะนำให้คุณปฏิบัติตาม การใช้ความคิดเบื้องต้นเมื่อสร้างตารางและเพิ่มดัชนี

    ในการเปรียบเทียบ MySQL และ MariaDB มีชื่อเสียงในเรื่องขีดจำกัดขนาดแถวที่ 65,535 ไบต์ Firebird ยังมีขนาดบรรทัดสูงสุดเพียง 64Kb โดยปกติแล้วปริมาณข้อมูลจะถูกจำกัด ขนาดสูงสุดไฟล์ระบบปฏิบัติการ เนื่องจาก PostgreSQL สามารถจัดเก็บข้อมูลแบบตารางในไฟล์ขนาดเล็กจำนวนมากได้ จึงแก้ไขข้อจำกัดนี้ได้ แต่มันก็น่าสังเกตเช่นกัน จำนวนมากไฟล์อาจส่งผลเสียต่อประสิทธิภาพการทำงาน รองรับ MySQL และ MariaDB ปริมาณมากคอลัมน์ต่อตาราง (สูงสุด 4,096 ขึ้นอยู่กับประเภทข้อมูล) และแต่ละตารางมีขนาดใหญ่กว่า PostgreSQL แต่ต้องเกิน ข้อ จำกัด ที่มีอยู่ Postgress เกิดขึ้นเฉพาะในกรณีที่หายากมากเท่านั้น

    ความสมบูรณ์ของข้อมูล

    Postgres มุ่งมั่นที่จะปฏิบัติตามมาตรฐาน ANSI-SQL:2008 ตรงตามมาตรฐาน ข้อกำหนดเกี่ยวกับกรด(อะตอมมิกซิตี ความสม่ำเสมอ การแยกตัว และความน่าเชื่อถือ) และเป็นที่รู้จักในด้านความสมบูรณ์ในการอ้างอิงและการทำธุรกรรม คีย์หลัก, ข้อจำกัดและคีย์นอกแบบเรียงซ้อน, ข้อจำกัดเฉพาะ, ข้อจำกัดที่ไม่เป็น NULL, ข้อจำกัดในการตรวจสอบ และคุณลักษณะความสมบูรณ์ของข้อมูลอื่นๆ ช่วยให้มั่นใจได้ว่าจะรักษาเฉพาะข้อมูลที่ถูกต้องเท่านั้น

    MySQL และ MariaDB กำลังทำงานมากขึ้นเพื่อให้เป็นไปตามมาตรฐาน SQL ด้วยกลไกตาราง InnoDB/XtraDB ตอนนี้พวกเขาเสนอตัวเลือก STRICT โดยใช้โหมด SQL ที่ตั้งค่าการตรวจสอบความถูกต้องของข้อมูลที่ใช้ อย่างไรก็ตาม ขึ้นอยู่กับโหมดที่คุณใช้ ข้อมูลที่ไม่ถูกต้องหรือถูกตัดทอนโดยที่คุณไม่ทราบอาจถูกแทรกหรือสร้างขึ้นในระหว่างการอัพเดต ขณะนี้ไม่มีฐานข้อมูลใดที่สนับสนุนข้อจำกัดของ CHECK นอกจากนี้ยังมีคุณสมบัติมากมายเกี่ยวกับข้อจำกัดความสมบูรณ์ของการอ้างอิงบนคีย์ต่างประเทศ นอกเหนือจากที่กล่าวมาข้างต้น ความสมบูรณ์ของข้อมูลยังอาจถูกทำลายลงอย่างมาก ทั้งนี้ขึ้นอยู่กับเครื่องมือจัดเก็บข้อมูลที่เลือก MySQL (และทางแยก MariaDB) ไม่ได้ปกปิดความจริงที่ว่าพวกเขาแลกเปลี่ยนความสมบูรณ์และการปฏิบัติตามมาตรฐานเพื่อความรวดเร็วและประสิทธิภาพ

    สรุป

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

    หากคุณรู้สึกว่า PostgreSQL ไม่ตรงกับความต้องการของคุณ หรือคุณชอบที่จะถ่ายภาพแบบเน้นๆ คุณอาจต้องพิจารณา ฐานข้อมูล NoSQLข้อมูลที่เรานำเสนอใน Compose หรือคิดถึงผู้อื่น ฐานข้อมูล SQLข้อมูลที่เรากล่าวถึง แต่ละคนมีข้อดีของตัวเอง Compose เชื่อมั่นว่าการเลือกฐานข้อมูลที่เหมาะสมเป็นสิ่งสำคัญมาก งานเฉพาะ…บางครั้งนั่นหมายถึงการเลือกหลายฐานข้อมูล!

    ต้องการ Postgres เพิ่มเติมหรือไม่?

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

    หากต้องการติดตั้ง PostgreSQL 9.2 บน Ubuntu 12.10 ให้รันคำสั่งต่อไปนี้:

    sudo apt-add-repository ppa:pitti/ postgresql
    อัปเดต sudo apt-get
    sudo apt-get ติดตั้ง postgresql-9.2

    มาลองทำงานกับ DBMS ผ่านเชลล์กันดีกว่า:

    sudo -u postgres psql

    มาสร้างฐานข้อมูลทดสอบและผู้ใช้ทดสอบกัน:

    สร้างฐานข้อมูล test_database;
    สร้างผู้ใช้ test_user ด้วยรหัสผ่าน "qwerty" ;
    ให้สิทธิ์ทั้งหมดบนฐานข้อมูล test_database ให้กับ test_user;

    หากต้องการออกจากเชลล์ ให้ป้อนคำสั่ง \q

    ตอนนี้เรามาลองทำงานกับฐานข้อมูลที่สร้างขึ้นในนามของ test_user:

    psql -h localhost test_database test_user

    มาสร้างตารางใหม่กันเถอะ:

    สร้างลำดับ user_ids;
    สร้างผู้ใช้ตาราง (
    id INTEGER คีย์หลักเริ่มต้น NEXTVAL ("user_ids" ) ,
    เข้าสู่ระบบ CHAR(64) ,
    รหัสผ่าน CHAR(64));

    โปรดทราบว่า PostgreSQL ต่างจาก DBMS อื่นๆ ตรงที่ไม่มีคอลัมน์ที่มีคุณสมบัติ auto_increation Postgres ใช้ลำดับแทน ในตอนนี้ ก็เพียงพอแล้วที่จะรู้ว่าการใช้ฟังก์ชัน nextval ทำให้เราได้รับตัวเลขเฉพาะสำหรับลำดับที่กำหนด:

    เลือกถัดไป ("user_ids" ) ;

    โดยการตั้งค่าฟิลด์ id เป็นค่าเริ่มต้น ตารางผู้ใช้ความหมาย ถัดไป("user_ids")เราได้รับเอฟเฟกต์แบบเดียวกับที่ auto_increation ให้มา เมื่อเพิ่มบันทึกใหม่ลงในตาราง เราไม่จำเป็นต้องระบุรหัส เนื่องจากรหัสเฉพาะจะถูกสร้างขึ้นโดยอัตโนมัติ หลายตารางสามารถใช้ลำดับเดียวกันได้ ด้วยวิธีนี้เราสามารถรับประกันได้ว่าค่าของบางฟิลด์ในตารางเหล่านี้จะไม่ทับซ้อนกัน ในแง่นี้ ลำดับมีความยืดหยุ่นมากกว่าการเพิ่มขึ้นอัตโนมัติ

    คุณสามารถสร้างตารางเดียวกันได้โดยใช้เพียงคำสั่งเดียว:

    สร้างตาราง users2 (
    รหัสหลักซีเรียลคีย์
    เข้าสู่ระบบ CHAR(64) ,
    รหัสผ่าน CHAR(64));

    ในกรณีนี้ ลำดับสำหรับฟิลด์ id จะถูกสร้างขึ้นโดยอัตโนมัติ

    ขณะนี้การใช้คำสั่ง \d คุณสามารถดูรายการตารางที่มีอยู่ทั้งหมด และเมื่อใช้ \d ผู้ใช้ คุณสามารถดูคำอธิบายของตารางผู้ใช้ได้ หากคุณไม่ได้รับข้อมูลที่ต้องการ ให้ลอง \d+ แทน \d คุณสามารถรับรายการฐานข้อมูลได้ด้วยคำสั่ง \l และสลับไปยังฐานข้อมูลเฉพาะด้วยคำสั่ง \c dbname หากต้องการแสดงวิธีใช้คำสั่ง ให้พูด \? -

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

    สร้างตาราง "anotherTable" ("someValue" VARCHAR (64 ) ) ;

    คุณสมบัติอื่นของ PostgreSQL ที่อาจทำให้เกิดปัญหาเมื่อเริ่มทำงานกับ DBMS นี้คือสิ่งที่เรียกว่า "สคีมา" สคีมาเป็นเหมือนเนมสเปซสำหรับตาราง เช่น ไดเร็กทอรีที่มีตารางอยู่ภายในฐานข้อมูล

    การสร้างสคีมา:

    สร้างการจอง SCHEMA;

    เปลี่ยนไปใช้รูปแบบ:

    ตั้งค่า search_path ถึงการจอง;

    คุณสามารถดูรายการโครงร่างที่มีอยู่ได้โดยใช้คำสั่ง \dn สคีมาเริ่มต้นมีชื่อว่าสาธารณะ โดยหลักการแล้ว คุณสามารถใช้ PostgreSQL ได้สำเร็จโดยไม่ต้องรู้ว่ามีสคีมาอยู่ แต่เมื่อทำงานกับโค้ดเดิมและในบางกรณี Edge การทราบเกี่ยวกับสคีมาอาจมีประโยชน์มาก

    มิฉะนั้นการทำงานกับ PostgreSQL ก็ไม่แตกต่างจากการทำงานกับ DBMS เชิงสัมพันธ์อื่น ๆ มากนัก:

    INSERT INTO ผู้ใช้ (เข้าสู่ระบบ, รหัสผ่าน)
    ค่านิยม ("afiskon" , "123456" ) ;
    เลือก * จากผู้ใช้;

    หากคุณพยายามเชื่อมต่อกับ Postgres จากเครื่องอื่น คุณจะล้มเหลว:

    psql -h 192.168.0.1 test_database test_user

    พีเอสแอล: ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์: การเชื่อมต่อถูกปฏิเสธ
    เซิร์ฟเวอร์ทำงานบนโฮสต์ "192.168.0.1" และยอมรับหรือไม่
    การเชื่อมต่อ TCP/IP บนพอร์ต 5432?

    หากต้องการแก้ไขปัญหานี้ ให้เพิ่มบรรทัด:

    Listen_addresses = "localhost,192.168.0.1"

    ... ไปยังไฟล์ /etc/postgresql/9.2/main/postgresql.conf เช่นกัน



    มีคำถามหรือไม่?

    แจ้งการพิมพ์ผิด

    ข้อความที่จะส่งถึงบรรณาธิการของเรา: