คำถามติดแท็ก postgresql

PostgreSQL ทุกรุ่น เพิ่มแท็กเฉพาะรุ่นเพิ่มเติมเช่น postgresql-11 หากบริบทนั้นสำคัญ


5
ฉันจะใช้ค่าเริ่มต้นในแบบสอบถามแบบใช้เลือกข้อมูลใน PostgreSQL ได้อย่างไร
ฉันต้องการใช้ค่าเริ่มต้นสำหรับคอลัมน์ที่ควรใช้หากไม่มีการส่งคืนแถว เป็นไปได้ใน PostgreSQL? ฉันจะทำมันได้อย่างไร หรือมีวิธีอื่นที่ฉันสามารถแก้ไขได้? เช่นบางสิ่งเช่นนี้ SELECT MAX(post_id) AS max_id DEFAULT 0 FROM my_table WHERE org_id = 3 และถ้าไม่มีแถวที่มีในตารางผมต้องการที่จะกลับมาorg_id = 30

3
เพื่อประสิทธิภาพที่สมบูรณ์ SUM จะเร็วขึ้นหรือ COUNT หรือไม่
invoice amount > $100นี้เกี่ยวข้องกับการนับจำนวนของระเบียนที่ตรงกับเงื่อนไขบางอย่างเช่น ฉันมักจะชอบ COUNT(CASE WHEN invoice_amount > 100 THEN 1 END) อย่างไรก็ตามนี่เป็นเพียงที่ถูกต้อง SUM(CASE WHEN invoice_amount > 100 THEN 1 ELSE 0 END) ฉันคิดว่า COUNT นั้นดีกว่าด้วยเหตุผล 2 ประการ: บ่งบอกถึงความตั้งใจซึ่งก็คือ COUNT COUNT อาจเกี่ยวข้องกับการi += 1ดำเนินการอย่างง่ายที่ไหนสักแห่งในขณะที่ SUM ไม่สามารถพึ่งพาการแสดงออกที่จะเป็นค่าจำนวนเต็มง่าย ใครบ้างมีข้อเท็จจริงเฉพาะเกี่ยวกับความแตกต่างของ RDBMS ที่เฉพาะเจาะจงหรือไม่

2
ดัชนีหลายคอลัมน์และประสิทธิภาพ
ฉันมีตารางที่มีดัชนีหลายคอลัมน์และฉันมีข้อสงสัยเกี่ยวกับการเรียงลำดับที่เหมาะสมของดัชนีเพื่อให้ได้ประสิทธิภาพสูงสุดในการสืบค้น สถานการณ์: PostgreSQL 8.4 ตารางที่มีประมาณหนึ่งล้านแถว ค่าในคอลัมน์c1สามารถมีประมาณ100 ค่าที่แตกต่างกัน เราสามารถสันนิษฐานได้ว่าค่ามีการกระจายอย่างเท่าเทียมกันดังนั้นเราจึงมีประมาณ 10,000 แถวสำหรับทุกค่าที่เป็นไปได้ คอลัมน์c2สามารถมี1,000 ค่าที่แตกต่าง เรามี 1,000 แถวสำหรับทุกค่าที่เป็นไปได้ เมื่อค้นหาข้อมูลเงื่อนไขจะมีค่าสำหรับคอลัมน์สองคอลัมน์เหล่านี้เสมอดังนั้นตารางจะมีดัชนีหลายคอลัมน์ซึ่งรวม c1 และ c2 ฉันได้อ่านเกี่ยวกับความสำคัญของการจัดเรียงคอลัมน์ในดัชนีหลายคอลัมน์อย่างถูกต้องหากคุณมีข้อความค้นหาที่ใช้เพียงคอลัมน์เดียวในการกรอง นี่ไม่ใช่กรณีในสถานการณ์ของเรา คำถามของฉันคือคำถามนี้: จากข้อเท็จจริงที่ว่าหนึ่งในตัวกรองเลือกชุดข้อมูลที่เล็กกว่ามากฉันจะปรับปรุงประสิทธิภาพได้ไหมถ้าดัชนีตัวแรกเป็นตัวเลือกที่เลือกได้มากที่สุด ฉันไม่เคยพิจารณาคำถามนี้จนกระทั่งเห็นกราฟิกจากบทความที่อ้างอิง: ภาพที่นำมาจากบทความที่อ้างอิงเกี่ยวกับดัชนีหลายคอลัมน์ แบบสอบถามใช้ค่าจากสองคอลัมน์ในการกรอง ฉันไม่มีข้อความค้นหาที่ใช้เพียงหนึ่งคอลัมน์ในการกรอง พวกเขาทั้งหมดคือ: WHERE c1=@ParameterA AND c2=@ParameterB. นอกจากนี้ยังมีเงื่อนไขเช่นนี้:WHERE c1 = "abc" AND c2 LIKE "ab%"

3
ลืมรหัสผ่าน PostgreSQL Windows
เช้านี้ฉันพยายามเชื่อมต่อฐานข้อมูล PostgreSQL บนเดสก์ท็อป Windows 7 Professional ของฉัน ค่าเริ่มต้นคือ 'postgres' แต่แน่นอนว่าฉันลืมรหัสผ่านที่ฉันใช้เมื่อติดตั้งครั้งแรก ฉัน googled และพบโพสต์ที่เกี่ยวข้องกับการรีเซ็ตรหัสผ่านของคุณ ฉันทำตามขั้นตอนต่าง ๆ แต่ผลลัพธ์ที่ได้นั้นแตกต่างจากที่กล่าวไว้ในโพสต์ ฉันใช้- net user postgres postgres เพื่อรีเซ็ตรหัสผ่านสำหรับฐานข้อมูลของฉัน แต่แทนที่จะเป็นข้อความแจ้งความสำเร็จที่ฉันได้รับ: "ข้อผิดพลาดระบบ 5 เกิดขึ้นการเข้าถึงถูกปฏิเสธ" ระบบผิดพลาด. ฉันจะหลีกเลี่ยงข้อผิดพลาดนี้และรีเซ็ตรหัสผ่านได้อย่างไร

1
ต้องการดัชนีสำหรับคีย์ต่างประเทศ
ฉันกำลังดิ้นรนกับดัชนีคีย์หลักและคีย์ต่างประเทศ ... และความต้องการของพวกเขาทั้งหมด ถ้าฉันมีสองตารางทั้งสองจะมีจำนวนเต็มเป็นคีย์หลัก ตารางแรกอ้างอิงผ่าน FK ไปยังคีย์หลักของตารางที่สอง ในตารางทั้งสองฉันมีดัชนีคีย์หลักในคอลัมน์ ID ฉันสร้างข้อ จำกัด FK ในการtable1.ref_fieldอ้างอิง PK ของตารางที่สอง ( table2.id) และฉันเพิ่มดัชนีบน table1.ref_field นี่เป็นวิธีที่ดีที่สุดในการจัดระเบียบดัชนีคีย์หลักและคีย์ต่างประเทศหรือไม่

1
การค้นหาดัชนีจะเร็วขึ้นอย่างเห็นได้ชัดด้วย char vs varchar หรือไม่เมื่อค่าทั้งหมดเป็น 36 ตัวอักษร
ฉันมีแบบแผนดั้งเดิม (ข้อจำกัดความรับผิดชอบ!) ที่ใช้รหัสที่สร้างโดยใช้แฮชสำหรับคีย์หลักสำหรับตารางทั้งหมด (มีจำนวนมาก) ตัวอย่างของ ID ดังกล่าวคือ: 922475bb-ad93-43ee-9487-d2671b886479 ไม่มีความหวังที่เป็นไปได้ในการเปลี่ยนวิธีการนี้อย่างไรก็ตามประสิทธิภาพของการเข้าถึงดัชนีนั้นไม่ดี การตั้งค่ากันมากมายเหตุผลนี้อาจจะมีสิ่งหนึ่งที่ผมสังเกตเห็นว่าดูเหมือนน้อยกว่าที่ดีที่สุด - แม้จะมีค่า ID ทั้งหมดในตารางมากทั้งหมดเป็นว่า 36 ตัวอักษรความยาวชนิดคอลัมน์varchar(36), ไม่ char(36) การเปลี่ยนประเภทคอลัมน์เป็นความยาวคงที่จะchar(36)ให้ประโยชน์ด้านดัชนีอย่างมีนัยสำคัญหรือไม่นอกเหนือจากการเพิ่มจำนวนรายการต่อหน้าดัชนีเป็นต้น? คือ postgres ทำงานเร็วกว่ามากเมื่อจัดการกับประเภทความยาวคงที่มากกว่าประเภทความยาวผันแปรหรือไม่ โปรดอย่าพูดถึงการประหยัดพื้นที่เก็บข้อมูลขนาดจิ๋ว - ไม่เป็นไรเมื่อเทียบกับการผ่าตัดที่จำเป็นในการเปลี่ยนแปลงคอลัมน์

1
การฉีด SQL ในฟังก์ชัน Postgres กับเคียวรีที่เตรียมไว้
ใน Postgres แบบสอบถามที่เตรียมไว้และฟังก์ชั่นที่ผู้ใช้กำหนดเองนั้นเทียบเท่ากับกลไกในการป้องกันการฉีด SQLหรือไม่ มีข้อดีโดยเฉพาะอย่างยิ่งในแนวทางหนึ่งมากกว่าอีกวิธีหนึ่งหรือไม่?

3
การกำหนดค่า PostgreSQL สำหรับประสิทธิภาพการเขียน
เซิร์ฟเวอร์ PostgreSQL ของฉันหนึ่งโฮสต์หลายฐานข้อมูล (1-3) ที่ได้รับกระแสข้อมูลคงที่ ข้อมูลไม่ได้ถูกจัดโครงสร้างโดยเฉพาะอย่างยิ่งมันเป็นจำนวนเวลาปัจจุบันและความหลากหลายของข้อมูลที่สังเกตสำหรับการทันทีนั้น อัตราข้อมูลค่อนข้างสูง มันทำงานได้ประมาณกิกะไบต์ต่อวันสำหรับฐานข้อมูลหนึ่งประมาณหนึ่งในสิบของฐานข้อมูลอื่น ฉันไม่คาดหวังว่าอัตรานี้จะเพิ่มขึ้น ประสิทธิภาพการอ่านมีความสำคัญต่ำกว่ามากและเป็นที่ยอมรับในปัจจุบัน ในบันทึกฉันมีข้อความนี้: LOG: checkpoints are occurring too frequently (15 seconds apart) HINT: Consider increasing the configuration parameter "checkpoint_segments". ค่านี้ตั้งไว้ที่ 16 pgtuneซึ่งเป็นมารยาทของ การตั้งค่าใดที่ฉันควรพิจารณาเพื่อปรับปรุงประสิทธิภาพการเขียน ฉันต้องการที่จะรักษาความปลอดภัยให้มากที่สุด เมื่อพิจารณาจากปริมาณข้อมูลที่เข้ามาฉันสามารถยอมรับการสูญเสียข้อมูลล่าสุดในความล้มเหลวตราบใดที่ข้อมูลจำนวนมากไม่เสียหาย แก้ไข: ฉันใช้ PostgreSQL 9.0 ในตอนนี้ แต่ฉันวางแผนที่จะอัพเกรดเป็น 9.1 ฉันไม่ได้โพสต์รายละเอียดฮาร์ดแวร์เพราะในขณะที่ฉันรับทราบความสำคัญของพวกเขาในที่สุดฉันจะต้องทำให้การเพิ่มประสิทธิภาพนี้ในหลายเครื่องด้วยฮาร์ดแวร์ที่หลากหลายมาก หากฮาร์ดแวร์มีความสำคัญต่อคำตอบโปรดให้ข้อมูลทั่วไปเพื่อให้ฉันสามารถใช้คำตอบกับเครื่องที่มีการกำหนดค่าฮาร์ดแวร์ที่แตกต่างกัน

2
ปรับแต่งแบบสอบถาม Postgres ด้วย IN ขนาดใหญ่
ข้อความค้นหานี้รับรายการโพสต์ที่สร้างโดยคนที่คุณติดตาม คุณสามารถติดตามคนได้ไม่ จำกัด จำนวน แต่คนส่วนใหญ่ติดตามน้อยกว่า 1,000 คน ด้วยการสืบค้นแบบนี้การเพิ่มประสิทธิภาพที่เห็นได้ชัดคือการแคช"Post"รหัส แต่น่าเสียดายที่ฉันไม่มีเวลาสำหรับตอนนี้ EXPLAIN ANALYZE SELECT "Post"."id", "Post"."actionId", "Post"."commentCount", ... FROM "Posts" AS "Post" INNER JOIN "Users" AS "user" ON "Post"."userId" = "user"."id" LEFT OUTER JOIN "ActivityLogs" AS "activityLog" ON "Post"."activityLogId" = "activityLog"."id" LEFT OUTER JOIN "WeightLogs" AS "weightLog" ON "Post"."weightLogId" = "weightLog"."id" LEFT …


5
DELETE ช้ามากใน PostgreSQL หรือไม่?
ฉันมีฐานข้อมูลบน PostgreSQL 9.2 ที่มีคีมาหลักที่มีประมาณ 70 ตารางและจำนวนตัวแปรของสกีมาต่อไคลเอนต์ที่มีโครงสร้างเหมือนกันจำนวน 30 ตาราง สกีมาไคลเอนต์มีคีย์ต่างประเทศอ้างอิงถึงสกีมาหลักและไม่ใช่วิธีอื่น ๆ ฉันเพิ่งเริ่มเติมฐานข้อมูลด้วยข้อมูลจริงบางอย่างที่นำมาจากเวอร์ชันก่อนหน้า ฐานข้อมูลมาถึงประมาณ 1.5 GB (คาดว่าจะเพิ่มขึ้นเป็น 10s GB ภายในไม่กี่สัปดาห์) เมื่อฉันต้องทำการลบจำนวนมากในตารางกลางในสคีมาหลัก คีย์ต่างประเทศที่เกี่ยวข้องทั้งหมดจะถูกทำเครื่องหมายว่า DELETE CASCADE ไม่แปลกใจเลยว่าจะใช้เวลานาน แต่หลังจากผ่านไป 12 ชั่วโมงก็เห็นได้ชัดว่าฉันเริ่มต้นได้ดีกว่าปล่อย DB และเรียกใช้การย้ายข้อมูลอีกครั้ง แต่ถ้าฉันต้องทำซ้ำการดำเนินการนี้ในภายหลังเมื่อฐานข้อมูลมีชีวิตอยู่และมีขนาดใหญ่ขึ้น? มีวิธีอื่นให้เลือกเร็วกว่านี้ไหม? มันจะเร็วกว่านี้ไหมถ้าฉันเขียนสคริปต์ที่จะเรียกดูตารางที่ขึ้นต่อกันเริ่มต้นที่ตารางที่ไกลที่สุดจากตารางกลางการลบตารางแถวที่อยู่ต่อกันทีละตาราง? รายละเอียดที่สำคัญคือมีทริกเกอร์ในบางตาราง

1
วิธีทำตาราง postgres ขนาดใหญ่ซ้ำกันอย่างไร
ฉันมีตาราง postgres ขนาดใหญ่ (ข้อมูล 10GB - บันทึก 160M) ตารางเป็นแบบสแตติกและไม่มีการดำเนินการเขียนในนั้น ฉันต้องการที่จะทำซ้ำดำเนินการเขียนทำดัชนีใหม่และจากนั้นด้วยการทำธุรกรรมอย่างรวดเร็วเดียวลบเก่าและเปลี่ยนชื่อใหม่เป็นชื่อเดิม วิธีที่เร็วที่สุดในการทำสำเนาตารางขนาดใหญ่เช่นนี้คืออะไร?
29 postgresql 

4
ปรับ postgresql สำหรับ ram จำนวนมาก
ฉันมีเซิร์ฟเวอร์ที่เหมือนกันสองตัว (ในแง่ของฮาร์ดแวร์) พวกเขาเป็นทั้งการติดตั้งมาตรฐานของ windows server 2008 r2 โดยมีการติดตั้งซอฟต์แวร์น้อยที่สุด (โดยทั่วไปคือโค้ดของฉัน บนเซิร์ฟเวอร์ตัวเดียวฉันใช้ SQL Server 2005 บนเซิร์ฟเวอร์ตัวที่สอง postgresql 9.1 ความแตกต่างของประสิทธิภาพในการทำงาน b / n เซิร์ฟเวอร์ทั้งสองนี้ไม่น่าเชื่อเลยมันแย่มากใน postgresql ที่ฉันเสียใจที่เริ่มแรก "ลองใช้ postgresql แทนที่จะจ่ายใบอนุญาตเซิร์ฟเวอร์ sql" ให้เจ้านายของฉันพูด เรากำลังพูดถึงความแตกต่างของ 30 วินาทีเทียบกับ 15 นาทีสำหรับคำสั่งเดียวกันและไม่ใช่แค่คำสั่งเดียวนี่คือแบบสอบถามหรือคำสั่งใด ๆ ที่ฉันส่งไป พวกเขาทั้งสองมีข้อมูลที่เหมือนกัน (ระเบียนถูกแทรกในลำดับที่แตกต่างกัน) และฐานข้อมูลทั้งสองมีโครงสร้าง / ดัชนีเหมือนกัน ฯลฯ แต่ฉันหวังว่ามันเป็นเพียงเรื่องของการปรับแต่งประสิทธิภาพ สิ่งคือเซิร์ฟเวอร์ sql ค่อนข้างใช้ ram 32 กิ๊กทั้งหมดบนเซิร์ฟเวอร์ในขณะที่ postgresl ไม่ได้ใช้อะไรเลยมีน้อยกว่า …

2
ความแตกต่างระหว่าง MATCH FULL, MATCH SIMPLE และ MATCH PARTIAL?
ฉันสังเกตเห็นMATCH SIMPLEและMATCH FULLแต่ฉันไม่เข้าใจสิ่งที่พวกเขาทำ ฉันเห็นค่าเริ่มต้นคือMATCH SIMPLE; แต่MATCHข้ออื่น ๆในFOREIGN KEYฟังก์ชันข้อ จำกัด ได้อย่างไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.