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

PostgreSQL เวอร์ชัน 9.3

2
เคียวรีระยะห่างอย่างรวดเร็วขัดขวางในระดับสูงกว่า
ฉันมีฐานข้อมูลขนาดใหญ่ (แถว 16M) ที่มีแฮชการรับรู้ภาพ ฉันต้องการที่จะสามารถค้นหาแถวตามระยะทาง hammingในกรอบเวลาที่เหมาะสม ในปัจจุบันเท่าที่ฉันเข้าใจปัญหาอย่างถูกต้องแล้วฉันคิดว่าตัวเลือกที่ดีที่สุดในที่นี้คือการติดตั้ง SP-GiST แบบกำหนดเองที่ใช้BK-Treeแต่ดูเหมือนว่าจะใช้งานได้มากและฉันก็ยังคลุมเครือในทางปฏิบัติ รายละเอียดของการปรับใช้ดัชนีที่กำหนดเองอย่างเหมาะสม การคำนวณระยะทาง Hamming คือเวไนยพอและผมทำรู้ C แม้ว่า โดยพื้นฐานแล้ววิธีการที่เหมาะสมในที่นี้คืออะไร? ฉันต้องสามารถสอบถามการจับคู่ภายในระยะทางแก้ไขที่แน่นอนของแฮช ตามที่ผมเข้าใจมัน Levenshtein ระยะทางกับสตริงความยาวเท่ากันเป็นหน้าที่ hamming ระยะเพื่อให้มีอย่างน้อยบางส่วนสนับสนุนที่มีอยู่สำหรับสิ่งที่ฉันต้องการแม้ว่าจะไม่มีวิธีการที่ชัดเจนในการสร้างดัชนีจากมัน (จำค่าที่ผมสอบถาม การเปลี่ยนแปลงฉันไม่สามารถคำนวณระยะทางจากค่าคงที่ล่วงหน้าได้เนื่องจากจะมีประโยชน์สำหรับค่านั้นเท่านั้น แฮชปัจจุบันถูกเก็บเป็นสตริง 64- ถ่านที่มีการเข้ารหัส ASCII แบบไบนารีของแฮช (เช่น "10010101 ... ") แต่ฉันสามารถแปลงให้เป็น int64 ได้อย่างง่ายดาย ปัญหาจริงคือฉันต้องสามารถสืบค้นได้ค่อนข้างเร็ว ดูเหมือนว่าจะเป็นไปได้ที่จะบรรลุบางสิ่งบางอย่างตามแนวของสิ่งที่ฉันต้องการpg_trgmแต่ฉันค่อนข้างชัดเจนว่าการจับคู่ mechamism ของ trigram ทำงานอย่างไร (โดยเฉพาะการวัดความคล้ายคลึงกันที่ส่งกลับมาเป็นตัวแทนจริง ๆ )ชนิดของระยะทางแก้ไข) ประสิทธิภาพการแทรกไม่สำคัญ (ราคาแพงมากในการคำนวณแฮชสำหรับแต่ละแถว) ดังนั้นฉันจึงสนใจเกี่ยวกับการค้นหาเป็นหลัก

1
ลบแถวที่ไม่ได้อ้างอิงในตารางอื่น
ฉันมีสองตารางในฐานข้อมูล PostgreSQL 9.3 ตารางที่link_replyมีคีย์ต่างประเทศชื่อชี้ไปที่โต๊ะwhich_grouplink_group ฉันต้องการลบแถวทั้งหมดจากlink_groupที่ไม่มีแถวที่เกี่ยวข้องlink_replyอยู่ ฟังดูธรรมดาพอ แต่ฉันก็ดิ้นรนกับมัน มันจะเป็นอะไรที่เรียบง่ายแบบนี้ (ไม่ทำงาน)? DELETE FROM link_group WHERE link_reply = NULL;

1
การจัดการกับพื้นที่ดิสก์เต็มใน postgresql
ฉันมี Django เว็บแอปพลิเคชันที่มีแบ็กเอนด์ postgresql 9.3.10 (อยู่ในระบบปฏิบัติการ Linux) ฉันพบข้อผิดพลาดของดิสก์เต็มแม้ว่าฉันจะพยายามตัดทอนตารางฉันก็พบข้อผิดพลาดในการเรียงลำดับ: ERROR: could not extend file "base/30137/33186048": No space left on device HINT: Check free disk space. ฉันไม่สามารถเพิ่มพื้นที่ดิสก์เพิ่มเติมลงในเซิร์ฟเวอร์ได้อย่างง่ายดายและฉันจะไม่ลบสิ่งใดใน VM นี้ อย่างไรก็ตามมีหลายตารางที่เป็นตัวเลือกสำหรับการตัดทอน แต่ดูเหมือนว่าฉันไม่สามารถตัดทอนได้ในตอนนี้ ใครช่วยแนะนำฉันเกี่ยวกับสิ่งที่ฉันสามารถทำได้ที่นี่? นี่คือการตีเซิร์ฟเวอร์การผลิตของฉันอย่างหนักและฉันเป็น DBA โดยไม่ได้ตั้งใจที่นี่จึงนิ่งงันโดยสิ้นเชิง

3
อัพเดตองค์ประกอบ json ในประเภทข้อมูล json
ฉันไม่สามารถคิดได้ว่าฉันจะปรับปรุงองค์ประกอบในประเภทข้อมูล PostgreSQL 9.3 ได้อย่างไร ตัวอย่างของฉัน: CREATE TABLE "user" ( id uuid NOT NULL, password character varying(255), profiles json, gender integer NOT NULL DEFAULT 0, created timestamp with time zone, connected timestamp with time zone, modified timestamp with time zone, active integer NOT NULL DEFAULT 1, settings json, seo character varying(255) …

1
ฉันจะดีบัก Idle Query ได้อย่างไร
ฉันมีชุดแบบสอบถามที่ฉันทำงานทุกวันในฐานข้อมูลของฉัน อย่างไรก็ตามดูเหมือนว่าจะติดอยู่ในสถานะไม่ได้ใช้งานและฉันมีปัญหาในการดีบั๊กสิ่งที่เกิดขึ้น แบบสอบถามคือการรวมตัวกันบนโต๊ะที่ถูกแทรกพร้อมกันซึ่งฉันเดาว่าเกี่ยวข้องกับปัญหาอย่างใด (การรวมเป็นข้อมูลวันก่อนหน้าดังนั้นการแทรกไม่ควรส่งผลต่อผลลัพธ์) เบาะแส ฉันใช้มันในสคริปต์หลามโดยใช้ sqlalchemy อย่างไรก็ตามฉันได้ตั้งค่าระดับธุรกรรมเป็นแบบอัตโนมัติดังนั้นฉันไม่คิดว่าสิ่งต่าง ๆ จะถูกห่อในการทำธุรกรรม ในทางกลับกันฉันไม่เห็นข้อความค้นหาหยุดทำงานเมื่อฉันรันด้วยตนเองในเทอร์มินัล sql โดยการสอบถามแบบสอบถามครั้งแรกที่เข้ามาในฐานข้อมูลเป็นpg_stat_activity state='active'หลังจาก 15 วินาทีอาจจะมีการเปลี่ยนแปลงของรัฐที่จะ 'ไม่ได้ใช้งานและนอกจากนี้มีการตั้งค่าxact_start NULLธงรอไม่เคยถูกตั้งค่าเป็นจริง ก่อนที่ผมจะคิดออก autocommit ระดับธุรกรรมสำหรับ sqlalchemy มันแทนจะแขวนในรัฐมากกว่า'idle in transaction' 'idle'และมันอาจจะแฮงค์น้อยลงเล็กน้อยนับตั้งแต่ทำการเปลี่ยนแปลง? ฉันรู้สึกว่าฉันไม่พร้อมที่จะขุดลึกลงไปกว่าที่ฉันมี ข้อเสนอแนะใด ๆ แม้จะอธิบายเพิ่มเติมเกี่ยวกับรัฐต่างๆและผู้ฝึกงานระดับสูงที่เกี่ยวข้องโดยไม่ต้องตอบคำถามแน่นอนจะได้รับการชื่นชมอย่างมาก

3
สามารถแยกความแตกต่างจากการรวมเข้ากับอะไรก็ได้หรือไม่?
เป็นวิธีการรวมIS DISTINCT FROMกับpostgres ANYหรือวิธีอื่น ๆ ที่เป็นระเบียบเพื่อให้ได้ผลลัพธ์เดียวกันหรือไม่? select count(*) from (select 'A' foo union all select 'Z' union all select null) z where foo <> any(array[null, 'A']); count ------- 1 (1 row) select count(*) from (select 'A' foo union all select 'Z' union all select null) z where foo is distinct …

7
ทำไม PostgreSQL 9.3 จะไม่เริ่มทำงานบน Ubuntu
ฉันได้ติดตั้ง PostgreSQL 9.3 สำเร็จแล้วจากที่เก็บ APT บน Ubuntu 12.04 และ 13.04 ที่รันบน VM 2 อย่างไรก็ตามฉันไม่สามารถติดตั้งบนเครื่องโฮสต์ที่ใช้ Ubuntu 12.04 ได้ ดูเหมือนว่าการติดตั้ง (ในครั้งนี้) จะใช้ได้ แต่อาจมีข้อผิดพลาดที่ฉันไม่เข้าใจ: * No PostgreSQL clusters exist; see "man pg_createcluster" Setting up postgresql-9.3 (9.3.0-2.pgdg12.4+1) ... Creating new cluster 9.3/main ... config /etc/postgresql/9.3/main data /var/lib/postgresql/9.3/main locale en_US.UTF-8 port 5432 update-alternatives: using /usr/share/postgresql/9.3/man/man1/postmaster.1.gz …

2
ได้รับประโยชน์จากสคีมาทั้งหมดในฐานข้อมูลหรือไม่
ฉันต้องการGRANT USAGEผู้ใช้ / บทบาทสำหรับฐานข้อมูลที่กำหนด ฐานข้อมูลมีสกีมาจำนวนมาก ฉันรู้ว่ามีON ALL TABLES IN SCHEMAแต่ฉันต้องการ "schemas ทั้งหมด" ฉันพยายามGRANT USAGE .. ON DATABASEแต่ก็เห็นได้ชัดว่าผิด (มันไม่มีอยู่จริง ) นี่สำหรับ Postgres 9.3 หรือ 9.4 มันเป็นเซิร์ฟเวอร์ที่อยู่บน AWS RDS

1
ฉันจะย้ายพื้นที่ตาราง PostgreSQL ได้อย่างไร
มีวิธีที่จะย้ายร่างกาย PostgreSQL 9.3 ตารางจาก/old/dirไป/new/dir? ฉันต้องการเพียงแค่mvไดเรกทอรีและบอกว่า PostgreSQL /new/dirตารางอยู่ในขณะนี้อยู่ที่ ดูเหมือนว่าALTER TABLESPACEให้คุณเปลี่ยนชื่อได้เท่านั้น ฉันต้องการหลีกเลี่ยงการสร้างพื้นที่ตารางใหม่และย้ายฐานข้อมูลไป ฉันคิดว่าจะเป็นกระบวนการคัดลอกช้าที่ต้องใช้เวลาและพื้นที่ดิสก์ ฉันยังต้องการที่จะหลีกเลี่ยง symlinking ไป/old/dir/new/dir

1
การจัดเก็บและการสืบค้นข้อมูลการกลิ้งใน PostgreSQL
ฉันมีข้อมูลโมเดลสภาพอากาศจำนวนมากถูกใส่ลงในฐานข้อมูล PostgreSQL เครื่องมี 8 คอร์และ RAM 16 GB ฉันใช้ PostgreSQL 9.3 กับ PostGIS 2.1 แต่ละตารางจะมีข้อมูลสภาพอากาศที่แตกต่างกัน (อุณหภูมิจุดน้ำค้างลม ฯลฯ ) แต่ละตารางจะมีคอลัมน์ 6-7 คอลัมน์: ละติจูดลองจิจูดลองจิจูดเรขาคณิตระดับความสูงวันที่และเวลาที่แบบจำลองนั้นเกี่ยวข้องและค่าข้อมูลที่น่าสนใจ 1-2 รายการ ข้อมูลจะถูกสอบถามเป็นหลักสำหรับกล่อง bounding ตามเวลาและระดับความสูง จะมีประมาณ 145,757,360 แถวต่อตาราง (ข้อมูลที่เก่ากว่าตอนนี้จะไม่ถูกลบอีกต่อไป) ฉันประมาณขนาดของตารางโดยประมาณประมาณ 10 GB โดยไม่มีดัชนี (นั่นคือข้อมูล 52 ไบต์บวก 23 ไบต์ค่าใช้จ่ายต่อแถว) ข้อมูลจะถูกอัปเดต / แทรกเป็นประจำเมื่อมีข้อมูลโมเดลใหม่ บันทึก: ดังนั้นฉันดูที่แผนสองข้อนี้: เพียงจัดทำดัชนีและจัดกลุ่มตาม (วันที่และเวลา, ระดับความสูง) พร้อมดัชนีเพิ่มเติมสำหรับรูปทรงเรขาคณิตของจุด รันงาน …

1
ปรับ PostgreSQL ให้เหมาะสมที่สุดสำหรับการปรับปรุง INSERTS และ bytea มากมาย
สิ่งที่เรามี (ซอฟต์แวร์): PostrgeSQL 9.3พร้อมการกำหนดค่าพื้นฐาน (ไม่มีการเปลี่ยนแปลงpostgresql.conf) Windows 7 64 บิต ฮาร์ดแวร์: Intel Core i7-3770 3.9 Ghz RAM 32 Gb WDC WD10EZRX-00L4HBAta ไดรฟ์ (1000Gb, SATA III) ดังนั้นเราต้องโหลดลงใน DB aprox 100.000.000แถวที่มีbyteaคอลัมน์และง่ายขึ้น500.000.000แถว (โดยไม่ LOBs) มี 2 varcharดัชนีในตารางที่ 1 (ความยาว 13, 19) และ 2 varcharดัชนีในตารางที่ 2 (18, 10 ความยาว) นอกจากนี้ยังมีลำดับสำหรับการสร้าง id สำหรับแต่ละตาราง ในตอนนี้การดำเนินการเหล่านี้กำลังทำอยู่กับการเชื่อมต่อ 8 แบบขนานกับขนาดแบตช์ …

1
postgres - pg_dump และ pg_restore ที่ไม่มีบทบาท
ฉันพยายามกู้คืนดัมพ์โดยไม่มีบทบาทที่เหมาะสมในฐานข้อมูลการรับ ดังที่กล่าวไว้ที่นี่แต่ที่นี่คุณต้องมี--no-ownerตัวเลือกไม่ว่าจะในpg_dumpหรือpg_restoreหรือทั้งสองอย่าง ฉันใช้บรรทัดคำสั่งต่อไปนี้เพื่อสร้างการถ่ายโอนข้อมูลของฉัน "C:\Program Files\PostgreSQL\9.3\bin\pg_dump.exe" --no-owner -Ft --dbname=postgresql://avo******:AV0******?@127.0.0.1:5432/BI_DB > K:\BI\backup\sort\bck_%timestamp%.tar บรรทัดการกู้คืนมีดังนี้ "C:\Program Files\PostgreSQL\9.3\bin\pg_restore.exe" --host localhost --port 5432 --username "postgres" --dbname "BI_TEST2" --no-password --no-owner --role=postgres --exit-on-error --verbose "D:\D\avo\backup\bck_04042017_1410.tar" อย่างที่คุณเห็นทั้งสองมี--no-ownerตัวเลือก แต่ในที่สุดฉันมีข้อผิดพลาดด้านล่าง สิ่งที่เลวร้ายมากที่ทำให้ฉันเป็นบันทึกด้านล่าง pg_restore: [programme d'archivage (db)] Erreur pendant le traitement de la TOC (« PROCESSING TOC ») : pg_restore: [programme d'archivage (db)] …

2
วิธีรับบริบทข้อยกเว้นสำหรับข้อยกเว้นที่ยกขึ้นด้วยตนเองใน PL / pgSQL
ใน Postgres เราได้รับ "การติดตามสแต็ก" ของข้อยกเว้นโดยใช้รหัสนี้: EXCEPTION WHEN others THEN GET STACKED DIAGNOSTICS v_error_stack = PG_EXCEPTION_CONTEXT; มันใช้งานได้ดีสำหรับข้อยกเว้น "ธรรมชาติ" แต่ถ้าเราใช้ข้อยกเว้น RAISE EXCEPTION 'This is an error!'; ... จากนั้นไม่มีการติดตามสแต็ก ตามรายการส่งเมล์นี่อาจเป็นการจงใจแม้ว่าฉันจะทำไม่ได้สำหรับชีวิตของฉันก็หาสาเหตุ มันทำให้ผมอยากจะคิดหาวิธีอื่นที่จะโยนยกเว้นอื่น ๆ RAISEกว่าการใช้ ฉันเพิ่งจะเห็นบางสิ่งบางอย่างที่ชัดเจนหรือไม่? ไม่มีใครมีเคล็ดลับสำหรับเรื่องนี้? มีข้อยกเว้นที่ฉันสามารถให้ Postgres ขว้างได้ซึ่งจะมีสตริงที่ฉันเลือกไว้ดังนั้นฉันจะได้รับไม่เพียง แต่สตริงของฉันในข้อความแสดงข้อผิดพลาด แต่การติดตามสแต็กเต็มเช่นกัน? นี่คือตัวอย่างเต็มรูปแบบ: CREATE OR REPLACE FUNCTION error_test() RETURNS json AS $$ DECLARE v_error_stack text; …

1
การตรวจสอบข้อมูลโต้ตอบกับการจำลองแบบสตรีมได้อย่างไร
การตรวจสอบข้อมูลเป็นคุณลักษณะใหม่ที่นำเสนอใน 9.3 และ: มีพารามิเตอร์ GUC ใหม่ "ign_checksum_failure" ซึ่งจะบังคับให้ PostgreSQL ดำเนินการประมวลผลธุรกรรมต่อไปแม้ว่าจะตรวจพบความเสียหาย ในกรณีที่ความล้มเหลวในการตรวจสอบบนต้นแบบการจำลองข้อมูลที่เสียหายจะถูกทำซ้ำเป็นทาสหรือจะหยุดการจำลองแบบ มันขึ้นอยู่กับการตั้งค่าของignore_checksum_failure? นี้ README มีข้อมูลที่เกี่ยวข้องที่มีประโยชน์บาง แต่ไม่ได้โดยตรงตอบคำถาม

1
เหตุใด CTE จึงเลวร้ายยิ่งกว่าข้อความค้นหาย่อยแบบอินไลน์
ฉันพยายามเข้าใจวิธีการทำงานของตัววางแผนคิวรีใน postgresql ฉันมีคำถามนี้: select id from users where id <> 2 and gender = (select gender from users where id = 2) order by latest_location::geometry <-> (select latest_location from users where id = 2) ASC limit 50 มันทำงานในเวลาน้อยกว่า 10ms ในฐานข้อมูลของฉันด้วยรายการประมาณ 500k ในตารางผู้ใช้ จากนั้นฉันคิดว่าเพื่อหลีกเลี่ยงการเลือกย่อยที่ซ้ำกันฉันสามารถเขียนแบบสอบถามเป็น CTE อีกครั้งเช่นนี้ with me as ( select …

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