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

PostgreSQL เวอร์ชัน 9.3

1
ไม่ตรงกันอย่างมากระหว่างขนาดดัชนีและจำนวนบัฟเฟอร์ในแผนการดำเนินการ
ปัญหา เรามีคำถามเช่น SELECT COUNT(1) FROM article JOIN reservation ON a_id = r_article_id WHERE r_last_modified < now() - '8 weeks'::interval AND r_group_id = 1 AND r_status = 'OPEN'; ในขณะที่หมดเวลา (หลังจากผ่านไป 10 นาที) บ่อยกว่านั้นฉันตัดสินใจตรวจสอบปัญหา EXPLAIN (ANALYZE, BUFFERS)เอาท์พุทมีลักษณะเช่นนี้ Aggregate (cost=264775.48..264775.49 rows=1 width=0) (actual time=238960.290..238960.291 rows=1 loops=1) Buffers: shared hit=200483 read=64361 dirtied=666 written=8, temp …

2
ส่งคืนระเบียนด้วยฟังก์ชัน PL / pgSQL - เพื่อเพิ่มความเร็วในการสืบค้น
ฉันมีดีมอนที่ไม่ใช่ forking เขียนใน Perlซึ่งใช้การสอบถาม acync เพื่อเขียนสถิติผู้เล่นลงในฐานข้อมูล PostgreSQL 9.3 แต่เมื่อฉันต้องการอ่านบางสิ่งจากฐานข้อมูล (เช่นถ้าผู้เล่นถูกแบนหรือหากผู้เล่นมีสถานะวีไอพี) จากนั้นฉันจะใช้แบบสอบถามแบบซิงโครนัส สิ่งนี้ทำให้เกมหยุดชั่วขณะหนึ่งจนกว่าจะอ่านค่าจากฐานข้อมูล ฉันไม่สามารถเขียน daemon เกมของฉันใหม่เพื่อใช้การสืบค้นแบบ async สำหรับการอ่านค่า (ฉันพยายาม แต่มันต้องมีการเปลี่ยนแปลงมากเกินไป) ดังนั้นคำถามของฉันคือ : มันจะเป็นการรวมเข้ากับแบบสอบถามที่ไม่เกี่ยวข้องหลายรายการหรือไม่ เชื่อมต่อ) ถึง 1 ขั้นตอนและฉันจะคืนค่าหลายค่าในเวลาเดียวกันไปยังโปรแกรม Perl ของฉันได้อย่างไร ข้อความค้นหาปัจจุบันของฉันทั้งหมดใช้รหัสผู้เล่นเป็นพารามิเตอร์และส่งกลับค่า 1: -- Has the player been banned? select true from pref_ban where id=? -- What is the reputation of this player? …

1
ฉันจะ 'บอกใบ้' ความสำคัญของ CTE แบบเรียกซ้ำได้อย่างไร
ฉันใช้ CTE แบบเรียกซ้ำต่อไปนี้เป็นตัวอย่างขั้นต่ำ แต่โดยทั่วไปเครื่องมือเพิ่มประสิทธิภาพจะต้องใช้ค่าเริ่มต้นที่เป็น 'เดา' สำหรับ CTE แบบเรียกซ้ำ with recursive w(n) as ( select 1 union all select n+1 from w where n<5 ) select * from w; /* n --- 1 2 3 4 5 */ explain analyze with recursive w(n) as ( select 1 union all select n+1 …

3
จะทำการอัพเกรดเล็กน้อยของ PostgreSQL บน Windows เช่น 9.3.0 เป็น 9.3.1 ได้อย่างไร
อะไรคือวิธีที่แนะนำในการอัพเกรดเล็กน้อยจาก PostgreSQL เช่น 9.3.0 เป็น 9.3.1 โดยใช้โปรแกรมติดตั้ง windows ที่สร้างโดย Enterprise DB ฉันควรถอนการติดตั้งก่อนหรือเพียงแค่ติดตั้งผ่านการติดตั้งที่มีอยู่? การติดตั้งปัจจุบันได้ดำเนินการกับ postgresql-9.3.0-1-windows-x64.exe ตอนนี้ฉันต้องการอัพเกรดโดยใช้ postgresql-9.3.1-1-windows-x64.exe

2
การรวมกันอย่างมีประสิทธิภาพ (ลบรายการที่ซ้ำกัน) ของอาร์เรย์
ฉันมีสองตารางและleft2 right2ตารางทั้งสองจะมีขนาดใหญ่ (แถว 1-10M) CREATE TABLE left2(id INTEGER, t1 INTEGER, d INTEGER); ALTER TABLE left2 ADD PRIMARY KEY (id,t1); CREATE TABLE right2( t1 INTEGER, d INTEGER, arr INTEGER[] ); ALTER TABLE right2 ADD PRIMARY KEY(t1,d); ฉันจะทำการค้นหาประเภทนี้: SELECT l.d + r.d, UNIQ(SORT((array_agg_mult(r.arr))) FROM left2 l, right2 r WHERE l.t1 = r.t1 …

1
ทำไม postgresql pg_dump ส่งออกมุมมองเป็นตาราง
ฉันใช้pg_dumpเครื่องมือPostgreSQL 9.3 สำหรับการแยกนิยามสคีมาสาธารณะโดยใช้: pg_dump -s -n public -h host -U postgres --dbname=db > ./schema.sql แต่เมื่อฉันตรวจสอบschema.sqlหนึ่งในมุมมองของเราปรากฏในCREATE TABLEคำสั่งแทนCREATE VIEWคำสั่ง แต่ถ้าฉันpg_dumpใช้มุมมองเฉพาะ: pg_dump -s -t myview -h host -U postgres --dbname=db > ./schema.sql จากนั้นschema.sqlมีคำจำกัดความมุมมองที่แท้จริง แล้วทำไมสิ่งนี้ถึงเกิดขึ้น ขอบคุณทุกคน!

1
PostgreSQL: วางคอลัมน์จากมุมมอง
ฉันมีVIEWที่ที่ฉันพยายามสร้างสคริปต์วิวัฒนาการเพื่อให้ฉันสามารถเพิ่มคอลัมน์ลงไปได้ ส่วนนั้นใช้ได้ดี; เพิ่มคอลัมน์แล้วก็ได้ อย่างไรก็ตามการย้อนกลับไม่ทำงาน ลบคอลัมน์ที่เพิ่มล่าสุดล้มเหลวด้วยERROR: cannot drop columns from viewข้อความ ปัญหาคือว่ามุมมองนี้มีการอ้างอิงจำนวนมากทั้งจากและไปดังนั้นฉันไม่สามารถเพียงแค่DROP CASCADEสิ่งที่ยี้! มีเหตุผลทำไมฉันไม่สามารถลบคอลัมน์ที่เพิ่มใหม่จากที่กำหนดVIEW? จากนั้นฉันจะทำอย่างไรเพื่อให้ภารกิจนี้สำเร็จ (หมายเหตุ: สถานการณ์นี่คือสิ่งที่พวกเขาเป็น แต่ฉันเป็นอย่างดีสามารถดูสถานการณ์ที่คล้ายกันหรือที่รู้จักลดลงคอลัมน์จากมุมมองในกรณีอื่น ๆ อีกมากมาย)

3
ใช้คิวรีช้ากับพันล้านแถวตาราง // ดัชนี
เนื่องจากฉันเป็นนักพัฒนาอายุน้อยและไม่ชำนาญในการใช้ฐานข้อมูล (PostgreSQL 9.3) ฉันพบปัญหาบางอย่างเกี่ยวกับโครงการที่ฉันต้องการความช่วยเหลือ โครงการของฉันเกี่ยวกับการรวบรวมข้อมูลจากอุปกรณ์ (มากถึง 1,000 อุปกรณ์ขึ้นไป) ซึ่งทุกอุปกรณ์กำลังส่งข้อมูลหนึ่งบล็อกทุกวินาทีซึ่งจะสร้างประมาณ 3 ล้านแถวต่อชั่วโมง ขณะนี้ฉันมีตารางขนาดใหญ่หนึ่งตารางที่ฉันเก็บข้อมูลขาเข้าของทุกอุปกรณ์: CREATE TABLE data_block( id bigserial timestamp timestamp mac bigint ) เนื่องจากมีข้อมูลหลายประเภทที่บล็อกข้อมูลสามารถ (หรือไม่สามารถ) รวมจึงมีตารางอื่น ๆ ที่อ้างอิงdata_blockตาราง CREATE TABLE dataA( data_block_id bigserial data CONSTRAINT fkey FOREIGN KEY (data_block_id) REFERENCES data_block(id); ); CREATE TABLE dataB(...); CREATE TABLE dataC(...); CREATE INDEX index_dataA_block_id …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.