มีวิธีแสดงคำสั่งการสร้างสำหรับดัชนีใน PostgreSQL


14

ฉันต้องสร้างดัชนีใหม่ใน PostgreSQL ซึ่งได้รับความเดือดร้อนดัชนีขยายตัว เนื่องจากฉันต้องการให้ดัชนีใช้งานได้ในขณะที่กำลังสร้างฉันไม่สามารถใช้ REINDEX ได้ ฉันจะสร้างดัชนีใหม่ด้วยชื่อใหม่แล้วปล่อยดัชนีเก่า มีวิธีใดบ้างที่จะเห็นคำสั่ง SQL ที่ใช้สร้างดัชนีเพื่อให้ฉันสามารถคัดลอกได้?



1
อย่าลืมเพิ่มCONCURRENTLYไปยังCREATE INDEXคำสั่งดังนั้นคุณไม่ต้องล็อกแบบเอกสิทธิ์เฉพาะบุคคลบนตาราง
Craig Ringer

คำตอบ:


26

มีจริงเพียงสอบถามpg_indexesมุมมองแคตตาล็อกระบบดังต่อไปนี้:

SELECT indexdef FROM pg_indexes WHERE indexname = '...'

และคุณควรกลับคำสั่ง SQL ที่ใช้เพื่อกำหนด


4
โปรดทราบว่าชื่อดัชนีจะไม่ซ้ำกันต่อสคีมาเท่านั้น AND schemaname = 'myschema'คุณอาจต้องการที่จะเพิ่ม
Erwin Brandstetter

0

ใช่คำสั่ง SQL แบบเต็มเพื่อสร้างดัชนีอยู่ในแคตตาล็อกระบบ วิธีที่ง่ายที่สุดที่ฉันนึกได้คือใช้ pg_dump / pg_restore:

$ pg_dump -F c | pg_restore -I <your_index_name>

4
ถ้าฐานข้อมูลมีขนาดใหญ่นี้สามารถเป็น overkill :) คุณอาจต้องการเพิ่มจะไม่รวมข้อมูลและถ้ารู้จักกันในชื่อของตารางที่มี-s -t
dezso


-1

indexdefยังคงไม่เหมือนกันกับคำสั่งการสร้างในกรณีของดัชนีบางส่วน ตัวอย่างเช่นถ้าเราสร้างดัชนีด้วยคำสั่งต่อไปนี้: CREATE INDEX item_orgunit_idx ON items (orgunit_id) WHERE type IN ('invoice', 'purchaseorder', 'beanpayment');

postgres จะสร้าง indexdef ต่อไปนี้: CREATE INDEX item_orgunit_idx ON public.items USING btree (orgunit_id) WHERE ((type)::text = ANY ((ARRAY['invoice'::character varying, 'purchaseorder'::character varying, 'beanpayment'::character varying])::text[]))

แม้ว่า postgres indexdef มีประเภทที่อนุมานทั้งหมดและน่าจะดีกว่า ORM ของเรากำลังเปรียบเทียบดัชนีสองรายการโดยที่ clause และคิดว่ามันแตกต่างกันเมื่อเราสร้างสคริปต์การย้ายข้อมูล ซึ่งเป็นปัญหาสำหรับเรา


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