PostgreSQL 5.7. Schemasノート

2578 ワード

PostgreSQL 5.7. Schemasノート


https://www.postgresql.org/docs/9.4/ddl-schemas.html
A database contains one or more named schemas, which in turn contain tables. Schemas also contain other kinds of named objects, including data types, functions, and operators. The same object name can be used in different schemas without conflict; for example, both schema1 and myschema can contain tables named mytable. Unlike databases, schemas are not rigidly separated: a user can access objects in any of the schemas in the database he is connected to, if he has privileges to do so.
  • 1データベースには複数のschemaが含まれ、schemaにはtablesが含まれ、databaseの次の論理構造はschema
  • である.
  • schemaはまた、様々なobjects、data types、functions、operators
  • を含む.
  • 異なるschemのtable名は同じ
  • でよい
    新しいdatabaseを作成すると、PostgreSQLはpublicというschemaを自動的に作成します.search_が設定されていない場合path変数では、PostgreSQLは作成したすべてのオブジェクトをpublic schemaにデフォルトで配置します._
    schemaの使用によるメリット
  • は、複数のユーザが互いに干渉することなく1つのデータベースを使用することを可能にする、データ分離
  • .
  • は、
  • の管理を容易にするために、データベース・オブジェクトを論理グループに整理する.
  • サードパーティ製アプリケーションは、他のオブジェクトの名前と競合することなく、個別のモードに配置できます.

    5.7.1. Creating a Schema


    code example:
    CREATE SCHEMA myschema;

    schemaのテーブルへのアクセス
    schema.table

    実際、もっと一般的な文法は
    database.schema.table

    schemaでテーブルを作成する
    CREATE TABLE myschema.mytable (
     ...
    );

    空のschemaを削除
    DROP SCHEMA myschema;

    schemaを削除し、オブジェクトも削除します.
    DROP SCHEMA myschema CASCADE;

    ユーザーのschemaの作成
    CREATE SCHEMA schemaname AUTHORIZATION username;

    5.7.2. The Public Schema


    デフォルトで作成されたテーブルはpublic schemaにあります
    次の2つの文は等価です.
    CREATE TABLE products ( ... );
    CREATE TABLE public.products ( ... );

    5.7.3. The Schema Search Path

    SELECT * FROM dogsのような文を実行すると、PostgreSQLはどのschemaのテーブルを調べるかをどのように知っていますか?
    schema接頭辞を付けて解決することもできるし、search_path変数を設定して解決することもできる.
    表示
    SHOW search_path;
    search_path
    --------------
     "$user",public

    PostgreSQLには、現在ログインしているユーザーの名前を表す、あまり知られていないシステム変数がuserと呼ばれています.SELECT userを実行するとその名前が表示されます.
    search_についてpathの$userは、現在ログインしているロールがdoggyであれば、すべてのクエリーが優先されます.doggy schemaでターゲットテーブルを探します.見つからない場合はpublic schemaで探します.
    新しいschema逆search pathを設定
    SET search_path TO myschema,public;

    デフォルトのアクセスtableはmyschema schemaにあります