Cơ sở dữ liệu đặc biệt, postgres, để làm gì?


18

Tôi có một máy chủ PostgreSQL với một số cơ sở dữ liệu đang chạy trên nó. Một trong những cơ sở dữ liệu được gọi postgres, và nó đã có ngay từ đầu. Tôi không thể thấy bất kỳ bảng nào bên trong và tôi chưa bao giờ sử dụng nó một cách rõ ràng, nhưng tôi nhận thấy rằng bất kỳ người dùng nào cũng được phép tạo các bảng trong cơ sở dữ liệu (đây không phải là điều tôi muốn - tôi không muốn bất kỳ người dùng nào ngoại trừ quản trị viên tạo bất kỳ bảng ở bất cứ đâu).

Tôi có cảm giác rằng đó là một loại cơ sở dữ liệu đặc biệt cần thiết cho hoạt động bình thường của máy chủ, nhưng mục đích chính xác của nó là gì? Loại dữ liệu nào (hoặc có thể) được lưu trữ bên trong? Liệu nó có chứa siêu dữ liệu về các cơ sở dữ liệu khác (ví dụ information_schema:?). Có thể một cái gì đó khó chịu xảy ra, nếu tôi thu hồi connectđặc quyền cho cơ sở dữ liệu này từ công chúng? Hoặc nếu tôi thậm chí thả nó?

Tôi đã googled trong nửa giờ, nhưng luôn có những thứ hoàn toàn không liên quan, bởi vì từ postgresnày cũng được sử dụng cho người dùng postgresvà chính DBMS.

Câu trả lời:


31

Không có gì đặc biệt về nó. Như được mô tả trong tài liệu PostgreSQL, Tạo cơ sở dữ liệu , bạn cần được kết nối với cơ sở dữ liệu để tạo một cơ sở dữ liệu khác:

Vì bạn cần được kết nối với máy chủ cơ sở dữ liệu để thực thi CREATE DATABASElệnh, câu hỏi vẫn là cách cơ sở dữ liệu đầu tiên tại bất kỳ trang web cụ thể nào có thể được tạo. Cơ sở dữ liệu đầu tiên luôn được tạo bởi initdblệnh khi vùng lưu trữ dữ liệu được khởi tạo. (Xem Phần 17.2.) Cơ sở dữ liệu này được gọi postgres. Vì vậy, để tạo cơ sở dữ liệu "thông thường" đầu tiên bạn có thể kết nối postgres.

và trong Cơ sở dữ liệu Mẫu :

Lưu ý: template1template0không có bất kỳ trạng thái đặc biệt nào ngoài thực tế rằng tên đó template1là tên cơ sở dữ liệu nguồn mặc định cho CREATE DATABASE. Ví dụ, người ta có thể thả template1và tạo lại nó từ template0mà không có bất kỳ hiệu ứng xấu nào. Quá trình hành động này có thể được khuyến khích nếu một người bất cẩn thêm một đống rác vào template1. (Để xóa template1, nó phải có pg_database.datistemplate = false.)

postgressở dữ liệu cũng được tạo khi một cụm cơ sở dữ liệu được khởi tạo. Cơ sở dữ liệu này có nghĩa là cơ sở dữ liệu mặc định cho người dùng và ứng dụng kết nối. Nó chỉ đơn giản là một bản sao template1có thể được loại bỏ và tái tạo nếu cần thiết.


3
Vâng. Trong thực tế, bạn thường để trống và không thay đổi như một nơi thuận tiện để kết nối. Đây thực sự là một mụn cóc trong PostgreSQL, hậu quả của việc PostgreSQL không cho phép bạn kết nối với "không có cơ sở dữ liệu cụ thể" như các DBMS khác làm.
Craig Ringer

1
Cảm ơn rất nhiều, đây là một câu trả lời tốt! Tôi đã từ chối quyền truy cập của người dùng công cộng postgresvà mọi thứ vẫn hoạt động, ngoại trừ một điều: pgAdmin III không kết nối nữa trừ khi tôi chỉ định cơ sở dữ liệu được nhắm mục tiêu trong Maintenance DBtrường. Có vẻ như nó được sử dụng để kết nối với postgrescơ sở dữ liệu trước đó.
R Kiselev

@RKiselev Vâng, nó hoạt động như vậy. Giống như ypercube đã viết, đó là cơ sở dữ liệu mặc định để kết nối.
Marcin S.

1
PGadmin có tài sản "bảo trì cơ sở dữ liệu". Chỉ cần thay đổi nó thành db của bạn mà bạn muốn kết nối
Sahap Asci

@RKiselev: Giới thiệu về pgAdmin và "cơ sở dữ liệu bảo trì" của nó: Bảo trì DB được hỏi bởi pgAdmin là gì?
Erwin Brandstetter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.