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

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

7
EXISTS (SELECT 1 …) เทียบกับ EXISTS (SELECT * …) อย่างใดอย่างหนึ่งหรือไม่
เมื่อใดก็ตามที่ฉันต้องการตรวจสอบการมีอยู่ของแถวในตารางฉันมักจะเขียนเงื่อนไขเช่น: SELECT a, b, c FROM a_table WHERE EXISTS (SELECT * -- This is what I normally write FROM another_table WHERE another_table.b = a_table.b ) คนอื่นเขียนเหมือน: SELECT a, b, c FROM a_table WHERE EXISTS (SELECT 1 --- This nice '1' is what I have seen other people use FROM another_table …

2
การปรับปรุงประสิทธิภาพการอัปเดตเป็นกลุ่มใน PostgreSQL
ใช้ PG 9.1 บน Ubuntu 12.04 ขณะนี้เราใช้เวลาถึง 24 ชั่วโมงในการเรียกใช้ชุดคำสั่ง UPDATE จำนวนมากบนฐานข้อมูลซึ่งเป็นรูปแบบ: UPDATE table SET field1 = constant1, field2 = constant2, ... WHERE id = constid (เราแค่เขียนทับฟิลด์ของวัตถุที่ระบุด้วย ID) ค่ามาจากแหล่งข้อมูลภายนอก (ยังไม่ได้อยู่ในฐานข้อมูลในตาราง) ตารางมีดัชนีไม่กี่ข้อและไม่มีข้อ จำกัด ของรหัสต่างประเทศ ไม่มีการกระทำใด ๆ จนกว่าจะสิ้นสุด ใช้เวลา 2 ชั่วโมงในการนำเข้าpg_dumpฐานข้อมูลทั้งหมด ดูเหมือนว่าพื้นฐานนี้เราควรตั้งเป้าหมายอย่างสมเหตุสมผล ขาดการผลิตโปรแกรมที่กำหนดเองซึ่งสร้างชุดข้อมูลสำหรับ PostgreSQL เพื่อนำเข้าอีกครั้งมีอะไรที่เราสามารถทำได้เพื่อให้ประสิทธิภาพการอัพเดทจำนวนมากใกล้เคียงกับการนำเข้าหรือไม่ (นี่คือพื้นที่ที่เราเชื่อว่าต้นไม้ที่ผสานโครงสร้างบันทึกการจัดการดี แต่เราสงสัยว่ามีอะไรที่เราสามารถทำได้ภายใน PostgreSQL) ความคิดบางอย่าง: วางดัชนีที่ไม่ใช่ ID ทั้งหมดและสร้างใหม่ในภายหลังหรือไม่ การเพิ่ม …

4
การรัน pg_dump บน live db สร้างการสำรองข้อมูลที่สอดคล้องหรือไม่?
ฉันมีฐานข้อมูล 3GB ที่ได้รับการแก้ไขอย่างต่อเนื่องและฉันจำเป็นต้องทำการสำรองข้อมูลโดยไม่ต้องหยุดเซิร์ฟเวอร์ (Postgres 8.3) pg_dump ของฉันทำงาน 5 นาที เกิดอะไรขึ้นถ้าข้อมูลถูกแก้ไขระหว่างกระบวนการ? ฉันจะได้รับการสำรองข้อมูลที่สอดคล้องกันหรือไม่ ฉันไม่ต้องการทราบเมื่อเกิดภัยพิบัติ Postpost เอกสารhttp://www.postgresql.org/docs/8.3/static/app-pgdump.htmlไม่ได้พูดอะไรเกี่ยวกับเรื่องนี้
37 postgresql 

5
วิธีแทรกข้อมูล (ไฟล์) ลงในคอลัมน์ PostgreSQL bytea ได้อย่างไร
คำถามนี้ไม่เกี่ยวกับ bytea v. oid v. blobs v. วัตถุขนาดใหญ่ ฯลฯ ฉันมีตารางที่ประกอบด้วยintegerเขตข้อมูลคีย์หลักและbyteaเขตข้อมูล ฉันต้องการป้อนข้อมูลลงในbyteaช่อง สิ่งนี้สามารถสันนิษฐานได้ว่าทำได้ด้วยPL/ภาษาใดภาษาหนึ่งและฉันอาจจะลองทำสิ่งนี้PL/Pythonในอนาคต ขณะที่ฉันยังคงทดสอบและทดลองใช้ฉันต้องการแทรกข้อมูลจากไฟล์ (บนเซิร์ฟเวอร์) โดยใช้คำสั่ง SQL "มาตรฐาน" ฉันทราบว่าผู้ดูแลระบบที่มีสิทธิ์เขียนบนเซิร์ฟเวอร์เท่านั้นที่จะสามารถแทรกข้อมูลในแบบที่ฉันต้องการ ฉันไม่ได้กังวลเกี่ยวกับเรื่องนี้ในขณะนี้เนื่องจากผู้ใช้จะไม่สามารถแทรกbyteaข้อมูลในปัจจุบัน ฉันได้ค้นหาไซต์ StackExchange ต่างๆ, คลังข้อมูล PostgreSQL และอินเทอร์เน็ตโดยทั่วไปแล้ว แต่ไม่สามารถหาคำตอบได้ แก้ไข: นี้การอภิปรายจาก 2008 แสดงให้เห็นว่าสิ่งที่ฉันต้องการจะทำคือไปไม่ได้ มีการbyteaใช้ฟิลด์อย่างไร แก้ไข: คำถามที่คล้ายกันนี้จากปี 2005 ยังไม่มีคำตอบ แก้ไขได้:รายละเอียดที่ให้ไว้ที่นี่ในpsycopgเว็บไซต์เป็นพื้นฐานสำหรับการแก้ปัญหาที่ฉันเขียนใน Python มันก็อาจจะเป็นไปได้ที่จะใส่ข้อมูลไบนารีเป็นคอลัมน์ที่ใช้bytea PL/Pythonฉันไม่ทราบว่าสิ่งนี้เป็นไปได้โดยใช้ "บริสุทธิ์" SQL

2
PostgreSQL EXCLUDE ข้อผิดพลาดในการใช้: จำนวนเต็มชนิดข้อมูลไม่มีคลาสตัวดำเนินการเริ่มต้น
ใน PostgreSQL 9.2.3 ฉันพยายามสร้างตารางที่ง่ายขึ้นนี้: CREATE TABLE test ( user_id INTEGER, startend TSTZRANGE, EXCLUDE USING gist (user_id WITH =, startend WITH &&) ); แต่ฉันได้รับข้อผิดพลาดนี้: ERROR: data type integer has no default operator class for access method "gist" HINT: You must specify an operator class for the index or define a default …

2
ไม่สามารถเปลี่ยนชื่อคอลัมน์ในมุมมอง PostgreSQL ด้วย CREATE หรือ REPLACE
ใน PostreSQL 8.3 ฉันพยายามสร้างมุมมองซึ่งจะดูเหมือนกับตารางที่มีอยู่ แต่มีชื่อคอลัมน์ที่แตกต่างกัน วิธีนี้ใช้ได้ผล CREATE OR REPLACE VIEW gfam.nice_builds AS SELECT (family_tree.family_tree_id) as x, family_tree.family_tree_name, family_tree.family_tree_description FROM gfam.family_tree; ด้านบนทำซ้ำตาราง family_tree แต่ความพยายามต่อไปนี้ล้มเหลว: CREATE OR REPLACE VIEW gfam.nice_builds AS SELECT (family_tree.family_tree_id) as x, family_tree.family_tree_name, family_tree.family_tree_description FROM gfam.family_tree; ข้อผิดพลาด: ไม่สามารถเปลี่ยนชื่อคอลัมน์มุมมอง "family_tree_id" ฉันจะเปลี่ยนชื่อคอลัมน์ได้อย่างไร
37 postgresql 

1
Postgres นับด้วยเงื่อนไขที่แตกต่างกันในแบบสอบถามเดียวกัน
แก้ไข Postgres 9.3 ฉันกำลังทำงานกับรายงานที่มีสคีมาต่อไปนี้: http://sqlfiddle.com/#!15/fd104/2 แบบสอบถามปัจจุบันทำงานได้ดีซึ่งมีลักษณะเช่นนี้: โดยทั่วไปจะเข้าร่วม 3 ตารางภายใน ฉันไม่ได้ทำแบบสอบถามนี้ แต่นักพัฒนาที่ทิ้งไว้และฉันต้องการแก้ไขแบบสอบถาม ในขณะที่คุณสามารถมองเห็นเพียงแค่นับแอพลิเคชันทั้งหมดขึ้นอยู่กับTotalApplication a.agent_idและคุณสามารถดูtotalapplicationคอลัมน์ในผลลัพธ์ได้ สิ่งที่ฉันต้องการคือการลบและเปลี่ยนtotalapplicationเป็นสองคอลัมน์ใหม่ ฉันต้องการเพิ่มcompletedsurveyและpartitalsurveyคอลัมน์ โดยพื้นฐานแล้วส่วนนี้จะกลายเป็น SELECT a.agent_id as agent_id, COUNT(a.id) as CompletedSurvey FROM forms a WHERE a.created_at >= '2015-08-01' AND a.created_at <= '2015-08-31' AND disposition = 'Completed Survey' GROUP BY a.agent_id ฉันเพิ่งเพิ่มAND disposition = 'Completed Survey'แต่ฉันต้องการคอลัมน์อื่นpartialsurveyที่มีข้อความค้นหาเดียวกันโดยมีcompletedsurveyความแตกต่างเพียงอย่างเดียวคือ AND disposition = …

2
ทำความเข้าใจกับ“ การสแกนบิตแมปฮีป” และ“ การสแกนดัชนีบิตแมป”
ฉันจะพยายามอธิบายความเข้าใจที่คลาดเคลื่อนของฉันตามตัวอย่างต่อไปนี้ ผมไม่เข้าใจปัจจัยพื้นฐานBitmap Heap Scan Nodeของ พิจารณาแบบสอบถามSELECT customerid, username FROM customers WHERE customerid < 1000 AND username <'user100';ซึ่งเป็นแผนนี้: Bitmap Heap Scan on customers (cost=25.76..61.62 rows=10 width=13) (actual time=0.077..0.077 rows=2 loops=1) Recheck Cond: (((username)::text < 'user100'::text) AND (customerid < 1000)) -> BitmapAnd (cost=25.76..25.76 rows=10 width=0) (actual time=0.073..0.073 rows=0 loops=1) -> Bitmap Index …
36 postgresql  index 

1
จะดูการตั้งค่าปัจจุบันของ Autovacuum ใน Postgres ได้อย่างไร?
ฉันพบตัวอย่างหนึ่งล้านตัวอย่างของวิธีตั้งค่าการตั้งค่าของ Autovacuum แต่ดูเหมือนจะไม่พบวิธีแสดงรายการการกำหนดค่าปัจจุบัน Postgres 9.1 เป็นรุ่นที่ฉันสนใจมากที่สุด

2
มีการใช้คำสั่งในลำดับที่เขียนหรือไม่
ฉันพยายามเพิ่มประสิทธิภาพการสืบค้นซึ่งมีลักษณะเป็นตารางขนาดใหญ่ (37 ล้านแถว) และมีคำถามเกี่ยวกับลำดับการดำเนินการในแบบสอบถาม select 1 from workdays day where day.date_day >= '2014-10-01' and day.date_day <= '2015-09-30' and day.offer_id in ( select offer.offer_day from offer inner join province on offer.id_province = province.id_province inner join center cr on cr.id_cr = province.id_cr where upper(offer.code_status) <> 'A' and province.id_region in ('10' ,'15' ,'21' …

5
วิธีคัดลอกล้านแถวจากตารางหนึ่งไปยังอีกตารางใน Postgresql ได้อย่างมีประสิทธิภาพ
ฉันมีตารางฐานข้อมูลสองตาราง หนึ่งมีหลายร้อยล้านบันทึก historyให้เรียกว่าหนึ่ง อีกอันหนึ่งคำนวณจากรายวันและฉันต้องการคัดลอกบันทึกทั้งหมดลงในรายการhistoryหนึ่ง สิ่งที่ฉันทำคือเรียกใช้: INSERT INTO history SELECT * FROM daily และมันก็มีเล่ห์เหลี่ยมอยู่พักหนึ่ง แต่มันก็เริ่มช้าลงเรื่อย ๆ ตามจำนวนเรคคอร์ดที่เพิ่มขึ้นเรื่อย ๆ ตอนนี้ฉันมีระเบียนประมาณ 2 ล้านรายการที่ต้องคัดลอกจากdailyไปยังhistoryในการดำเนินการเดียวและใช้เวลานานกว่าจะเสร็จสมบูรณ์ มีวิธีอื่นที่มีประสิทธิภาพมากกว่าในการคัดลอกข้อมูลจากตารางหนึ่งไปอีกตารางหนึ่งหรือไม่?
36 postgresql 

6
อะไรคือความแตกต่างระหว่าง“ ขั้นตอนการจัดเก็บ” และ“ ฟังก์ชั่นที่จัดเก็บ”?
ดังนั้นความคิดเห็นจากคำถามนี้กล่าวว่ามีความแตกต่างกันเล็กน้อยใน "วิธีการจัดเก็บ" และ "จัดเก็บ funtions" ใน PostgreSQL ความคิดเห็นเชื่อมโยงไปยังบทความวิกิพีเดียแต่บางส่วนดูเหมือนจะไม่นำไปใช้ (เช่นสามารถนำไปใช้ในการSELECTแถลง) ไวยากรณ์ตัวเองดูเหมือนจะสับสนนิด ๆ หน่อย ๆ : CREATE FUNCTION emp_stamp() RETURNS trigger AS $emp_stamp$ BEGIN [...] END; $emp_stamp$ LANGUAGE plpgsql; CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp FOR EACH ROW EXECUTE PROCEDURE emp_stamp(); คุณสามารถสร้างแต่หมายถึงว่ามันเป็นFUNCTIONPROCEDURE ดังนั้นความแตกต่างระหว่างสองสิ่งนี้คืออะไร?

4
การติดตามความคืบหน้าของการสร้างดัชนีใน PostgreSQL
มีวิธีการติดตามความคืบหน้าของการสร้างดัชนีใน PostgreSQL หรือไม่ ฉันกำลังสร้างดัชนีบนโต๊ะขนาดใหญ่และฉันต้องการที่จะดูว่าสิ่งนี้เกิดขึ้นเร็วแค่ไหน มีวิธีตรวจสอบเรื่องนี้หรือไม่?
36 postgresql  index 

3
ชนิดข้อมูลที่เหมาะสมที่สุดสำหรับเขตข้อมูล MD5 คืออะไร
เรากำลังออกแบบระบบที่รู้กันว่าอ่านยาก (ตามคำสั่งของการอ่านหมื่นครั้งต่อนาที) มีตารางnamesที่ทำหน้าที่จัดเรียงรีจิสทรีกลาง แต่ละแถวมีtextเขตข้อมูลrepresentationและไม่ซ้ำกันkeyซึ่งเป็นแฮช MD5 ของสิ่งrepresentationนั้น 1ตารางนี้มีระเบียนหลายสิบล้านระเบียนและคาดว่าจะเติบโตเป็นพันล้านตลอดอายุการใช้งานแอปพลิเคชัน มีตารางอื่น ๆ อีกหลายสิบตาราง (ของสคีมาที่แตกต่างกันอย่างมากและจำนวนเรคคอร์ด) ที่อ้างอิงถึงnamesตาราง ระเบียนใดก็ตามที่ระบุในตารางใดตารางหนึ่งเหล่านี้รับประกันว่าจะมี a name_keyซึ่งเป็น foreign key ไปยังnamesตาราง 1: อนึ่งตามที่คุณคาดไว้ระเบียนในตารางนี้จะไม่เปลี่ยนรูปเมื่อมีการเขียน สำหรับตารางใดก็ตามที่ไม่ใช่namesตารางแบบสอบถามที่พบบ่อยที่สุดจะเป็นไปตามรูปแบบนี้: SELECT list, of, fields FROM table WHERE name_key IN (md5a, md5b, md5c...); ฉันต้องการปรับให้เหมาะสมสำหรับการอ่าน ฉันสงสัยว่าจุดแรกของฉันควรจะลดขนาดของดัชนี (แม้ว่าฉันจะไม่ได้รับการพิสูจน์ว่าผิด) คำถาม: อะไรคือ / ชนิดข้อมูลที่ดีที่สุดสำหรับkeyและname_keyคอลัมน์คืออะไร? มีเหตุผลที่จะใช้hex(32)มากกว่าbit(128)? BTREEหรือGIN?

4
รับวันที่แก้ไขล่าสุดของตารางฐานข้อมูล PostgreSQL
ฉันพยายามรับเมื่อตารางของฉันถูกแก้ไขโดยตรวจสอบวันที่แก้ไขไฟล์ตามที่อธิบายไว้ในคำตอบนี้ แต่ผลลัพธ์ไม่ถูกต้องเสมอไป วันที่แก้ไขไฟล์อัปเดตในหลายนาทีหลังจากฉันอัปเดตตาราง มันเป็นพฤติกรรมที่ถูกต้องหรือไม่ PostgreSQL จัดเก็บการดัดแปลงตารางในแคชแล้วล้างออกไปยังฮาร์ดไดรฟ์หรือไม่ ดังนั้นฉันจะได้รับวันที่แก้ไขล่าสุดที่ถูกต้องของตารางได้อย่างไร (สมมติว่าการแก้ไขสูญญากาศอัตโนมัติก็โอเคด้วย) ฉันใช้ PostgreSQL 9.2 ภายใต้ Linux Centos 6.2 x64
35 postgresql 

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