通常の作業では、私たちはしばしば接触する数据库表
と用户
だけでなく、角色
頻繁な使用するデフォルトの使用数据库表空间
と模式
私たちはコンセプトやデータベースのテーブルスペースとスキーマの役割を無視する傾向があるので、(スキーマ)。
次に、定義およびロールモデルとテーブルスペースについて教えてください。
スキーマとは何ですか?
一つ以上の名前付きモデルを含むデータベース、順番にテーブルが含まれています。モードは、他のデータを含むオブジェクト、含むことができ类型
、函数
、操作符
等が挙げられます。例えば、同一のオブジェクト名が異なるモードで衝突を引き起こすことなく使用することができるherschema
とmyschema
命名含有することができるmytable
テーブル。そして、データベース、モデルは厳密に分離ではありません。限り、あなたは許可を持っているように、ユーザーは、彼が接続された任意のパターンのデータベースオブジェクトにアクセスすることができます。私たちがモデルに必要な多くの理由があります。
- これは、複数のユーザが他のユーザに干渉することなくデータベースを使用することができます。
- データベースオブジェクトは、それらをより管理しやすくするために論理グループに編成されています。
- 彼らは紛争やその他のオブジェクトの名前がないので、サードパーティ製のアプリケーションは、異なるモードで配置することができます。
モードは、オペレーティングシステムレベルのディレクトリに類似しているが、パターンはネストすることができません。
表スペースとは何ですか?
実際のデータが格納されるテーブルスペースがあります。データベースは、schema
スペーステーブルは、複数であってもよく、同様に、表スペースの複数で存在することができるschema
サービス。
使用して表領域を、管理者がディスクのレイアウトを制御することができます。最も一般的な役割は、最も一般的に使用される指標の1つの非常に高速なハードディスク上に構築することができ、例えば、性能表スペースを最適化するために、あまり頻繁に使用されるテーブルは、このようなアーカイブのためのストアファイルについての安いハードドライブ、上に構築することが可能ですテーブル。
PostgreSQLの表領域、データベース、スキーマ、テーブル、ユーザー、役割との関係
ユーザーの役割との関係
でPostgreSQL
役割/ユーザー:途中、2つの混乱概念があります。これらの二つの理由概念は PostgreSQLのために、これはまったく同じ二つのオブジェクトであるため、簡単に、混乱。それが作成されたときの唯一の違いは次のとおりです。
1.私は、以下を使用psql
役割を作成するにはcustom
:
CREATE ROLE custom PASSWORD 'custom';
それから私は、カスタムログインの新しく作成された役割を使用し、PostgreSQLは情報を与えることを拒否しました。
FATAL:role 'custom' is not permitted to log in.
役割がログオンする権限を持っていないことを示す、システムが自分のログインを拒否します
2.私は、以下を使用しpsql
、ユーザーを作成するにはguest
:
CREATE USER guest PASSWORD 'guest';
それから私は、ログインが成功すると、ゲストログインを使用します
違いは、両方のはありますか?ビューの文書、および、そのような説明は:ユーザーがITとしての役割はLOGINをCREATE意味以外は、同じでIS CREATE。 ---- CREATE USER
デフォルト有することに加えてLOGIN
と、他の権限をCREATE ROLE
まったく同じ。
この文を確認するために、変更custom
の許可、増加のLOGIN
権限:
ALTER ROLE custom LOGIN;
再びcustom
ログイン、成功!だから、明確な物事:
ROLEカスタムパスワードを作成する「カスタム」LOGIN等同于USERカスタムパスワードを作成する「カスタム」。
これは、あるROLE/USER
違い。
リレーショナルデータベースとモデル
模式(schema)
これは、データベース(データベース)の論理的分割です。
データベースが作成されたが、それはデータベースのデフォルトのモードを作成している- public
これは、データベースのデフォルトのモードです。このデータベース用に作成されたすべてのオブジェクト(テーブル、関数、しようと、インデックス、シーケンスなど)は、このモードで作成されます。
データベース火星の作成1.
CREATE DATABASE mars;
2. custom
への役割のログmars
すべてのモデルのデータベースを参照するには、データベース:\ DN
結果は、のみを示しpublic
たモデルを。
テストテーブルを作成します3。
CREATE TABLE test(id integer not null);
4.現在のデータベースのリストを確認してください:\ D;
結果は、表示テーブルテストモードの一部であるpublic
。つまりtest
、テーブルは、デフォルトで作成されたパブリックモードの。
5.新しいモデルを作成してcustom
ログオンしているユーザーに対応します、custom
:
CREATE SCHEMA custom;
ALTER SCHEMA custom OWNER TO custom;
再作成6. test
テーブルを、この表には、モードを示すために
CREATE TABLE custom.test (id integer not null);
7.レビュー現在のデータベースのリスト:\ dは
結果を表に表示されているtest
モードに属しcustom
。これは、test
テーブルがで作成されるcustom模式
中間。
データベースがされている:それは、と結論付けモード(スキーマ)セグメンテーションに、データベースは、少なくとも一つのモードでは、すべての内部データベース・オブジェクト(オブジェクト)をモデルに作成されています。データベースに接続されたシステム、にユーザがログインした後、貫通データベースのsearch_pathは findするスキーマ検索順序を注文することができSHOW search_path
、特に順序もできSET search_path TO 'schema_name'
modified次です。
公式アドバイスはこれです:特定のデータベースを作成するには、管理者の後、データベースのすべてのユーザーに接続することができるはずのパターンを作成するために、ユーザー名と同じであり、そして、され
search_path
に設定$user
されている、デフォルトのモードは、ユーザー名と同じですモード。
表スペースとデータベース
データベース作成文:
CREATE DATABASE dbname;
デフォルトのデータベース所有者は、デフォルトの表スペースは、デフォルトの表スペース・システムで、データベースの現在の役割が作成されているpg_defaultテーブルがあります。
これはなぜでしょうか?
のでPostgreSQL
、データにより作成されたクローンのSQL Serverである、達成するために、データベースのテンプレートを同じメカニズムです。のでCREATE DATABASE dbname
、システムがクローンを作成するためにデフォルト設定されますので、それは、データベースのテンプレートを指定していないtemplate1
データベースを、新しいデータベースを取得しますdbname
。(デフォルトでは、新しいデータベースがします 、標準システムデータベースtemplate1を複製することによって作成されます)
template1
デフォルトのデータベース・テーブル・スペースがされpg_default
たデータベースを初期化するときに、表スペースが作成され、すべてのtemplate1
オブジェクトは、新しいデータベース内にクローニング同期されます。
比較的完全な構文は次のようになります。
CREATE DATABASE dbname TEMPLATE template1 TABLESPACE tablespacename;
ALTER DATABASE dbname OWNER TO custom;
接続1. template1
データベース、マーカーとしてテーブルを作成します。
CREATE TABLE test(id integer not null);
テーブルにデータを挿入します
INSERT INTO test VALUES (1);
2.表スペースを作成します。
CREATE TABLESPACE tsmars OWNER custom LOCATION '/tmp/data/tsmars';
これに先立ち、ディレクトリことを保証しなければならないの/ tmp /データ/ tsmarsが存在し、ディレクトリが空です。
3.データベースを作成し、データベースのテーブルスペースを作成したばかりさを指定tsmars
:
CREATE DATABASE dbmars TEMPLATE template1 OWNERE custom TABLESPACE tsmars;
ALTER DATABASE dbmars OWNER TO custom;
4. [すべてのデータベースについての情報:\ L +
見つけることができるdbmars
データベースのテーブルスペースでtsmars
、所有者ですcustom
。
慎重に分析した後、結論するのは簡単です:
PostgreSQLでは、表スペースは、それが含まれている様々なデータベースに格納されているディレクトリ、ある物理ファイルを。
概要
表スペース推奨されていないが、表スペース内の記憶領域は、PostgreSQLは、複数のデータベースに格納することができますが、我々はそう完全に実現可能なんです。データベースオブジェクト記憶テーブル構造の直接のような、しかし、少なくとも一つの論理データベースモデルで作成された知っている、モデルで作成されたテーブルおよび他の目的は、異なるパターンが異なる役割を割り当てられている、特権分離を達成することができるだけでなく、認可によって、スキーマ・オブジェクトの間で共有され、機能があります:公共モードは、オブジェクト我々アクセスするすべての必要性を保存することができます。
データベース内のオブジェクトの位置の表スペースは、物理ストレージデバイスを定義し、単一のデータベースに固有ではありません。物理的なデータベースは、データベース・オブジェクトの集合であり、schema
データベースオブジェクトの組織と管理のための内部データベースの論理的なセットで、スキーマの名前空間は、テーブル、インデックス、データ型、関数などのオブジェクトと接触する各種アプリケーションプログラムの下で、事業者などが挙げられます。
役割(ユーザー)は、クラスタ全体の著作権管理のさまざま内のすべてのオブジェクトのグローバルデータベースサーバー(クラスター)のアクセス制御システムです。役割は、単一のデータベースに固有ではありませんが、データベース管理システムをログに記録する必要がある場合は、役割がデータベースに接続する必要がありますので。役割は、データベース・オブジェクトの様々な構造を有することができます。
いいえ国民の関心ん:JAVAの半分の9つの教室を過ぎて、優れた技術ダニエルの数が、あるあなたのための方向性を提供し、リソースを提供!一緒に技術進歩を探求するためにご参加ください!最新の情報を入手2T「プロファイル」業界への返信!