ฐานข้อมูลพิเศษ“ postgres” มีไว้เพื่ออะไร?


18

ฉันมีเซิร์ฟเวอร์ PostgreSQL ที่มีฐานข้อมูลหลายตัวกำลังทำงานอยู่ ฐานข้อมูลหนึ่งถูกเรียกใช้postgresและมันอยู่ที่นั่นตั้งแต่เริ่มต้น ฉันไม่เห็นตารางใด ๆ ภายในและฉันไม่เคยใช้มันอย่างชัดเจน แต่ฉันสังเกตเห็นว่าผู้ใช้ทุกคนได้รับอนุญาตให้สร้างตารางภายในฐานข้อมูล (นี่ไม่ใช่สิ่งที่ฉันต้องการ - ฉันไม่ต้องการให้ผู้ใช้ยกเว้นผู้ดูแลระบบสร้าง ตารางใดก็ได้)

ฉันรู้สึกว่ามันเป็นฐานข้อมูลชนิดพิเศษบางอย่างที่จำเป็นสำหรับการทำงานปกติของเซิร์ฟเวอร์ แต่จุดประสงค์ของมันคืออะไร ข้อมูลประเภทใด (หรืออาจ) เก็บไว้ภายใน มันเก็บข้อมูลเมตาเกี่ยวกับฐานข้อมูลอื่น ๆ (เช่น the information_schema?) สิ่งที่น่ารังเกียจเกิดขึ้นหรือไม่ถ้าฉันเพิกถอนconnectสิทธิ์ในฐานข้อมูลนี้จากสาธารณะ หรือถ้าฉันวางมันลง?

ฉัน googled เป็นเวลาครึ่งชั่วโมง แต่มักจะมีสิ่งที่ไม่เกี่ยวข้องอย่างสมบูรณ์เพราะคำpostgresนี้ยังใช้สำหรับผู้ใช้postgresและ DBMS เอง

คำตอบ:


31

ไม่มีอะไรพิเศษเกี่ยวกับมัน ดังที่อธิบายไว้ในเอกสารประกอบ PostgreSQL การสร้างฐานข้อมูลคุณจะต้องเชื่อมต่อกับฐานข้อมูลเพื่อสร้างอีกหนึ่งฐานข้อมูล:

เนื่องจากคุณจำเป็นต้องเชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูลเพื่อดำเนินการCREATE DATABASEคำสั่งคำถามจึงยังคงเป็นวิธีการสร้างฐานข้อมูลแรกในไซต์ใดก็ตาม ฐานข้อมูลแรกจะถูกสร้างโดยinitdbคำสั่งเสมอเมื่อมีการเริ่มต้นพื้นที่เก็บข้อมูล (โปรดดูมาตรา 17.2.) postgresฐานข้อมูลนี้จะเรียกว่า ดังนั้นในการสร้างฐานข้อมูล "ธรรมดา" แรกที่คุณสามารถเชื่อมต่อpostgresได้

และในฐานข้อมูลแม่แบบ :

หมายเหตุ: template1และtemplate0ไม่ได้มีสถานะพิเศษใด ๆ ที่นอกเหนือจากความจริงที่ว่าชื่อที่เป็นชื่อแหล่งฐานข้อมูลเริ่มต้นสำหรับtemplate1 CREATE DATABASEตัวอย่างเช่นหนึ่งสามารถปล่อยtemplate1และสร้างใหม่template0โดยไม่มีผลกระทบใด ๆ template1หลักสูตรของการกระทำนี้อาจจะแนะนำให้เลือกถ้าใครเพิ่มลวกพวงของขยะใน (หากต้องการลบtemplate1จะต้องมีpg_database.datistemplate = false)

postgresฐานข้อมูลนอกจากนี้ยังสร้างขึ้นเมื่อคลัสเตอร์ฐานข้อมูลจะเริ่มต้นได้ ฐานข้อมูลนี้มีวัตถุประสงค์เพื่อเป็นฐานข้อมูลเริ่มต้นสำหรับผู้ใช้และแอปพลิเคชันที่จะเชื่อมต่อ มันเป็นเพียงแค่สำเนาtemplate1และสามารถทิ้งและสร้างใหม่ได้ถ้าจำเป็น


3
อ๋อ ในทางปฏิบัติโดยทั่วไปคุณควรปล่อยให้มันว่างเปล่าและไม่เปลี่ยนแปลงเป็นสถานที่ที่สะดวกในการเชื่อมต่อ นี่เป็นหูดใน PostgreSQL ซึ่งเป็นผลมาจากข้อเท็จจริงที่ว่า PostgreSQL ไม่อนุญาตให้คุณเชื่อมต่อกับ "ไม่มีฐานข้อมูลโดยเฉพาะ" เช่นเดียวกับที่ DBMS อื่นทำ
Craig Ringer

1
ขอบคุณมากนี่เป็นคำตอบที่ดี! ฉันปฏิเสธการเข้าถึงของผู้ใช้สาธารณะpostgresและทุกอย่างยังทำงานได้ยกเว้นสิ่งเดียว: pgAdmin III ไม่เชื่อมต่ออีกต่อไปเว้นแต่ฉันจะระบุฐานข้อมูลเป้าหมายในMaintenance DBฟิลด์ ดูเหมือนว่ามันเคยเชื่อมต่อกับpostgresฐานข้อมูลมาก่อน
R Kiselev

@RKiselev ใช่มันใช้งานได้ เช่นเดียวกับypercube ที่เขียนมันเป็นฐานข้อมูลเริ่มต้นที่จะเชื่อมต่อ
Marcin S.

1
Pgadmin มีคุณสมบัติ "ฐานข้อมูลการบำรุงรักษา" เพียงแค่เปลี่ยนเป็นฐานข้อมูลที่คุณต้องการเชื่อมต่อ
Sahap Asci

@RKiselev: เกี่ยวกับ pgAdmin และ "การบำรุงรักษาฐานข้อมูล": DB การบำรุงรักษาถามโดย pgAdmin อะไร?
Erwin Brandstetter
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.