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

PostgreSQL เวอร์ชัน 9.3

5
วิธีการเปลี่ยนอาร์เรย์ json เป็นอาร์เรย์ postgres?
ฉันมีคอลัมน์dataที่ถือjsonเอกสารคร่าวๆเช่นนี้: { "name": "foo", "tags": ["foo", "bar"] } ฉันต้องการเปลี่ยนtagsอาร์เรย์ที่ซ้อนกันเป็นสตริงที่ต่อกัน ( foo, bar) ที่จะเป็นไปได้อย่างง่ายดายด้วยarray_to_string()ฟังก์ชั่นในทางทฤษฎี อย่างไรก็ตามฟังก์ชั่นนี้ไม่ได้ทำหน้าที่ในjsonอาร์เรย์ ดังนั้นฉันสงสัยว่าจะเปลี่ยนjsonอาร์เรย์นี้เป็น Postgres ได้arrayอย่างไร

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 = …

6
ส่งออกตาราง Postgres เป็น json
มีวิธีการส่งออกข้อมูลตาราง postgres เป็น json ไปยังไฟล์หรือไม่? ฉันต้องการผลลัพธ์เป็นบรรทัดต่อบรรทัดเช่น: {'id':1,'name':'David'} {'id':2,'name':'James'} ... แก้ไข: รุ่น postgres: 9.3.4

2
รีเฟรชมุมมอง materalized ที่เพิ่มขึ้นใน PostgreSQL
เป็นไปได้ไหมที่จะรีเฟรชมุมมองที่เป็นรูปธรรมเพิ่มขึ้นใน PostgreSQL เช่นสำหรับข้อมูลที่ใหม่หรือมีการเปลี่ยนแปลงเท่านั้น พิจารณาตารางนี้และมุมมองที่ปรากฏขึ้น: CREATE TABLE graph ( xaxis integer NOT NULL, value integer NOT NULL, ); CREATE MATERIALIZED VIEW graph_avg AS SELECT xaxis, AVG(value) FROM graph GROUP BY xaxis มีการเพิ่มค่าใหม่เป็นระยะgraphหรือปรับปรุงค่าที่มีอยู่เป็นระยะ ฉันต้องการรีเฟรชมุมมองgraph_avgทุกสองสามชั่วโมงเฉพาะค่าที่อัปเดต อย่างไรก็ตามใน PostgreSQL 9.3 ตารางทั้งหมดจะถูกรีเฟรช ใช้เวลาค่อนข้างนาน เวอร์ชันถัดไป 9.4 อนุญาตให้CONCURRENTอัพเดต แต่ยังคงรีเฟรชมุมมองทั้งหมด ด้วยจำนวนแถว 100 ล้านแถวซึ่งใช้เวลาไม่กี่นาที เป็นวิธีที่ดีในการติดตามการปรับปรุงและค่าใหม่และฟื้นฟูมุมมองเพียงบางส่วนเท่านั้น?

2
วิธีจัดการกับแผนแบบสอบถามที่ไม่ดีที่เกิดจากความเท่าเทียมกันที่แน่นอนในประเภทช่วง?
ฉันกำลังอัปเดตโดยที่ฉันต้องการความเท่าเทียมกันแน่นอนในtstzrangeตัวแปร แถว ~ 1M มีการแก้ไขและแบบสอบถามใช้เวลาประมาณ 13 นาที ผลลัพธ์ของEXPLAIN ANALYZEสามารถเห็นได้ที่นี่และผลลัพธ์ที่แท้จริงแตกต่างอย่างมากจากที่ประเมินโดยผู้วางแผนแบบสอบถาม ปัญหาคือการสแกนดัชนีt_rangeคาดว่าจะส่งคืนแถวเดียว สิ่งนี้น่าจะเกี่ยวข้องกับความจริงที่ว่าสถิติของประเภทช่วงนั้นถูกจัดเก็บแตกต่างจากประเภทอื่น ๆ มองไปที่pg_statsมุมมองสำหรับคอลัมน์ที่n_distinctเป็น -1 และสาขาอื่น ๆ (เช่นmost_common_vals, most_common_freqs) เป็นที่ว่างเปล่า อย่างไรก็ตามจะต้องมีสถิติเก็บไว้ในt_rangeบางแห่ง การอัปเดตที่คล้ายกันอย่างยิ่งซึ่งฉันใช้ 'ภายใน' บน t_range แทนที่จะใช้ความเท่าเทียมกันที่แน่นอนใช้เวลาประมาณ 4 นาทีในการดำเนินการและใช้แผนคิวรีที่แตกต่างกันอย่างมาก (ดูที่นี่ ) แผนคิวรีที่สองนั้นสมเหตุสมผลสำหรับฉันเพราะทุกแถวในตาราง temp และส่วนสำคัญของตารางประวัติจะถูกนำมาใช้ t_rangeที่สำคัญกว่าการวางแผนแบบสอบถามคาดการณ์ตัวเลขให้ถูกต้องประมาณแถวสำหรับกรอง การกระจายตัวของt_rangeมันค่อนข้างผิดปกติ ฉันใช้ตารางนี้เพื่อเก็บสถานะทางประวัติศาสตร์ของตารางอื่นและการเปลี่ยนแปลงของตารางอื่น ๆ เกิดขึ้นพร้อมกันในการทิ้งขนาดใหญ่ดังนั้นจึงมีค่าที่แตกต่างกันไม่มากt_rangeนัก นี่คือการนับที่สอดคล้องกับค่าที่ไม่ซ้ำกันของt_range: t_range | count -------------------------------------------------------------------+--------- ["2014-06-12 20:58:21.447478+00","2014-06-27 07:00:00+00") | 994676 ["2014-06-12 20:58:21.447478+00","2014-08-01 01:22:14.621887+00") …

6
วิธีรับบทบาททั้งหมดที่ผู้ใช้เป็นสมาชิก (รวมถึงบทบาทที่สืบทอด)
สมมติว่าฉันมีกลุ่มฐานข้อมูล Postgresql สองกลุ่มคือ "ผู้เขียน" และ "บรรณาธิการ" และผู้ใช้สองคนคือ "maxwell" และ "ernest" create role authors; create role editors; create user maxwell; create user ernest; grant authors to editors; --editors can do what authors can do grant editors to maxwell; --maxwell is an editor grant authors to ernest; --ernest is an author ฉันต้องการเขียนฟังก์ชั่นนักแสดงที่ส่งกลับรายการของบทบาท …

2
PostgreSQL เพิ่มประสิทธิภาพ SSD
ฉันจะมีฐานข้อมูล PostgreSQL 9.3 ขนาดใหญ่ที่มีหลายตารางที่มีมากกว่า 100M รายการต่อตาราง ฐานข้อมูลนี้จะเป็นแบบอ่านอย่างเดียว (เมื่อฉันกรอกตารางที่จำเป็นทั้งหมดและสร้างดัชนีไม่มีการเขียนบนฐานข้อมูลอีกต่อไป) และการเข้าถึงของผู้ใช้คนเดียว เพื่อการวิจัยเท่านั้น ข้อความค้นหาจะใช้ JOIN บนฟิลด์ฐานข้อมูลจำนวนเต็มเสมอ ฉันอาจจะซื้อ SSD (256-512GB) เพื่อวัตถุประสงค์นี้ ฉันไม่เคยใช้ SSD สำหรับฐานข้อมูลมาก่อนดังนั้นมีอะไรที่ฉันควรกลัว ฉันสามารถใส่ DB ทั้งหมดลงใน SSD หรือเพียงแค่สร้างดัชนีได้หรือไม่ จำเป็นต้องมีคำแนะนำ / การสอนพิเศษสำหรับปรับแต่ง PostgreSQL สำหรับ SSD หรือไม่? โปรดทราบว่าฉันมีเวิร์กสเตชันที่ดีที่มี i7 และ 32Gb of RAM ดังนั้นบางทีคุณสามารถให้คำแนะนำบางอย่างได้เช่นกัน

2
ทำไมแผนต่างกันถ้าแบบสอบถามมีเหตุผลเหมือนกัน?
ฉันเขียนสองฟังก์ชั่นที่จะตอบวันที่ 3 เป็นครั้งแรกที่บ้านของคำถามจากเซเว่นฐานข้อมูลในเจ็ดสัปดาห์ สร้างกระบวนงานที่เก็บไว้ซึ่งคุณสามารถป้อนชื่อภาพยนตร์หรือชื่อของนักแสดงที่คุณชอบและมันจะส่งคืนคำแนะนำห้าอันดับแรกตามภาพยนตร์ที่นักแสดงติดดาวหรือภาพยนตร์ประเภทเดียวกัน ความพยายามครั้งแรกของฉันถูกต้อง แต่ช้า อาจใช้เวลานานถึง 2000 มิลลิวินาทีในการส่งคืนผลลัพธ์ CREATE OR REPLACE FUNCTION suggest_movies(IN query text, IN result_limit integer DEFAULT 5) RETURNS TABLE(movie_id integer, title text) AS $BODY$ WITH suggestions AS ( SELECT actors.name AS entity_term, movies.movie_id AS suggestion_id, movies.title AS suggestion_title, 1 AS rank FROM actors INNER JOIN movies_actors …

2
วิธีการติดตั้งโมดูลเพิ่มเติม pg_trgm
ฉันต้องการทราบวิธีการติดตั้งโมดูลpg_tgrmตามที่ใช้ในรูปแบบการจัดทำดัชนีแบบ Trigram ที่ช่วยให้คุณทำรูปแบบการค้นหาที่ไม่ได้ทอดสมอบนดัชนี WHERE foo LIKE '%bar%';

4
การทำธุรกรรมภายในการทำธุรกรรม
PostgreSQL จะแสดงพฤติกรรมแบบใดถ้าตัวอย่างสคริปต์ด้านล่างนี้ถูกเรียกใช้ BEGIN; SELECT * FROM foo; INSERT INTO foo(name) VALUES ('bar'); BEGIN; <- The point of interest END; PostgreSQL จะยกเลิกรายการที่สองBEGINหรือไม่หรือจะมีการตัดสินใจกระทำโดยนัยจากนั้นเรียกใช้BEGIN ENDบล็อกในตอนท้ายว่าเป็นรายการแยกต่างหาก

2
วิธีเพิ่มความเร็วในการเลือกที่แตกต่างกันอย่างไร
ฉันมีตัวเลือกแบบง่าย ๆ ในข้อมูลอนุกรมเวลา: SELECT DISTINCT user_id FROM events WHERE project_id = 6 AND time > '2015-01-11 8:00:00' AND time < '2015-02-10 8:00:00'; และใช้เวลา 112 วินาที นี่คือแผนแบบสอบถาม: http://explain.depesz.com/s/NTyA แอปพลิเคชันของฉันต้อง preform การดำเนินการที่แตกต่างกันมากมายและนับเช่นนี้ มีวิธีที่เร็วกว่าในการรับข้อมูลประเภทนี้หรือไม่

1
เครื่องมือควบคุมเวอร์ชันสำหรับ postgreSQL [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัพเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Exchange Administrators Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา ทุกคนสามารถแนะนำเครื่องมือควบคุมเวอร์ชันที่ใช้ windows สำหรับ PostgreSQL ขอขอบคุณและขอแสดงความนับถือ GP

3
ทำไม pg_restore ไม่สนใจ - สร้าง? ข้อผิดพลาด: ล้มเหลว: FATAL: ฐานข้อมูล“ new_db” ไม่มีอยู่
ฉันพยายามเรียกใช้คำสั่งต่อไปนี้: sshpass -p "pass" ssh x@1.2.3.4 "pg_dump -Fc -U foo some_db" | pg_restore --create --dbname=new_db ฉันเข้าใจ: failed: FATAL: database "new_db" does not exist

4
วิธีทำ pg_dump ข้ามส่วนขยาย
นี่คือ 9.3 แต่ฉันสามารถจำสิ่งที่ simillar เกิดขึ้นตั้งแต่ 7.x ดังนั้นฉันสร้างฐานข้อมูลและติดตั้งส่วนขยาย plpgsql ลงไป ต่อมาฉันสร้าง pg_dump และก่อนที่จะกู้คืนเป็น databse ฉันแน่ใจว่ามันมีส่วนขยาย plpgsql ด้วย จากนั้นเมื่อการกู้คืนข้อมูลนี้เกิดขึ้น: pg_restore: creating EXTENSION plpgsql pg_restore: creating COMMENT EXTENSION plpgsql pg_restore: [archiver (db)] Error while PROCESSING TOC: pg_restore: [archiver (db)] Error from TOC entry 2053; 0 0 COMMENT EXTENSION plpgsql pg_restore: [archiver (db)] could …

3
ดัชนีสำหรับเคียวรี SQL ที่มีเงื่อนไข WHERE และ GROUP BY
ฉันพยายามที่จะกำหนดดัชนีที่จะใช้สำหรับแบบสอบถาม SQL ที่มีWHEREเงื่อนไขและGROUP BYที่กำลังทำงานช้ามาก คำค้นหาของฉัน: SELECT group_id FROM counter WHERE ts between timestamp '2014-03-02 00:00:00.0' and timestamp '2014-03-05 12:00:00.0' GROUP BY group_id ปัจจุบันตารางมี 32.000.000 แถว เวลาดำเนินการของแบบสอบถามเพิ่มขึ้นมากเมื่อฉันเพิ่มกรอบเวลา ตารางที่สงสัยจะเป็นดังนี้: CREATE TABLE counter ( id bigserial PRIMARY KEY , ts timestamp NOT NULL , group_id bigint NOT NULL ); ขณะนี้ฉันมีดัชนีต่อไปนี้ แต่ประสิทธิภาพยังคงช้า: CREATE INDEX …

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