Untuk apa database khusus "postgres"?

18

Saya memiliki server PostgreSQL dengan beberapa database yang berjalan di atasnya. Salah satu database disebut postgres, dan itu ada di sana sejak awal. Saya tidak bisa melihat tabel apa pun di dalam dan saya tidak pernah menggunakannya secara eksplisit, tetapi saya perhatikan, bahwa setiap pengguna diizinkan untuk membuat tabel di dalam basis data (ini bukan yang saya inginkan - saya tidak ingin ada pengguna selain administrator yang membuat tabel apa saja di mana saja).

Saya punya perasaan bahwa itu adalah semacam database khusus yang diperlukan untuk operasi normal server, tetapi apa sebenarnya tujuannya? Jenis data apa (atau bisa) disimpan di dalam? Apakah itu menyimpan metadata tentang database lain (misalnya information_schema?). Bisakah sesuatu yang buruk terjadi, jika saya mencabut connecthak istimewa untuk database ini dari publik? Atau jika saya bahkan menjatuhkannya?

Saya mencari Google selama setengah jam, tetapi selalu mendapatkan hal-hal yang sama sekali tidak terkait, karena kata postgresitu juga digunakan untuk pengguna postgresdan DBMS itu sendiri.

R Kiselev
sumber

Jawaban:

31

Tidak ada yang istimewa tentang itu. Seperti yang dijelaskan dalam dokumentasi PostgreSQL, Membuat Database , Anda harus terhubung ke database, untuk membuat yang lain:

Karena Anda harus terhubung ke server database untuk mengeksekusi CREATE DATABASEperintah, pertanyaannya tetap bagaimana database pertama di situs tertentu dapat dibuat. Basis data pertama selalu dibuat oleh initdbperintah ketika area penyimpanan data diinisialisasi. (Lihat Bagian 17.2.) Basis data ini disebut postgres. Jadi untuk membuat database "biasa" pertama yang dapat Anda sambungkan postgres.

dan di Database Templat :

Catatan: template1 dan template0tidak memiliki status khusus apa pun selain fakta bahwa nama tersebut template1adalah nama basis data sumber default untuk CREATE DATABASE. Sebagai contoh, seseorang dapat menjatuhkan template1dan membuatnya kembali dari template0tanpa efek buruk. Tindakan ini mungkin disarankan jika seseorang dengan sembarangan menambahkan banyak sampah template1. (Untuk menghapus template1, harus ada pg_database.datistemplate = false.)

Basis postgresdata juga dibuat ketika cluster basis data diinisialisasi. Basis data ini dimaksudkan sebagai basis data default untuk terhubung dengan pengguna dan aplikasi. Ini hanyalah salinan template1dan dapat dijatuhkan dan diciptakan kembali jika perlu.

ypercubeᵀᴹ
sumber
3
Ya. Dalam praktiknya, Anda biasanya harus membiarkannya kosong dan tidak berubah sebagai tempat yang berguna untuk terhubung. Ini benar-benar kutil di PostgreSQL, konsekuensi dari kenyataan bahwa PostgreSQL tidak membiarkan Anda terhubung ke "tidak ada basis data khusus" seperti yang dilakukan DBMS lainnya.
Craig Ringer
1
Terima kasih banyak, ini jawaban yang bagus! Saya menolak akses pengguna publik ke postgresdan semuanya masih berfungsi, kecuali satu hal: pgAdmin III tidak terhubung lagi kecuali saya menentukan basis data yang dimuat di Maintenance DBlapangan. Tampaknya itu digunakan untuk terhubung ke postgresbasis data sebelumnya.
R Kiselev
@RKiselev Ya, itu berfungsi seperti itu. Sama seperti ypercube menulis, itu adalah basis data default untuk terhubung.
Marcin S.
1
Pgadmin memiliki properti "pemeliharaan database". Ubah saja ke db yang ingin Anda sambungkan
Sahap Asci
@RKiselev: Tentang pgAdmin dan "database pemeliharaan": Apa itu DB Pemeliharaan yang diminta oleh pgAdmin?
Erwin Brandstetter