teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

少し加筆

2021/12/11 03:25

投稿

退会済みユーザー
answer CHANGED
@@ -15,4 +15,23 @@
15
15
  指定を省くことで、たまたまそのシェル上でデフォルトとされているもの、
16
16
  ローカルホスト、5432ポート、デフォルトのデータベース、シェル上のユーザー名をつかってつなごうとします。
17
17
  デフォルトの設定を与えるやり方はいくつもあるため、気になる場合には
18
- [第33章 libpq — C ライブラリ](https://www.postgresql.jp/document/13/html/libpq.html)の33.14. 環境変数 以降をチェックすると良いかもしれません。
18
+ [第33章 libpq — C ライブラリ](https://www.postgresql.jp/document/13/html/libpq.html)の33.14. 環境変数 以降をチェックすると良いかもしれません。
19
+
20
+ データベースに保持されるデータはテーブルに格納されますが、
21
+ データベース内でスキーマという概念があり、スキーマの下にテーブル(やビュー)があります。
22
+ 何もしなくてもpublicというスキーマがあって、スキーマを指定しない場合はpublicが使われます。
23
+ [5.9. スキーマ](https://www.postgresql.jp/document/13/html/ddl-schemas.html)によると、
24
+ > スキーマの使用が好まれる理由はいくつかあります。
25
+ >
26
+ > ・1つのデータベースを多数のユーザが互いに干渉することなく使用できるようにするため。
27
+ > ・管理しやすくなるよう、データベースオブジェクトを論理グループに編成するため。
28
+ > ・サードパーティのアプリケーションを別々のスキーマに入れることにより、他のオブジェクトの名前と競合しないようにするため。
29
+ >
30
+ > スキーマは、入れ子にできないという点を除き、オペレーティングシステムのディレクトリと似ています。
31
+
32
+ という特徴があるので、使い方によってはデータベースが一つでもスキーマで分けておくことで
33
+ 同じ名前のテーブル(やビュー)が組める使い方が出来ます。
34
+ 便宜的に、データベースに接続するユーザー名(ロール)を使ってスキーマ名に流用するケースがあります。
35
+
36
+ データベースを分けてしまうと、複数のデータベースを横断するクエリーは成り立ちません。
37
+ 逆に言うと、データベースを分けてしまえば干渉することなく管理できるとも言えます。