特別なデータベース「postgres」とは何ですか?


18

複数のデータベースが実行されているPostgreSQLサーバーがあります。データベースの1つはと呼ばpostgresれ、最初から存在していました。私は内部にテーブルを見ることができず、明示的に使用したことはありませんでしたが、すべてのユーザーがデータベース内にテーブルを作成することを許可されていることに気付きました(これは私が望むものではありません-管理者以外のユーザーに作成を望まない任意のテーブル)。

サーバーの通常の操作に必要なのは何らかの特殊なデータベースであると感じていますが、その目的は何ですか?どのようなデータが内部に格納されますか(または格納される可能性がありますか)?他のデータベースに関するメタデータを保持していinformation_schemaますか(例:?)。connectこのデータベースへの特権を公開から取り消すと、厄介なことが起こりますか?それとも私がそれを落とすなら?

私は30分間グーグルでpostgres検索postgresしましたが、単語はユーザーとDBMS自体にも使用されているため、常に完全に無関係なものを取得しました。

回答:


31

それについて特別なことは何もありません。PostgreSQLのドキュメントデータベースの作成で説明されているように、別のデータベースを作成するには、データベースに接続する必要があります。

CREATE DATABASEコマンドを実行するにはデータベースサーバーに接続する必要があるため、特定のサイトで最初のデータベースをどのように作成できるかという疑問が残ります。最初のデータベースはinitdb、データストレージエリアが初期化されるときに常にコマンドによって作成されます。(17.2項を参照)このデータベースはと呼ばれpostgresます。したがって、最初の「通常の」データベースを作成するには、に接続できますpostgres

およびテンプレートデータベース

注: template1またtemplate0、名前template1がのデフォルトのソースデータベース名であるという事実以外に、特別なステータスはありませんCREATE DATABASE。たとえば、悪影響を与えずにドロップtemplate1して再作成できますtemplate0。1つのジャンクを不注意に追加した場合、この一連の行動はお勧めですtemplate1。(削除するにはtemplate1、が必要pg_database.datistemplate = falseです。)

postgresデータベースは、データベースクラスタが初期化されたときにも作成されます。このデータベースは、ユーザーおよびアプリケーションが接続するためのデフォルトのデータベースです。これは単なるコピーでtemplate1あり、必要に応じて削除および再作成できます。


3
うん。実際には、通常は空のままにして、接続するのに便利な場所として変更しないでください。これは本当にPostgreSQLのいぼです。他のDBMSのようにPostgreSQLが「特にデータベースなし」に接続できないという事実の結果です。
クレイグリンガー

1
どうもありがとう、これは良い答えです!パブリックユーザーへのアクセスを拒否しましたがpostgres、1つを除いてすべてが引き続き機能します。pgAdminIIIは、Maintenance DBフィールドでターゲットデータベースを指定しない限り接続できません。postgres以前はデータベースに接続していたようです。
Rキセリョフ博士

@RKiselevええ、それはそのように動作します。ypercubeが書いたように、これは接続するデフォルトのデータベースです。
マーチンS.

1
Pgadminには「メンテナンスデータベース」プロパティがあります。ちょうどあなたが接続したいというあなたのdbに変更する
Sahap ASCI

@RKiselev:pgAdminとその「メンテナンスデータベース」について:pgAdminが要求するメンテナンスDBとは何ですか?
アーウィンブランドステッター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.