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

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

2
ปรับปรุงประสิทธิภาพของ COUNT / GROUP-BY ในตาราง PostgresSQL ขนาดใหญ่?
ฉันใช้ PostgresSQL 9.2 และมีความสัมพันธ์ 12 คอลัมน์มีประมาณ 6,700,000 แถว มันมีโหนดในพื้นที่ 3 มิติแต่ละคนอ้างอิงผู้ใช้ (ผู้สร้างมัน) ในการสอบถามผู้ใช้รายใดที่สร้างจำนวนโหนดที่ฉันทำต่อไปนี้ (เพิ่มexplain analyzeสำหรับข้อมูลเพิ่มเติม): EXPLAIN ANALYZE SELECT user_id, count(user_id) FROM treenode WHERE project_id=1 GROUP BY user_id; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------- HashAggregate (cost=253668.70..253669.07 rows=37 width=8) (actual time=1747.620..1747.623 rows=38 loops=1) -> Seq Scan on treenode (cost=0.00..220278.79 rows=6677983 width=8) (actual time=0.019..886.803 rows=6677983 loops=1) …

3
ข้อ จำกัด ในการบังคับใช้“ อย่างน้อยหนึ่ง” หรือ“ หนึ่งอย่าง” ในฐานข้อมูล
สมมติว่าเรามีผู้ใช้และผู้ใช้แต่ละคนสามารถมีที่อยู่อีเมลได้หลายที่อยู่ CREATE TABLE emails ( user_id integer, email_address text, is_active boolean ) แถวตัวอย่างบางส่วน user_id | email_address | is_active 1 | foo@bar.com | t 1 | baz@bar.com | f 1 | bar@foo.com | f 2 | ccc@ddd.com | t ฉันต้องการบังคับใช้ข้อ จำกัด ที่ผู้ใช้ทุกคนมีที่อยู่หนึ่งที่แน่นอน ฉันจะทำสิ่งนี้ใน Postgres ได้อย่างไร ฉันสามารถทำสิ่งนี้: CREATE UNIQUE INDEX "user_email" ON …

4
ตั้งชื่อเป็นแอตทริบิวต์เมื่อสร้าง JSON ด้วย row_to_json
เป็นไปได้หรือไม่ที่จะเปลี่ยนชื่อชื่อเริ่มต้นf1, f2, f3...เมื่อใช้row_to_jsonฟังก์ชั่นสำหรับบางคอลัมน์เท่านั้น? ที่ฉันสามารถทำได้ row_to_json(customers) การคืน {"id_customer":2,"first_name":"bla","last_name":"second_bla"} แต่ถ้าฉันต้องการชื่อโดยไม่มีid_customerฉันต้องใช้ row_to_json(row(first_name, last_name)) แล้วฉันจะได้รับ {"f1":"bla","f2":"second_bla"} และฉันต้องการรับผลลัพธ์นี้ด้วยชื่อคอลัมน์เริ่มต้นหรือของฉันเอง ฉันรู้ว่าฉันสามารถสร้างประเภทคอมโพสิตและการใช้งานของฉันเอง row_to_json(row(first_name, last_name))::my_custom_type แต่เป็นไปไม่ได้ไหมที่จะทำให้ถูกต้องในแบบสอบถามโดยไม่ต้องสร้างประเภทนั้น
24 postgresql 

6
แก้ไขตารางในฐานข้อมูลที่ใช้งานจริง
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ระบบฐานข้อมูล "ยอดนิยม" (MySQL, Postgres ... ) ส่วนใหญ่จะจัดการกับการเปลี่ยนแปลงตารางบนฐานข้อมูลการผลิตจริง (เช่นการเพิ่มการลบหรือการเปลี่ยนประเภทของโคลลัส) ได้อย่างไร ฉันรู้ว่าวิธีที่ถูกต้องคือการสำรองข้อมูลทุกอย่างกำหนดเวลาหยุดทำงานและทำการเปลี่ยนแปลง แต่ ... ระบบฐานข้อมูลปัจจุบันสนับสนุนการทำสิ่งเหล่านี้ "ออนไลน์" โดยไม่หยุดอะไรหรือไม่? (อาจเป็นเพียงการชะลอการสืบค้นที่อ้างอิงคอลัมน์ที่เพิ่งมีการเปลี่ยนแปลง / ลบ) และจะเกิดอะไรขึ้นเมื่อฉันเพิ่งALTER TABLE...สร้างฐานข้อมูลที่ทำงานอยู่ ทุกอย่างหยุดลงเมื่อสิ่งนี้เกิดขึ้นหรือไม่? ข้อมูลเสียหายหรือไม่ เป็นต้น อีกครั้งฉันส่วนใหญ่หมายถึง Postgres หรือ MySQL เป็นสิ่งที่ฉันพบ (และใช่ทุกครั้งที่ฉันต้องทำสิ่งนี้ก่อนที่ฉันจะทำ "วิธีการที่ถูกต้อง" สำรองสิ่งต่างๆจัดตารางเวลาดาวน์ไทน์ ฯลฯ ... แต่ฉันแค่อยากรู้ว่ามันเป็นไปได้ไหมที่จะทำสิ่งนี้ " สกปรก "หรือหากมีระบบฐานข้อมูลใด ๆ ที่รองรับการเปลี่ยนแปลงสคีมา" …

2
pgAdmin การบำรุงรักษาถามโดยอะไร
โต้ตอบ pgAdmin สำหรับการเพิ่มการเชื่อมต่อที่ฐานข้อมูลใหม่ขอให้"การบำรุงรักษา DB" เพื่อให้สามารถเชื่อมต่อฉันตั้งค่าเป็นฐานข้อมูลที่ฉันต้องการเชื่อมต่อ (และฉันมีสิทธิ์ในการเชื่อมต่อ) ดังนั้นทำไมชื่อ "Maintenance DB" แทนที่จะเป็น "DB" หรือ "Database"

1
วิธีการตรวจสอบว่ามี [การเชื่อมต่อที่ไม่ได้ใช้งานกับ] ธุรกรรมที่ไม่มีข้อผูกมัดใน PostgreSQL หรือไม่
ตามความเห็นเกี่ยวกับคำถามนี้ฉันถามเกี่ยวกับการเชื่อมต่อที่ไม่ได้ใช้งานใน PostgreSQL 9.2ธุรกรรมบางอย่างที่ไม่ได้รับการติดต่อ (อาจเกี่ยวข้องกับการเชื่อมต่อที่ไม่ได้ใช้งาน) อาจทำให้เกิดปัญหาประสิทธิภาพการทำงาน เป็นวิธีที่ดีในการตรวจสอบว่ามีการทำธุรกรรมที่ปราศจากข้อผูกมัด (คะแนนโบนัสหากมีวิธีที่จะรู้ว่าพวกเขากำลังเชื่อมต่ออยู่ไม่ได้ใช้งานหรือไม่)? ขอบคุณมาก ๆ!

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

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 ฉันต้องการเขียนฟังก์ชั่นนักแสดงที่ส่งกลับรายการของบทบาท …

1
ลักษณะการทำงานของรั้วการปรับให้เหมาะสมของ CTE (ด้วยแบบสอบถาม) ระบุไว้ในมาตรฐาน SQL: 2008 หรือไม่ ถ้าเป็นเช่นนั้นอยู่ที่ไหน
ฉันเห็นการอ้างอิงบ่อย ๆ กับWITHแบบสอบถาม (นิพจน์ตารางทั่วไปหรือ CTE) ซึ่งทำหน้าที่เป็นรั้วการเพิ่มประสิทธิภาพซึ่งเซิร์ฟเวอร์ไม่ได้รับอนุญาตให้ส่งตัวกรองลงในการสืบค้น CTE ดึงการแสดงออกทั่วไปออกมาจาก CTE เป็นต้นมันมักอ้างว่า เพื่อให้เป็นพฤติกรรมที่กำหนดโดยมาตรฐาน SQL CTEs มีแน่นอนรั้วการเพิ่มประสิทธิภาพใน PostgreSQL ... แต่นี้ต้องตามมาตรฐานหรือรายละเอียดการดำเนินงานจริงเพียง? ตัวอย่างเช่นการโพสต์รายชื่อผู้รับจดหมายเหล่านี้อ้างสิทธิ์หรือแนะนำว่าเป็นมาตรฐาน: http://www.digipedia.pl/usenet/thread/11566/101385/ หลังจากพูดถึงมันในความคิดเห็นฉันถูกถามว่ามีการระบุไว้ที่ไหนและหลังจากดูที่ร่างฉบับเดียวของ SQL: 2008 ฉันสามารถเข้าถึงฉันไม่ได้โชคดีมากที่ได้พบมัน ฉันยังไม่ได้ศึกษามาตรฐานอย่างเข้มข้นดังนั้นฉันหวังว่าจะได้รับคำแนะนำจากใครบางคนที่: การฟันดาบการเพิ่มประสิทธิภาพของ CTEs ใน PostgreSQL นั้นเป็นสิ่งจำเป็นตามมาตรฐานหรือไม่ และถ้าเป็นเช่นนั้นมันอยู่ที่ไหนระบุ? หรือข้อความที่อยู่ในรายชื่อผู้รับจดหมายของ Pg มีข้อผิดพลาดหรือไม่? ดูเพิ่มเติมที่รั้วการปรับให้เหมาะสมเธรดCTE ในรายการสิ่งที่ต้องทำ? .

3
ฉันจะติดตั้ง pgcrypto ใน PostgreSQL 8.4 ได้อย่างไร
ฉันใช้อูบุนตูเซิร์ฟเวอร์ 10.10 และผมได้ติดตั้ง PostgreSQL 8.4 apt-get install postgresqlใช้ ฉันต้องการใช้sha1()ฟังก์ชั่นในตัวแต่ดูเหมือนว่าฉันจะต้องติดตั้งpgcryptoก่อน แต่ฉันไม่รู้วิธีติดตั้ง ไม่มีpgcryptoถ้าฉันพยายามติดตั้งโดยใช้apt-get install pgcryptoและฉันไม่พบไฟล์ใด ๆ ที่เริ่มต้นด้วยpgcryptoในระบบของฉัน (ฉันพยายามfind / -name "pgcrypto*") ฉันจะติดตั้ง pgcrypto เพื่อให้สามารถใช้digest('word-to-hash','sha1')ฟังก์ชั่นในการสืบค้นฐานข้อมูลได้อย่างไร อัปเดต:ฉันพยายามติดตั้ง pgcrypto ในเครื่อง Ubuntu อื่น หลังจากติดตั้งแพคเกจโดยใช้sudo apt-get install postgresql-contrib-8.4ฉันจะติดตั้งลงในฐานข้อมูล PostgreSQL ปัจจุบันได้อย่างไร

2
postgres หลายคอลัมน์เพื่อ json
ฉันกำลังเรียกใช้ postgresql 9.3.4 ฉันมีตารางที่มี 3 ฟิลด์: id name addr --- ---- ---- 1 n1 ad1 2 n2 ad2 ... ฉันต้องการย้ายข้อมูลไปยังตารางใหม่ที่มีฟิลด์เช่น: id data --- ---- 1 {'name': 'n1', 'addr': 'ad1'} 2 {'name': 'n2', 'addr': 'ad2'} ... row_to_jsonไม่ใช่วิธีแก้ปัญหาสำหรับฉันเหมือนSELECT t.id, row_to_json(t) as data FROM (select id, name, addr from myt) tเป็นการเพิ่มidผลลัพธ์เช่นกัน มีวิธีเลือกเขตข้อมูลที่ฉันต้องการ (ชื่อ …
23 postgresql  json  row 

3
แทนที่มุมมองที่ปรากฏใน Postgres
ฉันมีมุมมองที่เป็นรูปธรรมPostgres 9.3ซึ่งฉันต้องการอัปเดตด้วยคอลัมน์ใหม่ อย่างไรก็ตามมุมมองที่ปรากฏอื่น ๆ ยังขึ้นอยู่กับมุมมองนี้และข้อความแสดงข้อผิดพลาดระบุว่าไม่สามารถวางมุมมองได้เมื่อวัตถุอื่นขึ้นอยู่กับมุมมองนี้ ข้อผิดพลาด: ไม่สามารถวางมุมมอง materialized ล่าสุด latest_charges ได้เนื่องจากวัตถุอื่นขึ้นอยู่กับมัน นอกจากนี้ยังปรากฏจากเอกสารที่ว่าคำหลัก REPLACE ไม่ถูกต้องสำหรับมุมมองที่ปรากฏ มีทางลัดนอกเหนือจากการปล่อยวัตถุที่ต้องพึ่งพาทั้งหมดแล้วสร้างใหม่แต่ละรายการหรือไม่

2
วิธีที่มีประสิทธิภาพที่สุดในการลบแถวจำนวนมากออกจาก postgres
ฉันสงสัยว่าวิธีที่มีประสิทธิภาพมากที่สุดคือการลบจำนวนแถวขนาดใหญ่ออกจาก PostgreSQL กระบวนการนี้จะเป็นส่วนหนึ่งของงานที่เกิดซ้ำทุกวันเพื่อนำเข้าข้อมูลจำนวนมาก (ส่วนที่แทรก + ลบ) ลงในตาราง อาจมีหลายพันแถวที่อาจลบเป็นล้านแถว ฉันมีไฟล์ของคีย์หลักหนึ่งรายการต่อบรรทัด ตัวเลือกสองตัวที่ฉันคิดว่ามีอยู่ตามลำดับด้านล่าง แต่ฉันไม่ทราบ / เข้าใจ internals ของ PostgreSQL มากพอที่จะทำการตัดสินใจอย่างชาญฉลาดซึ่งจะดีที่สุด ดำเนินการDELETEค้นหาสำหรับแต่ละแถวในไฟล์โดยใช้WHEREคีย์หลักอย่างง่าย(หรือจัดกลุ่มการลบเป็นกลุ่มnโดยใช้ส่วนIN()คำสั่ง) นำเข้าคีย์หลักเข้าสู่ตารางชั่วคราวโดยใช้COPYคำสั่งแล้วลบออกจากตารางหลักโดยใช้การเข้าร่วม ข้อเสนอแนะใด ๆ จะได้รับการชื่นชมมาก!

2
วิธีการจัดเก็บข้อมูลอนุกรมเวลา
ฉันมีสิ่งที่ฉันเชื่อว่าเป็นชุดข้อมูลอนุกรมเวลา (โปรดแก้ไขให้ฉันถ้าฉันผิด) ซึ่งมีค่าที่เกี่ยวข้องมากมาย ตัวอย่างจะเป็นแบบจำลองรถยนต์และติดตามคุณลักษณะต่าง ๆ ของมันในระหว่างการเดินทาง ตัวอย่างเช่น: ประทับเวลา ความเร็ว | ระยะทางที่เดินทาง อุณหภูมิ ฯลฯ อะไรจะเป็นวิธีที่ดีที่สุดในการจัดเก็บข้อมูลนี้เพื่อให้เว็บแอปพลิเคชันสามารถสืบค้นฟิลด์เพื่อหา max, mins และพล็อตข้อมูลแต่ละชุดได้อย่างมีประสิทธิภาพเมื่อเวลาผ่านไป ฉันเริ่มต้นวิธีการแยกวิเคราะห์การถ่ายโอนข้อมูลและแคชผลลัพธ์ที่ไร้เดียงสาเพื่อไม่ให้ถูกจัดเก็บ อย่างไรก็ตามหลังจากเล่นไปสักครู่มันจะปรากฏขึ้นวิธีนี้จะไม่ขยายในระยะยาวเนื่องจากข้อ จำกัด ของหน่วยความจำและถ้าแคชจะถูกล้างข้อมูลทั้งหมดจะต้องมีการแยกวิเคราะห์และแคชอีกครั้ง นอกจากนี้สมมติว่าข้อมูลถูกติดตามทุกวินาทีด้วยความเป็นไปได้ที่หาได้ยากของชุดข้อมูลมากกว่า 10 ชั่วโมงเราแนะนำให้ตัดทอนชุดข้อมูลโดยการสุ่มตัวอย่างทุก ๆ N วินาทีหรือไม่?

2
เกิดอะไรขึ้นในจุดตรวจสอบ PostgreSQL
นี่เป็นส่วนหนึ่งของบันทึกด่านของฉัน: 2014-03-26 11:51:29.341 CDT,,,18682,,532854fc.48fa,4985,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 15047 buffers (1.4%); 0 transaction log file(s) added, 0 removed, 30 recycled; write=68.980 s, sync=1.542 s, total=70.548 s; sync files=925, longest=0.216 s, average=0.001 s",,,,,,,,,"" 2014-03-26 11:56:05.430 CDT,,,18682,,532854fc.48fa,4987,,2014-03-18 09:15:24 CDT,,0,LOG,00000,"checkpoint complete: wrote 16774 buffers (1.6%); 0 transaction log file(s) added, 0 removed, 31 …
22 postgresql 

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