PostgreSQL學習----模式schema

PostgreSQL學習---模式schema

小序

接觸PostgreSQL也有好長時間了,知識不總結梳理,彷佛總不是本身的,繼續努力吧少年!以此記錄個人軟件工藝之路!

模式(Schema)

一個 PostgreSQL 數據庫集羣 包含一個或多個命名的數據庫。用戶和用戶組在整個集羣的範圍內 是共享的,可是其它數據並非共享的。任何給定的與服務器的客戶鏈接都只 能訪問在一個數據庫裏的數據,就是那個在鏈接請求裏聲明的。sql

注意: 一個集羣的用戶並不必定要有訪問集羣內全部數據庫的權限。 共享用戶名的意思是不能有同名用戶,也就是,在同一個集羣裏的兩個 數據庫裏都有叫 joe 的用戶;可是系統能夠配置成 只容許 joe 訪問某些數據庫。數據庫

一個數據庫包含一個或多個命名的 模式, 模式又包含表。模式還包含其它命名的對象,包括數據類型,函數, 以及操做符。同一個對象名能夠在不一樣的模式裏使用而不會致使衝突; 好比,schema1 和 myschema 均可以包含叫作 mytable 的表。和數據庫不一樣,模式不是嚴格分離的: 一個用戶能夠訪問他所鏈接的數據庫中的任意模式中的對象, 只要他有權限。服務器

咱們須要模式的緣由有好多:函數

容許多個用戶使用一個數據庫而不會干擾其它用戶。post

把數據庫對象組織成邏輯組,讓它們更便於管理。學習

第三方的應用能夠放在不一樣的模式中, 這樣它們就不會和其它對象的名字衝突。操作系統

模式相似於操做系統層次的目錄,只不過模式不能嵌套。3d

建立一個schema

建立一個模式(schema)使用CREATE SCHEMA命令,如:postgresql

create schema demo_schema;

在指定模式裏建立表,如:code

CREATE TABLE myschema.mytable (
...
);

刪除一個空的schema,如:

drop schema myschema;

刪除一個模式以及模式裏面全部的對象,如:

drop schema myschema CASCADE;

pulic schema(public 模式)

在建立表時,若是沒有指定schema,則表會自動被歸屬到一個叫作'public‘的模式中,每個數據庫中都會有一個這樣的模式。下面兩種建立表的方式是等效的:

CREATE TABLE tableName(...);

CREATE TABLE public.tableName(...);

模式和權限

缺省時,用戶看不到模式中不屬於他們全部的對象。 爲了讓他們看得見,模式的全部者須要在模式上賦予 USAGE 權限。爲了讓用戶使用模式中的對象,咱們可能須要賦予額外的權限, 只要是適合該對象的。

用戶也能夠容許在別人的模式裏建立對象。要容許這麼作, 咱們須要賦予在該模式上的 CREATE 權限。 請注意,缺省時,每一個人都在 public 模式上 有 CREATE 權限。這樣就容許全部能夠鏈接到 指定數據庫上的用戶在這裏建立對象。若是你不容許這麼作, 你能夠撤銷這個權限:

REVOKE CREATE ON public FROM PUBLIC;
(第一個 "public" 是模式,第二個 "public" 意思是"全部用戶"。 第一句裏它是個標識符,而第二句裏是個關鍵字,因此有不一樣的大小寫)

模式搜索路徑

全稱的名字寫起來很是費勁,而且咱們最好不要在應用裏直接 寫上特定的模式名。所以,表一般都是用未修飾的名字 引用的,這樣的名字裏只有表名字。系統經過查找一個搜索路徑 來判斷一個表到底是哪一個表,這個路徑是一個須要查找的模式列表。 在搜索路徑裏找到的第一個表將被看成選定的表。若是在搜索路徑中 沒有匹配表,那麼就報告一個錯誤,即便匹配表的名字在數據庫其它的 模式中存在也如此。

在搜索路徑中的第一個模式叫作當前模式。除了是搜索的第一個模式以外, 它仍是在 CREATE TABLE 沒有聲明模式名的時候,新建表所在的地方。

查看當前搜索路徑,使用命令:

SHOW search_path;

在缺省的設置中,返回下面的東西:

search_path
--------------
 $user,public

第一個元素聲明將要搜索一個和當前用戶同名的模式。 由於尚未這樣的模式存在,因此這條記錄被忽略。第二個元素指向public模式。

要把新的模式放到路徑中來,咱們用

SET search_path TO myschema,public;

使用方式

模式能夠以多種方式組織你的數據。下面是一些建議使用的模式, 它們也很容易在缺省配置中獲得支持:

  • 若是你沒有建立任何模式,那麼全部用戶隱含都訪問public模式。 這樣就模擬了尚未模式的時候的情景。這種設置建議主要用在 只有一個用戶或者數據庫裏只有幾個合做用戶的情形。這樣的設置 也容許咱們平滑地從無模式的環境過渡。

  • 你能夠爲每一個用戶建立一個模式,名字和用戶相同。要記得缺省的 搜索路徑從$user開始,它會解析爲用戶名。 所以,若是每一個用戶都有一個獨立的模式,那麼他們缺省時訪問他們 本身的模式。

  • 若是你使用了這樣的設置,那麼你可能還想撤銷對public模式的訪問 (或者一併刪除了它),所以,用戶就真的限制於他們本身的模式了。

  • 要安裝共享的應用(被全部人使用的表,第三方提供的額外的函數等等), 咱們能夠把它們放到獨立的模式中。只要記得給訪問它們的用戶賦予合適 的權限就能夠了。而後用戶就能夠經過用一個模式名修飾這些名字來使用 這些額外的對象,或者他們能夠把額外的模式放到他們的搜索路徑中,由他們 定。

相關文章
相關標籤/搜索