PostgreSQLのスキーマ、テーブル、スペース、ユーザーとの関係の理解

通常の作業では、私たちはしばしば接触する数据库表用户だけでなく、角色頻繁な使用するデフォルトの使用数据库表空间模式私たちはコンセプトやデータベースのテーブルスペースとスキーマの役割を無視する傾向があるので、(スキーマ)。

次に、定義およびロールモデルとテーブルスペースについて教えてください。

スキーマとは何ですか?

一つ以上の名前付きモデルを含むデータベース、順番にテーブルが含まれています。モードは、他のデータを含むオブジェクト、含むことができ类型函数操作符等が挙げられます。例えば、同一のオブジェクト名が異なるモードで衝突を引き起こすことなく使用することができるherschemamyschema命名含有することができる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「プロファイル」業界への返信!

おすすめ

転載: www.cnblogs.com/noodlesmars/p/11850559.html