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

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

2
ข้อ จำกัด - หนึ่งแถวบูลีนเป็นจริงแถวอื่นทั้งหมดเป็นเท็จ
ฉันมีคอลัมน์: standard BOOLEAN NOT NULL ฉันต้องการบังคับใช้หนึ่งแถวจริงและอื่น ๆ ทั้งหมดเป็นเท็จ ไม่มีของ FK หรือสิ่งอื่นใดขึ้นอยู่กับข้อ จำกัด นี้ ฉันรู้ว่าฉันสามารถทำได้ด้วย plpgsql แต่ดูเหมือนว่าค้อนขนาดใหญ่ ฉันต้องการบางสิ่งบางอย่างเช่นCHECKหรือUNIQUEข้อ จำกัด ง่ายกว่าดีกว่า แถวหนึ่งต้องเป็นจริงพวกเขาไม่สามารถเป็นเท็จได้ทั้งหมด (ดังนั้นแถวแรกที่แทรกจะต้องเป็นจริง) แถวจะต้องได้รับการอัปเดตซึ่งหมายความว่าฉันต้องรอตรวจสอบข้อ จำกัด จนกว่าการอัปเดตจะเสร็จสิ้นเนื่องจากแถวทั้งหมดอาจถูกตั้งค่าเป็นเท็จก่อนและหนึ่งแถวจริงหลังจากนั้น มี FK ระหว่างproducts.tax_rate_idและtax_rate.idแต่ไม่มีอะไรเกี่ยวข้องกับอัตราภาษีเริ่มต้นหรือมาตรฐานซึ่งผู้ใช้สามารถเลือกเพื่อสร้างผลิตภัณฑ์ใหม่ได้อย่างง่ายดาย .. PostgreSQL 9.5 ถ้าเป็นเรื่องสำคัญ พื้นหลัง ตารางคืออัตราภาษี อัตราภาษีอย่างใดอย่างหนึ่งคือค่าเริ่มต้น ( standardเนื่องจากค่าเริ่มต้นคือคำสั่ง Postgres) เมื่อมีการเพิ่มผลิตภัณฑ์ใหม่อัตราภาษีมาตรฐานจะถูกนำไปใช้กับผลิตภัณฑ์ หากไม่มีstandardอยู่ฐานข้อมูลต้องทำการเดาหรือเช็คที่ไม่จำเป็นทุกชนิด standardทางออกที่ง่ายผมคิดว่าคือการทำให้แน่ใจว่ามี ตามค่าเริ่มต้น "" ด้านบนฉันหมายถึงเลเยอร์การนำเสนอ (UI) มีตัวเลือกผู้ใช้สำหรับการเปลี่ยนแปลงอัตราภาษีเริ่มต้น ฉันต้องเพิ่มการตรวจสอบพิเศษเพื่อให้แน่ใจว่า GUI / ผู้ใช้ไม่พยายามตั้งค่า tax_rate_id …

2
ฉันจะใช้การค้นหาข้อความแบบเต็มในคอลัมน์ jsonb กับ Postgres ได้อย่างไร
ดังนั้นฉันจึงมีjsonbคอลัมน์ที่มีรายการเช่นนี้: https://pastebin.com/LxJ8rKk4 มีวิธีใดบ้างที่จะใช้การค้นหาข้อความแบบเต็มในคอลัมน์ jsonb ทั้งหมด?

1
Nest Loop vs. Hash ที่ไม่พึงประสงค์เข้าร่วมใน PostgreSQL 9.6
ฉันมีปัญหากับการวางแผนการสืบค้น PostgreSQL 9.6 ข้อความค้นหาของฉันมีลักษณะเช่นนี้: SET role plain_user; SELECT properties.* FROM properties JOIN entries_properties ON properties.id = entries_properties.property_id JOIN structures ON structures.id = entries_properties.entry_id WHERE structures."STRUKTURBERICHT" != '' AND properties."COMPOSITION" LIKE 'Mo%' AND ( properties."NAME" LIKE '%VASP-ase-preopt%' OR properties."CALCULATOR_ID" IN (7,22,25) ) AND properties."TYPE_ID" IN (6) ฉันเปิดใช้งานการรักษาความปลอดภัยระดับแถวสำหรับตารางที่ใช้งานอยู่ด้านบน ด้วยset enable_nestloop = Trueตัววางแผนคิวรีรัน …

1
Postgresql เปิดใช้งานส่วนขยายที่ไม่มีผู้ใช้ขั้นสูง
ฉันมีเซิร์ฟเวอร์ PostgreSQL 9.5 ซึ่งฉันมีสคริปต์ที่สร้างบทบาทและฐานข้อมูลสำหรับผู้ใช้โดยอัตโนมัติ ภายในฐานข้อมูลเหล่านี้ก็จะเป็นประโยชน์ในการเปิดใช้ส่วนขยายที่เฉพาะเจาะจง (เช่น pgcrypto) แต่ที่ผมเข้าใจหนึ่งจะต้อง superuser CREATE EXTENSIONการทำงาน มีวิธีการเปิดใช้งานส่วนขยายดังกล่าวโดยไม่ต้องลงชื่อเข้าใช้ด้วยตนเองด้วยบัญชี superuser หรือไม่?

2
เหตุใดจึงไม่สามารถแทรกแถวใน CTE ไม่สามารถอัปเดตในคำสั่งเดียวกันได้
ใน PostgreSQL 9.5 ให้สร้างตารางง่ายๆด้วย: create table tbl ( id serial primary key, val integer ); ฉันเรียกใช้ SQL เพื่อแทรกค่าจากนั้นอัปเดตในคำสั่งเดียวกัน: WITH newval AS ( INSERT INTO tbl(val) VALUES (1) RETURNING id ) UPDATE tbl SET val=2 FROM newval WHERE tbl.id=newval.id; ผลลัพธ์คือ UPDATE ถูกละเว้น: testdb=> select * from tbl; ┌────┬─────┐ │ id │ …
13 postgresql  cte 

3
pg_restore: [archiver] ไม่พบสตริงมายากลในส่วนหัวของไฟล์
ฉันใช้ PostgreSQL 9.1 และต้องการกู้คืนไฟล์สำรองที่สร้างด้วยpg_dump: sudo pg_dump -h 127.0.0.1 -U postgres --clean --inserts -E UTF8 -f out.sql database_name คำสั่งนี้สร้างไฟล์ sql ที่ถูกต้องที่เริ่มต้นด้วยการปล่อยวัตถุฐานข้อมูลใด ๆ ที่มีอยู่จากนั้นสร้างตารางทั้งหมดบ่งบอกลำดับและอื่น ๆ และในที่สุดก็แทรกข้อมูล เมื่อฉันพยายามกู้คืนไฟล์สำรองที่สร้างด้วย: (เพิ่มตัวแบ่งบรรทัดเพื่อวัตถุประสงค์ในการแสดงผลเท่านั้น) sudo pg_restore -d database_name -h 127.0.0.1 -U postgres --format=c --clean --create out.sql มันล้มเหลวและพิมพ์: pg_restore: [archiver] did not find magic string in file header อะไรคือเหตุผลสำหรับสิ่งนั้น?

2
วิธีเพิ่มความเร็วในการเรียงลำดับโดยการเรียงลำดับเมื่อใช้ดัชนี GIN ใน PostgreSQL
ฉันมีโต๊ะแบบนี้: CREATE TABLE products ( id serial PRIMARY KEY, category_ids integer[], published boolean NOT NULL, score integer NOT NULL, title varchar NOT NULL); ผลิตภัณฑ์สามารถเป็นของหลายหมวดหมู่ category_idsคอลัมน์เก็บรายการรหัสประจำตัวของหมวดหมู่ผลิตภัณฑ์ทั้งหมด ข้อความค้นหาทั่วไปจะมีลักษณะดังนี้ (ค้นหาหมวดหมู่เดียวเสมอ): SELECT * FROM products WHERE published AND category_ids @> ARRAY[23465] ORDER BY score DESC, title LIMIT 20 OFFSET 8000; เพื่อเพิ่มความเร็วฉันใช้ดัชนีต่อไปนี้: CREATE INDEX idx_test1 …

2
PostgreSQL: วิธีแสดงรายการฟังก์ชั่นที่เก็บไว้ทั้งหมดที่เข้าถึงตารางเฉพาะ
บทนำ: ฐานข้อมูล PostgreSQL พร้อมฟังก์ชั่นการจัดเก็บหลายร้อยรายการรวมถึงล้าสมัยไม่ได้ใช้งาน ฯลฯ ปัญหา ฉันต้องการค้นหาฟังก์ชั่นที่เก็บไว้ทั้งหมดที่มีความสัมพันธ์กับตาราง X - เพราะฉันต้องการเปลี่ยนโครงสร้างตาราง บางคนอาจไม่ได้ใช้ดังนั้นฉันไม่สามารถทำได้เพียงแค่ดูรหัส โซลูชันที่ฉันมี ATM กำลังใช้งาน psql \df+และ grepping output แต่ฉันต้องการโซลูชันที่คล้ายกับฐานข้อมูลมากขึ้นเช่นโดยใช้ schema ของข้อมูล นี่จะเป็นงานซ้ำ ๆ แน่นอนและฉันต้องการให้มันดีและสะอาด ข้อเสนอแนะใด ๆ

3
ใช้ CASE เพื่อเลือกคอลัมน์ในแบบสอบถามแบบ UPDATE หรือไม่
ฉันสามารถใช้CASEเพื่อเลือกคอลัมน์ที่จะแสดงในSELECTแบบสอบถาม (Postgres) เช่น: SELECT CASE WHEN val = 0 THEN column_x WHEN val = 1 THEN column_y ELSE 0 END AS update, ... มีความคล้ายคลึงกันหรือไม่เมื่อดำเนินการUPDATEค้นหาใน Postgres (เช่นเลือกคอลัมน์ที่ควรได้รับการอัปเดต)? ฉันคิดว่าไม่ใช่เพราะฉันไม่พบอะไรเกี่ยวกับเรื่องนี้ แต่อาจมีบางคนมีทางเลือกที่ฉลาด (นอกเหนือจากการใช้โพรซีเดอร์หรืออัปเดตแต่ละคอลัมน์โดยใช้ a CASEเพื่อพิจารณาว่าควรกำหนดค่าของคอลัมน์ใหม่หรือมอบหมายค่าเดิม ราคา). หากไม่มีทางเลือกอื่นที่ง่ายแน่นอนฉันจะยอมรับว่าเป็นคำตอบเช่นกัน ข้อมูลเพิ่มเติม : ในกรณีของฉันฉันมีคอลัมน์ที่อาจเกิดขึ้น 14 คอลัมน์ซึ่งอาจได้รับการอัปเดตโดยมีการอัปเดตเพียงคอลัมน์เดียวต่อแถวที่ตรงกัน (ตารางที่จะอัปเดตเข้าร่วมกับอีกคอลัมน์หนึ่งในแบบสอบถาม) จำนวนแถวที่จะอัปเดตจะแตกต่างกันมากที่สุดอาจเป็นหลายสิบหรือหลายร้อย ฉันเชื่อว่ามีการจัดทำดัชนีสำหรับเงื่อนไขการเข้าร่วม

5
PostgreSQL: วันที่สร้างตาราง
ฉันเพิ่งเสร็จสิ้นโครงการในระหว่างที่สร้างตารางฐานข้อมูลจำนวนมาก ตารางเหล่านี้ส่วนใหญ่มีขยะชั่วคราวและฉันกำลังมองหาวิธีง่ายๆในการแสดงรายการตารางเหล่านี้ทั้งหมด มีวิธีรายการตาราง DB ทั้งหมดเรียงตามวันที่สร้างของพวกเขา

1
บีบอัดฐานข้อมูล PostgreSQL
ฉันมีฐานข้อมูล PostgreSQL ขนาดใหญ่ที่มีขนาดใหญ่กว่า 500GB ซึ่งใหญ่เกินไป อย่างไรก็ตามมีการบีบอัดฐานข้อมูลลงในขนาดที่สามารถจัดการได้มากขึ้นหรือไม่? ฉันพยายามทำเช่นนี้กับ SquashFS และฐานข้อมูลที่บีบอัดลงไปที่ 177GB แต่ PostgreSQL ต้องการให้ฐานข้อมูลที่มีการเข้าถึงการเขียนและระบบ Squashed เป็นแบบอ่านอย่างเดียว ผู้ใช้ฐานข้อมูลที่มีประสบการณ์มากขึ้นมีข้อเสนอแนะใด ๆ เพื่อบรรลุเป้าหมายนี้หรือไม่? ฐานข้อมูลเก็บข้อมูล GIS สำหรับดาวเคราะห์และจะใช้ภายในระบบที่ปรับใช้ ขณะนี้มันตั้งอยู่บน 1TB SSD แต่ฉันพยายามหลีกเลี่ยงการตบในฮาร์ดไดรฟ์เพิ่มเติมเพียงเพื่อรองรับฐานข้อมูลขนาดใหญ่ ฐานข้อมูลทำงานได้ตามที่ต้องการโดยไม่มีปัญหาฉันเพียงต้องการบีบอัดให้มีขนาดที่จัดการได้มากขึ้นและหลีกเลี่ยงการวางลงในไดรฟ์อื่น

2
วิธีทำให้ DISTINCT ON เร็วขึ้นใน PostgreSQL
ฉันมีตารางstation_logsในฐานข้อมูล PostgreSQL 9.6: Column | Type | ---------------+-----------------------------+ id | bigint | bigserial station_id | integer | not null submitted_at | timestamp without time zone | level_sensor | double precision | Indexes: "station_logs_pkey" PRIMARY KEY, btree (id) "uniq_sid_sat" UNIQUE CONSTRAINT, btree (station_id, submitted_at) ฉันพยายามที่จะได้รับที่ผ่านมาlevel_sensorค่าขึ้นอยู่กับแต่ละsubmitted_at station_idมีประมาณ 400 ที่ไม่ซ้ำกันมีstation_idค่านิยมและรอบ 20k station_idแถวต่อวันต่อ ก่อนสร้างดัชนี: …


1
คีย์หลักหลายตัวใน PostgreSQL
ฉันมีตารางต่อไปนี้: CREATE TABLE word( word CHARACTER VARYING NOT NULL, id BIGINT NOT NULL, repeat INTEGER NOT NULL ); ALTER TABLE public.word OWNER TO postgres; ALTER TABLE ONLY word ADD CONSTRAINT "ID_PKEY" PRIMARY KEY (word,id); เมื่อฉันพยายามกู้คืนโดยใช้คำสั่งต่อไปนี้: psql -U postgres -h localhost -d word -f word.sql มันทำให้ฉันมีข้อผิดพลาดนี้: ไม่อนุญาตให้ใช้คีย์หลักหลายตัวสำหรับตาราง "คำ" ฉันจะใช้หลายคีย์หลักใน postgres ได้อย่างไร

3
จะเกิดอะไรขึ้นหากทั้งสองกระบวนการพยายามที่จะดูข้อมูลอ้างอิงใหม่อย่างต่อเนื่องในเวลาเดียวกัน
ตามเอกสาร: รีเฟรชมุมมองที่เป็นรูปธรรมอย่างไม่หยุดยั้งโดยไม่ล็อคออกพร้อมกันเลือกบนมุมมองที่ปรากฏ ( ... ) ... เนื้อหาอื่น ๆ ... แม้จะมีตัวเลือกนี้REFRESH ครั้งละหนึ่งอาจทำงานกับ มุมมองที่ปรากฏขึ้นใด ๆ ฉันมีฟังก์ชั่นที่ตรวจสอบเวลารีเฟรชครั้งล่าสุดสำหรับ VIEW MATERIALIZED และถ้าผ่านไป 60 วินาทีมันจะรีเฟรช อย่างไรก็ตามจะเกิดอะไรขึ้นหากฉันพยายามรีเฟรชมุมมองที่เป็นรูปธรรมจากกระบวนการที่แยกกันสองกระบวนการในเวลาเดียวกัน พวกเขาจะจัดคิวหรือจะเพิ่มข้อผิดพลาดหรือไม่ มีวิธีการตรวจจับหรือไม่เมื่อมุมมองแบบ MATERIALIZED กำลังถูกรีเฟรชและหลีกเลี่ยงการสัมผัส ขณะนี้ฉันได้ทำการเติมข้อมูลในตารางก่อนที่จะรีเฟรช (ตั้งค่าrefreshingเป็นtrue) จากนั้นตั้งค่าเป็นfalseเมื่อกระบวนการเสร็จสิ้น EXECUTE 'INSERT INTO refresh_status (last_update, refreshing) VALUES (clock_timestamp(), true) RETURNING id') INTO refresh_id; EXECUTE 'REFRESH MATERIALIZED VIEW CONCURRENTLY my_mat_view'; EXECUTE 'UPDATE refresh_status SET …

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