postgresql: ฉันจะถ่ายโอนและกู้คืนบทบาทสำหรับคลัสเตอร์ได้อย่างไร


27

บทบาทถูกเก็บไว้ในคลัสเตอร์ที่ไหนและฉันจะถ่ายโอนข้อมูลได้อย่างไร

ฉันทำ pg_dump ของ db แล้วโหลดลงในคลัสเตอร์อื่น แต่ฉันได้รับข้อผิดพลาดมากมาย:

psql:mydump.sql:3621: ERROR:  role "myrole" does not exist 

เห็นได้ชัดว่าการถ่ายโอนข้อมูลของฐานข้อมูลของฉันไม่รวมถึงบทบาท ฉันพยายามทิ้ง db 'postgres' แต่ฉันไม่เห็นบทบาทที่นั่นเช่นกัน

ฉันจำเป็นต้องใช้pg_dumpall --roles-onlyหรือไม่

Postgresql รุ่น 8.4.8 และ 9.1.4 ระบบปฏิบัติการ: Ubuntu 11.04 Natty

คำตอบ:


37

จากCREATE ROLEเอกสาร :

โปรดทราบว่าบทบาทจะถูกกำหนดในระดับคลัสเตอร์ฐานข้อมูลและใช้ได้ในฐานข้อมูลทั้งหมดในคลัสเตอร์

เนื่องจากpg_dumpดัมพ์ฐานข้อมูลเดียวคุณไม่สามารถแยกบทบาทด้วยยูทิลิตีนั้นได้ pg_dumpall --roles-onlyคำสั่งที่คุณนำเสนอจะทำผลงาน - แต่คุณอาจต้องกรองเอาท์พุทเพื่อให้บทบาทที่ต้องการจะถูกสร้างขึ้นในกลุ่มใหม่

บทบาทจะถูกเก็บไว้ในpg_authidแค็ตตาล็อกซึ่งถูกเก็บไว้ในdata/global/โฟลเดอร์ย่อยของการติดตั้ง PostgreSQL ร่วมกับตารางทั่วทั้งคลัสเตอร์อื่น ๆ คุณสามารถค้นหาเนื้อหาของpg_authidผ่านpg_rolesมุมมอง

หมายเหตุ : คุณจะต้องมีสิทธิ์ superuser ในการถ่ายโอนบทบาท มิฉะนั้นคุณจะได้รับสิทธิ์ปฏิเสธSELECTบนpg_authid- และแม้กระทั่งเมื่อ superuser มอบSELECTสิทธิคุณจะได้รับข้อผิดพลาดเดียวกัน ในกรณีนี้คุณสามารถแสดงรายการบทบาทโดยการสอบถามpg_authidโดยตรงCOPYไปยังไฟล์และหมุนเวทย์มนตร์เพื่อสร้างความจำเป็นCREATE ROLEและALTER ROLEคำสั่ง


คุณสามารถเพิ่มวิธีคืนค่าบทบาททั้งหมด (เช่นไม่จำเป็นต้องมีการกรอง)
อีธานเฟอร์แมน

1
เพื่อเรียกคืนบทบาททั้งหมดเพียงแค่คัดลอกและวางเอาต์พุตของpg_dumpall --roles-onlyลงในเชลล์ psql ที่ต้องการ หรือเฉพาะเจาะจงCREATE ROLEและALTER ROLEสาย
เฟอร์นันโด Fabreti
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.