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

PostgreSQL เวอร์ชั่น 9.1

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
การกู้คืนฐานข้อมูล Postgres: pg_restore -vs- เพียงแค่ใช้ psql
ฉันกำลังทิ้งฐานข้อมูล Postgres ของฉันโดยใช้pg_dump (ในรูปแบบข้อความล้วน) แล้วกู้คืนได้อย่างง่ายดายโดยใช้psql (พร้อม-fตัวเลือก) คำถามใดที่ฉันถามว่า: ฉันหายไปโดยไม่ใช้pg_restoreซึ่งดูเหมือนว่าเป็นเครื่องมือกู้คืนแบบพิเศษ (เทียบกับทั่วไปpsql)? ฉันสามารถควบคุมตัวเลือกต่าง ๆ เช่นการปิดใช้งานทริกเกอร์และเช่นนั้นโดยใช้pg_dumpพารามิเตอร์ ถ้าเช่นนั้นจะpg_restoreใช้ทำอะไร รูปแบบการถ่ายโอนข้อมูลที่ไม่ใช่ข้อความธรรมดา?

5
ฉันจะสร้างผู้ใช้แบบอ่านอย่างเดียวสำหรับการสำรองข้อมูลใน PostgreSQL ได้อย่างไร
เป็นความจริงหรือไม่ที่เป็นไปไม่ได้ที่จะสร้างผู้ใช้สำรองข้อมูลแบบอ่านอย่างเดียวใน PostgreSQL ฉันได้รับคำแนะนำเกี่ยวกับช่อง IRC ว่าคุณไม่สามารถมีผู้ใช้สำรองข้อมูลเท่านั้นที่ไม่มีสิทธิ์การเป็นเจ้าของ ฉันพบว่ามันแปลกมากดังนั้นฉันจึงต้องการให้แน่ใจว่าฉันจะไม่พลาดบางสิ่งบางอย่าง ด้านล่างเป็นสิ่งที่ฉันพยายาม แต่ไม่ได้ให้ผลลัพธ์ที่ฉันต้องการ เมื่อฉันทำpg_dumpบนโต๊ะที่กำหนดฉันได้รับPermission denied for relation...: GRANT SELECT ON ALL TABLES IN SCHEMA public TO backup; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO backup; GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA public TO backup; ALTER DEFAULT PRIVILEGES IN SCHEMA …

1
จะใช้การเข้ารหัส aes ใน PostgreSQL ได้อย่างไร
ฉันลองเข้ารหัส aes โดยใช้ข้อความต่อไปนี้: SELECT encrypt('test', 'key', 'aes'); ซึ่งใช้งานได้ แต่ฉันไม่สามารถถอดรหัสค่าได้ ฉันใส่มันลงในเขตข้อมูลชนิดข้อมูลไบต์แต่ฉันไม่แน่ใจว่าเป็นวิธีที่ถูกต้องหรือไม่ SELECT decrypt(pw, 'key', 'aes') FROM table WHERE ID = 1; ทำให้ฉันมีข้อผิดพลาด ข้อผิดพลาด: ถอดรหัสฟังก์ชัน (bytea, ไม่ทราบ, ไม่ทราบ) ไม่มีอยู่ บรรทัดที่ 1: เลือกตัวถอดรหัส (pw, 'key', 'aes') จาก tabelle WHERE ID = 7; ^ คำแนะนำ: ไม่มีฟังก์ชันที่ตรงกับชื่อและประเภทอาร์กิวเมนต์ที่กำหนด คุณอาจจำเป็นต้องเพิ่ม casts ประเภทชัดเจน นั่นหมายความว่าการเข้ารหัส () เป็นฟังก์ชั่นที่มีอยู่ แต่ไม่ถอดรหัส () …

1
log_min_duration_statement การตั้งค่าจะถูกละเว้น
ฉันกำลังทำงานPostgresql 9.1บน Ubuntu รุ่น Postgresql ที่แน่นอน9.1+129ubuntu1เป็นตัวจัดการแพคเกจของฉันแสดง ฉันมี 2 ฐานข้อมูลที่ใช้งานอยู่และถูกใช้จากเซิร์ฟเวอร์ระยะไกล ฉันต้องการบันทึกการสืบค้นที่มีเวลาดำเนินการนาน ดังนั้นฉันจึงตั้งค่าพารามิเตอร์ต่อไปนี้ใน/etc/postgresql/9.1/main/postgresql.confไฟล์ log_min_duration_statement = 10000 log_statement = 'mod' ดังนั้น Postgresql จะบันทึกการสืบค้นที่ใช้เวลานานกว่า 10 วินาที แต่เมื่อฉันreloadกำหนดค่า postgres, Postgresql เริ่มบันทึกทุกแบบสอบถามที่เหมาะกับlog_statementค่า ที่ฉันตั้งค่าระยะเวลาเป็น 100 วินาทีเพื่อให้แน่ใจ log_min_duration_statement = 100000 แต่ Postgresql จะทำการบันทึกทุกข้อความค้นหาที่ตรงกับlog_statementค่าโดยไม่คำนึงถึงlog_min_duration_statementคุณค่า การตั้งค่าlog_statementที่จะnoneลำบากในการเข้าสู่ระบบหยุด มีบางอย่างที่ฉันพลาดเกี่ยวกับการกำหนดค่าหรือไม่

2
PostgreSQL แตกต่างระหว่าง VACUUM FULL และ CLUSTER
ฉันมีตารางที่มีข้อมูลขนาด 200 GB และมีขนาด 180 GB โดยดัชนี 6 รายการ มันบวม 30% ดังนั้นฉันต้องการเรียกคืนพื้นที่ที่ไม่ต้องการครอบครอง มันเป็นคลัสเตอร์ในjob_id_idดัชนี x ดังนั้นเพื่อเรียกคืนพื้นที่ฉันต้องใช้clusterคำสั่งหรือvacuum fullคำสั่ง? ความแตกต่างระหว่างสองคำสั่งนี้คืออะไร? คือvacuum fullการสั่งซื้อตามคอลัมน์บางเช่นเดียวกับclusterคำสั่ง? ดัชนีถูกสร้างขึ้นใหม่ทั้งในคำสั่งหรือไม่? ในกรณีของฉันอันไหนจะเร็วกว่ากัน? เวอร์ชันของฐานข้อมูล PostgreSQL คือ 9.1

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
PostgreSQL: ไม่สามารถเปลี่ยนไดเรกทอรีเป็น / root ได้
ฉันพยายามที่จะคัดลอกตารางplanet_osm_polygonจากฐานข้อมูลหนึ่งไปยังอีกosm testฉันและดำเนินการsu postgrespg_dump ปัญหา:อย่างไรก็ตามฉันได้รับข้อผิดพลาดcould not change directory to "/root"และPassword:ปรากฏขึ้นสองครั้ง! มีวิธีการpg_dumpเมื่อเข้าสู่ระบบในฐานะroot? root@lalaland:~# su postgres postgres@lalaland:/root$ pg_dump -h localhost "osm" --table "public.planet_osm_polygon" | psql -h localhost "test" --table "staging.planet_osm_polygon" could not change directory to "/root" could not change directory to "/root" Password: Password: UPDATE ปัญหา # 2:ปรากฏว่าตารางจะถูกคัดลอกลงในสคีแม้ว่าฉันผ่านธงpublic --table="staging.planet_osm_polygon"ทำไมไม่ได้คัดลอกไปยังคีมาstaging?

3
ข้อผิดพลาดขนาดดัชนีสูงสุดของแถว
มีขอบเขตบนสำหรับarrayคอลัมน์หรือไม่? ฉันได้รับข้อผิดพลาดนี้เมื่อแทรกเข้าไปในฟิลด์อาร์เรย์ - PG::Error: ERROR: index row size 3480 exceeds maximum 2712 for index "ix_data" นี่คือคำนิยามตารางของฉัน - create table test_array(id varchar(50), data text[]); ALTER TABLE test_array ADD PRIMARY KEY (id); CREATE INDEX ix_data ON test_array USING GIN (data); ฉันต้องการดัชนีในฟิลด์อาร์เรย์เนื่องจากฉันกำลังทำการค้นหาบางอย่างกับมัน

2
อัลกอริทึมสำหรับการค้นหาคำนำหน้าที่ยาวที่สุด
ฉันมีสองตาราง สิ่งแรกคือตารางที่มีคำนำหน้า code name price 343 ek1 10 3435 nt 4 3432 ek2 2 ประการที่สองคือบันทึกการโทรพร้อมหมายเลขโทรศัพท์ number time 834353212 10 834321242 20 834312345 30 ฉันต้องการเขียนสคริปต์ที่ค้นหาคำนำหน้าที่ยาวที่สุดจากคำนำหน้าสำหรับแต่ละระเบียนและเขียนข้อมูลทั้งหมดนี้ไปยังตารางที่สามเช่นนี้ number code .... 834353212 3435 834321242 3432 834312345 343 สำหรับหมายเลข 834353212 เราจะต้องตัด '8' แล้วหารหัสที่ยาวที่สุดจากตารางคำนำหน้า 3435 เราจะต้องวางแรก '8' และคำนำหน้าจะต้องอยู่ในจุดเริ่มต้น ฉันแก้ไขงานนี้เมื่อนานมาแล้วด้วยวิธีที่ไม่ดีมาก มันเป็นสคริปต์ Perl ที่แย่มากซึ่งทำแบบสอบถามจำนวนมากสำหรับแต่ละเร็กคอร์ด สคริปต์นี้: ใช้หมายเลขจากตารางการโทรทำสตริงย่อยจากความยาว (หมายเลข) ถึง …

1
การเพิ่มคอลัมน์แบบ nullable ลงในตารางมีค่าใช้จ่ายมากกว่า 10 นาที
ฉันมีปัญหาในการเพิ่มคอลัมน์ใหม่ในตาราง ฉันพยายามเรียกใช้สองสามครั้ง แต่หลังจากผ่านไปนานกว่า 10 นาทีฉันตัดสินใจยกเลิกคิวรีเนื่องจากเวลาล็อค ALTER TABLE mytable ADD mycolumn VARCHAR(50); ข้อมูลที่เป็นประโยชน์: รุ่น PostgreSQL: 9.1 จำนวนแถว: ~ 250K จำนวนคอลัมน์: 38 จำนวนคอลัมน์ที่ nullable: 32 จำนวนข้อ จำกัด : 5 (1 PK, 3 FK, 1 UNIQUE) จำนวนดัชนี: 1 ประเภทระบบปฏิบัติการ: Debian Squeeze 64 ฉันพบข้อมูลที่น่าสนใจเกี่ยวกับวิธีที่ PostgreSQL จัดการคอลัมน์ที่ไม่มีค่า (ผ่าน HeapTupleHeader) การเดาครั้งแรกของฉันคือเนื่องจากตารางนี้มีคอลัมน์ที่สามารถ nullable ได้ 32 คอลัมน์ซึ่งมี 8 …

3
PostgreSQL สามารถใช้ null ในดัชนีได้หรือไม่
ฉันอ่านหนังสือเล่มนี้ซึ่งบอกว่า ฐานข้อมูลสันนิษฐานว่า Indexed_Col IS NOT NULL ครอบคลุมช่วงที่มีขนาดใหญ่เกินไปที่จะเป็นประโยชน์ดังนั้นฐานข้อมูลจะไม่ขับไปยังดัชนีจากเงื่อนไขนี้ ฉันจำได้ว่าหนังสือเล่มนี้มีความเก่าแก่กว่า 10 ปี แต่ได้รับการพิสูจน์แล้วค่อนข้างมีประโยชน์ - การใช้คำแนะนำที่รวบรวมได้จากหน้าเว็บของตนฉันได้เร่งแบบสอบถามขึ้นโดยปัจจัยที่สิบ นอกจากนี้ในการทำงานEXPLAIN ANALYZEในSELECTแบบสอบถามที่ฉันได้พบว่าไม่มีการจัดทำดัชนีของฉันจะถูกนำมาใช้แม้ในขณะที่สิทธิทั้งหมดที่พวกเขาควรจะเป็น ดังนั้นคำถามของฉันคือ: สมมติว่ามีตารางที่มีคอลัมน์ซึ่งคำจำกัดความของคอลัมน์รวมถึง "NOT NULL" และดัชนีที่มีอยู่ซึ่งครอบคลุมคอลัมน์นี้ดัชนีนี้จะถูกใช้ในแบบสอบถามของตารางนั้นซึ่งคอลัมน์เป็นส่วนหนึ่งของแบบสอบถามหรือไม่ ชอบ: CREATE TABLE my_table( a varchar NOT NULL ); CREATE INDEX ix_my_table ON my_table(a); SELECT a from my_table;

2
ค้นหา fulltext ช้าเนื่องจากการประมาณการแถวไม่ถูกต้องอย่างดุร้าย
ข้อความค้นหาแบบเต็มกับฐานข้อมูลนี้ (การเก็บตั๋วRT ( Request Tracker )) ดูเหมือนจะใช้เวลานานมากในการดำเนินการ ตารางสิ่งที่แนบ (มีข้อมูลแบบเต็ม) ประมาณ 15GB สคีมาฐานข้อมูลมีดังนี้ประมาณ 2 ล้านแถว: rt4 = # \ d + ไฟล์แนบ ตาราง "public.attachments" คอลัมน์ | ประเภท | ตัวดัดแปลง | จัดเก็บข้อมูล | ลักษณะ ----------------- + ----------------------------- + - -------------------------------------------------- ------ ---------- + + ------------- id | จำนวนเต็ม ไม่ใช่ null ค่าเริ่มต้น nextval …

2
แปลงหน่วยของการวัด
กำลังมองหาการคำนวณหน่วยการวัดที่เหมาะสมที่สุดสำหรับรายการของสารที่ให้สารในปริมาณหน่วยที่แตกต่างกัน (แต่เข้ากันได้) ตารางการแปลงหน่วย ตารางแปลงหน่วยจัดเก็บหน่วยต่าง ๆ และความเกี่ยวข้องของหน่วยเหล่านั้น: id unit coefficient parent_id 36 "microlitre" 0.0000000010000000000000000 37 37 "millilitre" 0.0000010000000000000000000 5 5 "centilitre" 0.0000100000000000000000000 18 18 "decilitre" 0.0001000000000000000000000 34 34 "litre" 0.0010000000000000000000000 19 19 "dekalitre" 0.0100000000000000000000000 29 29 "hectolitre" 0.1000000000000000000000000 33 33 "kilolitre" 1.0000000000000000000000000 35 35 "megalitre" 1000.0000000000000000000000 0 การเรียงลำดับตามค่าสัมประสิทธิ์แสดงให้เห็นว่าการparent_idเชื่อมโยงหน่วยรองกับตัวเลขที่เหนือกว่า ตารางนี้สามารถสร้างได้ใน PostgreSQL โดยใช้: …

3
เก็บสูตรไว้ในตารางและใช้สูตรในฟังก์ชัน
ฉันมีฐานข้อมูล PostgreSQL 9.1 ซึ่งเป็นส่วนหนึ่งที่จัดการค่าคอมมิชชั่นของตัวแทน ตัวแทนแต่ละรายมีสูตรการคำนวณของตนเองเพื่อรับค่าคอมมิชชั่น ฉันมีฟังก์ชั่นในการสร้างจำนวนค่าคอมมิชชันที่แต่ละตัวแทนควรได้รับ แต่มันเป็นไปไม่ได้ที่จะใช้เมื่อจำนวนตัวแทนเพิ่มขึ้น ฉันถูกบังคับให้ทำใบแจ้งยอดที่ยาวและรหัสซ้ำซึ่งทำให้ฟังก์ชั่นของฉันใหญ่มาก สูตรทั้งหมดมีตัวแปรคงที่: d .. วันทำงานในเดือนนั้น r .. โหนดใหม่ได้รับการรับรอง l .. คะแนนความภักดี s .. ค่านายหน้าย่อย b .. อัตราฐาน ฉัน .. รายได้ที่ได้รับ สูตรสามารถเป็นดังนี้: d*b+(l*4+r)+(i/d)+s แต่ละตัวแทนเจรจาสูตรการชำระเงินกับฝ่ายทรัพยากรบุคคล ดังนั้นฉันสามารถเก็บสูตรไว้ในตารางตัวแทนได้แล้วมีฟังก์ชั่นเล็ก ๆ ที่เพิ่งได้สูตรจากตารางและแปลมันด้วยค่าและคำนวณจำนวนหรือไม่

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