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

PostgreSQL เวอร์ชั่น 9.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 ล้านแถวซึ่งใช้เวลาไม่กี่นาที เป็นวิธีที่ดีในการติดตามการปรับปรุงและค่าใหม่และฟื้นฟูมุมมองเพียงบางส่วนเท่านั้น?

5
เลือก DISTINCT ในหลายคอลัมน์
สมมติว่าเรามีตารางที่มีสี่คอลัมน์(a,b,c,d)ของชนิดข้อมูลเดียวกัน เป็นไปได้หรือไม่ที่จะเลือกค่าที่แตกต่างทั้งหมดภายในข้อมูลในคอลัมน์และส่งกลับเป็นคอลัมน์เดียวหรือฉันต้องสร้างฟังก์ชันเพื่อให้ได้สิ่งนี้?

3
ค้นหาคำจำกัดความของมุมมองที่ปรากฏใน Postgres
ฉันสงสัยว่าจะค้นหาคำจำกัดความของมุมมองที่ปรากฏใน Postgres ได้อย่างไร สำหรับการอ้างอิงสิ่งที่ฉันหวังว่าจะทำนั้นคล้ายกับสิ่งที่คุณสามารถทำได้สำหรับมุมมองปกติ: SELECT * FROM information_schema.views WHERE table_name = 'some_view'; ซึ่งให้คอลัมน์ต่อไปนี้แก่คุณ: table_catalog table_schema table_name view_definition check_option is_updatable is_insertable_into is_trigger_updatable is_trigger_deletable is_trigger_insertable_into สิ่งนี้เป็นไปได้หรือไม่สำหรับมุมมองที่ปรากฏขึ้น จากการวิจัยของฉันจนถึงขณะนี้ปรากฏว่ามุมมองที่เป็นรูปธรรมได้รับการยกเว้นโดยเจตนาจาก information_schema เพราะ information_schema สามารถแสดงวัตถุที่มีอยู่ในมาตรฐาน SQL เท่านั้น ( http://www.postgresql.org/message-id/3794.1412980686@sss.pgh.pa.us ) เนื่องจากดูเหมือนว่าพวกเขาจะถูกแยกออกจาก information_schema ทั้งหมดฉันไม่แน่ใจว่าจะทำอย่างไร แต่สิ่งที่ฉันต้องการทำคือทวีคูณ: สอบถามว่ามีมุมมองที่ปรากฏขึ้นโดยเฉพาะหรือไม่ (จนถึงตอนนี้วิธีเดียวที่ฉันพบว่าทำคือลองสร้างมุมมอง mat ด้วยชื่อเดียวกันและดูว่ามันระเบิดขึ้นหรือไม่) จากนั้นสอบถามคำจำกัดความของมุมมองที่ปรากฏขึ้น (คล้ายกับview_definitionคอลัมน์บนinformation_schema.views)

2
“ Recheck Cond:” บรรทัดในแผนคิวรีพร้อมการสแกนดัชนีบิตแมป
นี่คือการแยกความคิดเห็นจากคำถามก่อนหน้า: Postgres 9.4.4 แบบสอบถามใช้เวลาตลอดไป ใช้ PostgreSQL 9.4 มีเสมอดูเหมือนว่าจะเป็นสายหลังจากสแกนดัชนีบิตแมปในการส่งออกแผนแบบสอบถามโดยRecheck Cond:EXPLAIN กดไลค์ในEXPLAINผลลัพธ์ของคำถามอ้างอิง: -> Bitmap Heap Scan on table_three (cost=2446.92..19686.74 rows=8159 width=7) Recheck Cond: (("timestamp" > (now() - '30 days'::interval)) AND (client_id > 0)) -> BitmapAnd (cost=2446.92..2446.92 rows=8159 width=0) -> Bitmap Index Scan on table_one_timestamp_idx (cost=0.00..1040.00 rows=79941 width=0) Index Cond: ("timestamp" > (now() …

2
Postgres รักษาลำดับการแทรกของระเบียนหรือไม่
ตัวอย่างเช่นเมื่อฉันใช้การสืบค้นซึ่งจะส่งกลับรหัสบันทึก INSERT INTO projects(name) VALUES (name1), (name2), (name3) returning id; ซึ่งผลิตผลผลิต: 1 2 3 รหัสนี้จะชี้ไปที่ค่าแทรกที่สอดคล้องกันหรือไม่ 1 -> name1 2 -> name2 3 -> name3

3
จะอัพเกรด PostgreSQL จากเวอร์ชั่น 8.4 เป็น 9.4 ได้อย่างไร
ฉันต้องการที่จะอัพเกรด PostgreSQL ของฉันจากเวอร์ชัน8.4ไป9.4 เอกสารไม่ได้เป็นอย่างชัดเจนกับผม ฉันจะสูญเสียฐานข้อมูลเก่าของฉันหรือไม่ถ้าฉันทำการอัพเกรด ฉันจะสำรองฐานข้อมูลเก่าของฉันได้อย่างไรหากฉันสูญเสียฐานข้อมูลหลังจากการอัปเกรด ฉันจะอัพเกรด psql ของฉันได้อย่างไร PostgreSQL ของฉันกำลังทำงานบนเซิร์ฟเวอร์CentOS 6.6

2
จะทำการสำรองข้อมูลเพิ่มเติมทุก ๆ ชั่วโมงใน Postgres ได้อย่างไร
กำลังพยายามสำรองข้อมูลเพิ่มรายชั่วโมงของเซิร์ฟเวอร์ Postgres เดียว (Win7 64) ฉันมีการตั้งค่าต่อไปนี้ในpostgresql.conf: max_wal_senders = 2 wal_level = archive archive_mode = on archive_command = 'copy "%p" "c:\\postgres\\foo\\%f"' (เริ่มต้นใหม่) ฉันได้สำรองฐานกับ pg_basebackup -U postgres -D ..\foo -F t -x ซึ่งทำให้base.tarไฟล์ขนาดใหญ่ในfooโฟลเดอร์และเพิ่มไฟล์ 16,384 KB ซึ่งผมถือว่าเป็น WAL สิ่งที่ผมไม่เข้าใจคือทำไม Wals ในfooไม่เปลี่ยนแปลง การdata/pg_xlogเปลี่ยนแปลงใน WAL pg ไม่ควรคัดลอกไปหรือไม่ มันจะตัดสินใจอย่างไร บางทีฉันต้องตั้งค่าarchive_timeout=3600? ฉันเห็นหลายไซต์ (รายการส่งเมลของ pg, หน้า postgres ของ …

1
อาร์เรย์แบบสอบถาม PostgreSQL JSON เทียบกับหลายค่า
ฉันต้องการเขียนแบบสอบถามกับjsonbประเภทใน Postgres ที่กำหนดอาร์เรย์รหัสลูกค้าจะพบกลุ่มที่เกี่ยวข้อง รับตารางตัวอย่างนี้: CREATE TABLE grp(d JSONB NOT NULL); INSERT INTO grp VALUES ('{"name":"First","arr":["foo"], "customers":[{"id":"1", "name":"one"},{"id":"2", "name":"two"}]}') , ('{"name":"Second","arr":["foo","bar"], "customers":[{"id":"3", "name":"three"},{"id":"4", "name":"four"}]}') , ('{"name":"Third","arr":["bar","baz"], "customers":[{"id":"5", "name":"five"},{"id":"6", "name":"seven"}]}'); ฉันพบคำถามที่คล้ายกัน ( PostgreSql JSONB SELECT เทียบกับหลายค่า ) และจัดการเพื่อให้ได้สิ่งที่ฉันต้องการในอาร์เรย์อย่างง่ายโดยใช้แบบสอบถามนี้: SELECT d FROM grp WHERE d->'arr' ?| ARRAY['foo', 'bar']; อย่างไรก็ตามฉันไม่สามารถใช้งานได้เมื่ออาร์เรย์มีวัตถุ JSON : SELECT d …

2
การค้นหา Trigram ช้าลงมากเมื่อสตริงการค้นหายาวขึ้น
ในฐานข้อมูล Postgres 9.1 ฉันมีตารางที่table1มีแถว ~ 1.5M และคอลัมน์label(ชื่อที่เรียบง่ายเพื่อประโยชน์ของคำถามนี้) มีดัชนีการทำงานของ Trigram-on lower(unaccent(label)) ( unaccent()ถูกทำให้ไม่เปลี่ยนรูปเพื่ออนุญาตให้ใช้ในดัชนี) แบบสอบถามต่อไปนี้ค่อนข้างเร็ว: SELECT count(*) FROM table1 WHERE (lower(unaccent(label)) like lower(unaccent('%someword%'))); count ------- 1 (1 row) Time: 394,295 ms แต่แบบสอบถามต่อไปนี้ช้าลง: SELECT count(*) FROM table1 WHERE (lower(unaccent(label)) like lower(unaccent('%someword and some more%'))); count ------- 1 (1 row) Time: 1405,749 ms และการเพิ่มคำอื่น …

1
ฉันจะแยก ctid ลงในหมายเลขหน้าและแถวได้อย่างไร
แต่ละแถวในตารางมีคอลัมน์ระบบ ctidประเภทtidที่แสดงถึงตำแหน่งทางกายภาพของแถว: create table t(id serial); insert into t default values; insert into t default values; select ctid , id from t; ctid | รหัส : ---- | -: (0,1) | 1 (0,2) | 2 dbfiddle ที่นี่ อะไรคือวิธีที่ดีที่สุดในการได้รับเพียงจำนวนหน้าเป็นจากctidในประเภทที่เหมาะสมที่สุด (เช่นinteger, bigintหรือnumeric(1000,0))? วิธีเดียวที่ฉันสามารถคิดเป็นน่าเกลียดมาก

1
ฉันจะแยกรหัส PL / pgSQL ที่ยาวเป็นหลายเส้นได้อย่างไร
มีวิธีการแบ่งรหัส PL / pgSQL ยาวเป็นหลายบรรทัดหรือไม่? บริบทของฉันคือฟังก์ชันทริกเกอร์ที่ฉันบันทึกการแทรกลงในตารางตาม: INSERT INTO insert_log (log_time, description) VALUES ( now() , 'A description. Made up of 3 semi long sentences. That I want to split, in the code, not in the log table, over 3 lines for readability.' );

2
PostgreSQL เข้าร่วมโดยใช้ JSONB
ฉันมี SQL นี้: CREATE TABLE test(id SERIAL PRIMARY KEY, data JSONB); INSERT INTO test(data) VALUES ('{"parent":null,"children":[2,3]}'), ('{"parent":1, "children":[4,5]}'), ('{"parent":1, "children":[]}'), ('{"parent":2, "children":[]}'), ('{"parent":2, "children":[]}'); ที่จะให้: id | data ----+-------------------------------------- 1 | {"parent": null, "children": [2, 3]} 2 | {"parent": 1, "children": [4, 5]} 3 | {"parent": 1, "children": []} 4 …

1
วิธีรับวัตถุเฉพาะจากอาร์เรย์ jsonb ใน PostgreSQL
ฉันมีเขตข้อมูลที่เรียกว่า 'ผู้ใช้' ที่มีอาร์เรย์ json ที่มีลักษณะเช่นนี้: "user": [{ "_id" : "1", "count" : "4" }, { "_id" : "3", "count": "4"}] ตอนนี้ฉันต้องการแบบสอบถามเช่น: select count from tablename where id = "1" ฉันไม่สามารถรับฟิลด์เฉพาะcountจากอาร์เรย์ของวัตถุ json ใน PostgreSQL 9.4

2
โทรไปยังฟังก์ชั่นเดียวกันพร้อมกัน: เกิดการชะงักงันได้อย่างไร
ฟังก์ชั่นของฉันnew_customerถูกเรียกหลายครั้งต่อวินาที (แต่เพียงครั้งเดียวต่อเซสชัน) โดยเว็บแอปพลิเคชัน สิ่งแรกที่มันทำคือล็อคcustomerตาราง (เพื่อทำการ 'แทรกถ้าไม่มี' - ตัวแปรง่าย ๆ ของupsert) ความเข้าใจของฉันเกี่ยวกับเอกสารก็คือการโทรอื่น ๆnew_customerควรเพียงแค่รอจนกว่าการโทรก่อนหน้านี้ทั้งหมดจะเสร็จสิ้น: LOCK TABLE จะได้รับการล็อคระดับโต๊ะโดยรอถ้าจำเป็นเพื่อให้การปลดล็อกที่มีข้อขัดแย้งเกิดขึ้น ทำไมบางครั้งมันถึงตายแทน ความหมาย: create function new_customer(secret bytea) returns integer language sql security definer set search_path = postgres,pg_temp as $$ lock customer in exclusive mode; -- with w as ( insert into customer(customer_secret,customer_read_secret) select secret,decode(md5(encode(secret, 'hex')),'hex') where …

1
ดัชนีไม่ได้ใช้กับ `= any () 'แต่ใช้กับ` in'
ตารางtมีสองดัชนี: create table t (a int, b int); create type int_pair as (a int, b int); create index t_row_idx on t (((a,b)::int_pair)); create index t_a_b_idx on t (a,b); insert into t (a,b) select i, i from generate_series(1, 100000) g(i) ; ไม่มีการใช้ดัชนีกับanyผู้ประกอบการ: explain analyze select * from t where (a,b) = …

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