usausa000
@usausa000

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

SQLでテーブル名にpublicをつけるのはなぜですか?

Q&A

解決したいこと

SQLでテーブル名にpublicをつけるのはなぜですか?

自分で試したこと

ネットで調べたところ、スキーマ?だとか所属がpublicだからなど書いてありましたがよく理解できず。
また、DBによってつけないとエラーになったり、つけなくてもSQL文が通るものもあり、何が違うのでしょうか。

せめて調べ方のヒントだけでもいただけたら嬉しいです。

1

2Answer

SELECT name FROM public.products; のような public のことでしょうか。これは public スキーマproducts テーブルを読み込むことを表します。

この「スキーマ」は「データベーススキーマを設計する」などと言うときのような概念的な意味ではなく、データベースが持つ構造の名前です。 PostgreSQL では1つのデータベースクラスタに複数のスキーマがあり、各スキーマの中に複数のテーブルが入る形になっています。テーブルをファイルにたとえると、スキーマは親フォルダにあたるものです。

PostgreSQL では public スキーマが最初から存在し、スキーマ名を省略するとデフォルトでは public スキーマを指定したものと扱います。つまり SELECT name FROM products;SELECT name FROM public.products; と同じ意味になります。

ただし、スキーマ名を省略したときの扱いは設定で変更することができ、 public 以外のスキーマにしたり、接続したデータベースユーザーによって切り替えたりできます。この曖昧さが困る場合などには明示的に public スキーマを指定することがあります。

なお、 MySQL や Oracle DB などの他のデータベースシステムでは、システムごとにスキーマの仕組みや位置づけが違い、デフォルトで public スキーマが存在しなかったり、自動でユーザー名と同じスキーマが作られたりします。詳しくは各システムのマニュアルを読んでください。

4Like

Comments

  1. @usausa000

    Questioner

    丁寧に書いてくださってありがとうございます。DBによってはデフォルトをpublicとみなしてくれないまたは、別のスキーマ名が登録されているから、DB名を記載して明示しなさいと言われるということなんですね。(うまく言葉にできていなかったらすみません)
  2. そういうことですね。

Comments

  1. @usausa000

    Questioner

    PostgreSQLです。記載しておらず失礼いたしました。

Your answer might help someone💌