PostgreSQL學習手冊 模式Schema

2021-07-02 22:17:24 字數 3299 閱讀 6422

乙個資料庫包含乙個或多個命名的模式,模式又包含表。模式還包含其它命名的物件,包括資料型別、函式,以及操作符。同乙個物件名可以在不同的模式裡使用而不會導致衝突; 比如,schema1和myschema都可以包含叫做mytable的表。和資料庫不同,模式不是嚴格分離的:乙個使用者可以訪問他所連線的資料庫中的任意模式中的物件,只要他有許可權。

我們需要模式有以下幾個主要原因:

1). 允許多個使用者使用乙個資料庫而不會干擾其它使用者。

2). 把資料庫物件組織成邏輯組,讓它們更便於管理。

3). 第三方的應用可以放在不同的模式中,這樣它們就不會和其它物件的名字衝突。

1. 建立模式:

create schemamyschema;

通過以上命令可以建立名字為myschema的模式,在該模式被建立後,其便可擁有自己的一組邏輯物件,如表、檢視和函式等。

2. public模式:

在介紹後面的內容之前,這裡我們需要先解釋一下public模式。每當我們建立乙個新的資料庫時,postgresql都會為我們自動建立該模式。當登入到該資料庫時,如果沒有特殊的指定,我們將以該模式(public)的形式操作各種資料物件,如:

create tableproducts ( ... )

等同於 

create tablepublic.products ( ... )

3. 許可權:

預設時,使用者看不到模式中不屬於他們所有的物件。為了讓他們看得見,模式的所有者需要在模式上賦予usage許可權。為了讓使用者使用模式中的物件,我們可能需要賦予額外的許可權,只要是適合該物件的。postgresql根據不同的物件提供了不同的許可權型別,如:

grant all on schemamyschematopublic;

上面的all關鍵字將包含

create

和usage

兩種許可權。如果public模式擁有了myschema模式的create許可權,那麼登入到該模式的使用者將可以在myschema模式中建立任意物件,如:

create tablemyschema.products (

product_no integer,

name text,

price numericcheck(price > 0),

);在為模式下的所有表賦予許可權時,需要將許可權拆分為各種不同的表操作,如:

alter default privileges in schemamyschema

grant insert, select, update, delete, truncate, references, trigger on tables

topublic;

在為模式下的所有sequence序列物件賦予許可權時,需要將許可權拆分為各種不同的sequence操作,如:

alter default privileges in schemamyschema

grant select, update, usage on sequences topublic;

在為模式下的所有函式賦予許可權時,僅考慮執行許可權,如:

alter default privileges in schemamyschema

grant execute on functions topublic;

可以看出,通過以上方式在public模式下為myschema模式建立各種物件是極為不方便的。下面我們將要介紹另外一種方式,即通過role物件,直接登入並關聯到myschema物件,之後便可以在myschema模式下直接建立各種所需的物件了。

create rolemyschemalogin password'123456';

--建立了和該模式關聯的角色物件。

create schemamyschemaauthorizationmyschema;

--將該模式關聯到指定的角色,模式名和角色名可以不相等。

在linux shell下,以myschema的角色登入到資料庫mytest,在密碼輸入正確後將成功登入到該資料庫。

/> psql -d mytest -u myschema

password:

mytest=> 

create table test(i integer);

create table

mytest=> 

\d--檢視該模式下,以及該模式有許可權看到的tables資訊列表。

list of relations

schema     |   name   | type  |  owner

------------+---------+------+----------

myschema |   test     | table  | myschema

(1 rows)

4. 刪除模式:

drop schemamyschema;

如果要刪除模式及其所有物件,請使用級聯刪除:

drop schemamyschemacascade;

5. 模式搜尋路徑:

在搜尋路徑中的第乙個模式叫做當前模式。除了是搜尋的第乙個模式之外,它還是在create table沒有宣告模式名的時候,新建表所屬於的模式。要顯示當前搜尋路徑,使用下面的命令:

mytest=> 

show search_path;

search_path

----------------

"$user",public

(1 row)

可以將新模式加入到搜尋路徑中,如:

set search_path tomyschema,public;

為搜尋路徑設定指定的模式,如:

set search_path tomyschema;

--當前搜尋路徑中將只是包含myschema一種模式。

6. 修改表的模式

alter tablepublic.表名 set schema   新的模式名;

PostgreSQL學習手冊 模式Schema

乙個資料庫包含乙個或多個命名的模式,模式又包含表。模式還包含其它命名的物件,包括資料型別 函式,以及操作符。同乙個物件名可以在不同的模式裡使用而不會導致衝突 比如,schema1和myschema都可以包含叫做mytable的表。和資料庫不同,模式不是嚴格分離的 乙個使用者可以訪問他所連線的資料庫中...

PostgreSQL學習手冊 七 事物隔離

在sql的標準中事物隔離級別分為以下四種 1.讀未提交 read uncommitted 2.讀已提交 read committed 3.可重複讀 repeatable read 4.可序列化 serializable 然而postgresql在9.1之前的版本中只是實現了其中兩種,即讀已提交和可序...

PostgreSQL中的chkpass模組

目錄 文件用途 詳細資訊 文件用途 chkpass模組使用了乙個名為chkpass的資料型別,此型別適用於儲存加密的口令。詳細資訊 使用chkpass模組後,每個口令在輸入的時候就自動的被轉換為加密的形式,而且總是以加密的形式儲存。進行比較時,可簡單地與明文口令比較,比較函式會先對明文口令進行加密。...