PostgreSQL學習手冊(模式Schema)
一個資料庫包含一個或多個命名的模式,模式又包含表。模式還包含其它命名的物件,包括資料型別、函式,以及操作符。同一個物件名可以在不同的模式裡使用而
不會導致衝突;
比如,schema1和myschema都可以包含叫做mytable的表。和資料庫不同,模式不是嚴格分離的:一個使用者可以訪問他所連線的資料庫中的任
意模式中的物件,只要他有許可權。
我們需要模式有以下幾個主要原因:
1). 允許多個使用者使用一個資料庫而不會干擾其它使用者。
2). 把資料庫物件組織成邏輯組,讓它們更便於管理。
3). 第三方的應用可以放在不同的模式中,這樣它們就不會和其它物件的名字衝突。
1. 建立模式:
CREATE SCHEMA myschema;
通過以上命令可以建立名字為myschema的模式,在該模式被建立後,其便可擁有自己的一組邏輯物件,如表、檢視和函式等。
2. public模式:
在介紹後面的內容之前,這裡我們需要先解釋一下public模式。每當我們建立一個新的資料庫時,PostgreSQL都會為我們自動建立該模式。當登入到該資料庫時,如果沒有特殊的指定,我們將以該模式(public)的形式操作各種資料物件,如:
CREATE TABLE products ( ... ) 等同於 CREATE TABLE public.products ( ... )
3. 許可權:
預設時,使用者看不到模式中不屬於他們所有的物件。為了讓他們看得見,模式的所有者需要在模式上賦予USAGE許可權。為了讓使用者使用模式中的物件,我們可能需要賦予額外的許可權,只要是適合該物件的。PostgreSQL根據不同的物件提供了不同的許可權型別,如:
GRANT ALL ON SCHEMA myschema TO public;
上面的ALL關鍵字將包含CREATE和USAGE兩種許可權。如果public模式擁有了myschema模式的CREATE許可權,那麼登入到該模式的使用者將可以在myschema模式中建立任意物件,如:
CREATE TABLE myschema.products (
product_no integer,
name text,
price numeric CHECK (price > 0),
);
在為模式下的所有表賦予許可權時,需要將許可權拆分為各種不同的表操作,如:
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES TO public;
在為模式下的所有Sequence序列物件賦予許可權時,需要將許可權拆分為各種不同的Sequence操作,如:
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
GRANT SELECT, UPDATE, USAGE ON SEQUENCES TO public;
在為模式下的所有函式賦予許可權時,僅考慮執行許可權,如:
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
GRANT EXECUTE ON FUNCTIONS TO public;
可以看出,通過以上方式在public模式下為myschema模式建立各種物件是極為不方便的。下面我們將要介紹另外一種方式,即通過role物件,直接登入並關聯到myschema物件,之後便可以在myschema模式下直接建立各種所需的物件了。
CREATE ROLE myschema LOGIN PASSWORD '123456'; --建立了和該模式關聯的角色物件。
CREATE SCHEMA myschema AUTHORIZATION myschema; --將該模式關聯到指定的角色,模式名和角色名可以不相等。
在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 SCHEMA myschema;
如果要刪除模式及其所有物件,請使用級聯刪除:
DROP SCHEMA myschema CASCADE;
5. 模式搜尋路徑:
我們在使用一個資料庫物件時可以使用它的全稱來定位物件,然而這樣做往往也是非常繁瑣的,每次都不得不鍵入 owner_name.object_name。PostgreSQL中提供了模式搜尋路徑,這有些類似於Linux中的$PATH環境變數,當我們執行 一個Shell命令時,只有該命令位於$PATH的目錄列表中,我們才可以通過命令名直接執行,否則就需要輸入它的全路徑名。PostgreSQL同樣也 通過查詢一個搜尋路徑來判斷一個表究竟是哪個表,這個路徑是一個需要查詢的模式列表。在搜尋路徑裡找到的第一個表將被當作選定的表。如果在搜尋路徑中 沒有匹配表,那麼就報告一個錯誤,即使匹配表的名字在資料庫其它的模式中存在也如此。
在搜尋路徑中的第一個模式叫做當前模式。除了是搜尋的第一個模式之外,它還是在CREATE TABLE沒有宣告模式名的時候,新建表所屬於的模式。要顯示當前搜尋路徑,使用下面的命令:
MyTest=> SHOW search_path;
search_path
----------------
"$user",public
(1 row)
可以將新模式加入到搜尋路徑中,如:
SET search_path TO myschema,public;
為搜尋路徑設定指定的模式,如:
SET search_path TO myschema; --當前搜尋路徑中將只是包含myschema一種模式。
我們需要模式有以下幾個主要原因:
1). 允許多個使用者使用一個資料庫而不會干擾其它使用者。
2). 把資料庫物件組織成邏輯組,讓它們更便於管理。
3). 第三方的應用可以放在不同的模式中,這樣它們就不會和其它物件的名字衝突。
1. 建立模式:
CREATE SCHEMA myschema;
通過以上命令可以建立名字為myschema的模式,在該模式被建立後,其便可擁有自己的一組邏輯物件,如表、檢視和函式等。
2. public模式:
在介紹後面的內容之前,這裡我們需要先解釋一下public模式。每當我們建立一個新的資料庫時,PostgreSQL都會為我們自動建立該模式。當登入到該資料庫時,如果沒有特殊的指定,我們將以該模式(public)的形式操作各種資料物件,如:
CREATE TABLE products ( ... ) 等同於 CREATE TABLE public.products ( ... )
3. 許可權:
預設時,使用者看不到模式中不屬於他們所有的物件。為了讓他們看得見,模式的所有者需要在模式上賦予USAGE許可權。為了讓使用者使用模式中的物件,我們可能需要賦予額外的許可權,只要是適合該物件的。PostgreSQL根據不同的物件提供了不同的許可權型別,如:
GRANT ALL ON SCHEMA myschema TO public;
上面的ALL關鍵字將包含CREATE和USAGE兩種許可權。如果public模式擁有了myschema模式的CREATE許可權,那麼登入到該模式的使用者將可以在myschema模式中建立任意物件,如:
CREATE TABLE myschema.products (
product_no integer,
name text,
price numeric CHECK (price > 0),
);
在為模式下的所有表賦予許可權時,需要將許可權拆分為各種不同的表操作,如:
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES TO public;
在為模式下的所有Sequence序列物件賦予許可權時,需要將許可權拆分為各種不同的Sequence操作,如:
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
GRANT SELECT, UPDATE, USAGE ON SEQUENCES TO public;
在為模式下的所有函式賦予許可權時,僅考慮執行許可權,如:
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
GRANT EXECUTE ON FUNCTIONS TO public;
可以看出,通過以上方式在public模式下為myschema模式建立各種物件是極為不方便的。下面我們將要介紹另外一種方式,即通過role物件,直接登入並關聯到myschema物件,之後便可以在myschema模式下直接建立各種所需的物件了。
CREATE ROLE myschema LOGIN PASSWORD '123456'; --建立了和該模式關聯的角色物件。
CREATE SCHEMA myschema AUTHORIZATION myschema; --將該模式關聯到指定的角色,模式名和角色名可以不相等。
在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 SCHEMA myschema;
如果要刪除模式及其所有物件,請使用級聯刪除:
DROP SCHEMA myschema CASCADE;
5. 模式搜尋路徑:
我們在使用一個資料庫物件時可以使用它的全稱來定位物件,然而這樣做往往也是非常繁瑣的,每次都不得不鍵入 owner_name.object_name。PostgreSQL中提供了模式搜尋路徑,這有些類似於Linux中的$PATH環境變數,當我們執行 一個Shell命令時,只有該命令位於$PATH的目錄列表中,我們才可以通過命令名直接執行,否則就需要輸入它的全路徑名。PostgreSQL同樣也 通過查詢一個搜尋路徑來判斷一個表究竟是哪個表,這個路徑是一個需要查詢的模式列表。在搜尋路徑裡找到的第一個表將被當作選定的表。如果在搜尋路徑中 沒有匹配表,那麼就報告一個錯誤,即使匹配表的名字在資料庫其它的模式中存在也如此。
在搜尋路徑中的第一個模式叫做當前模式。除了是搜尋的第一個模式之外,它還是在CREATE TABLE沒有宣告模式名的時候,新建表所屬於的模式。要顯示當前搜尋路徑,使用下面的命令:
MyTest=> SHOW search_path;
search_path
----------------
"$user",public
(1 row)
可以將新模式加入到搜尋路徑中,如:
SET search_path TO myschema,public;
為搜尋路徑設定指定的模式,如:
SET search_path TO myschema; --當前搜尋路徑中將只是包含myschema一種模式。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9521459/viewspace-759339/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL學習手冊(索引)SQL索引
- PostgreSQL學習手冊(資料表)SQL
- PostgreSQL學習手冊(事物隔離)SQL
- PostgreSQL學習手冊(系統表)SQL
- PostgreSQL學習手冊(客戶端命令)SQL客戶端
- PostgreSQL學習手冊(效能提升技巧)SQL
- PostgreSQL學習手冊(資料庫管理)SQL資料庫
- PostgreSQL學習手冊(系統檢視)SQL
- PostgreSQL學習手冊(伺服器配置)SQL伺服器
- PostgreSQL學習手冊(常用資料型別)SQL資料型別
- PostgreSQL學習手冊(角色和許可權)SQL
- PostgreSQL學習手冊(資料庫維護)SQL資料庫
- PostgreSQL學習手冊(SQL語言函式)SQL函式
- PostgreSQL學習手冊(客戶端命令<一>)SQL客戶端
- PostgreSQL學習手冊(客戶端命令<二>)SQL客戶端
- PostgreSQL學習手冊(函式和操作符)SQL函式
- PostgreSQL學習手冊(PL/pgSQL過程語言)SQL
- PostgreSQL學習手冊(表的繼承和分割槽)SQL繼承
- PostgreSQL學習手冊(函式和操作符<一>)SQL函式
- PostgreSQL學習手冊(函式和操作符<二>)SQL函式
- PostgreSQL學習手冊(函式和操作符<三>)SQL函式
- Redux學習手冊Redux
- ITIL學習手冊
- Python學習手冊Python
- Beautiful Soup 學習手冊
- PostgreSQL:Schema 管理SQL
- python學習手冊(10)Python
- python學習手冊(8)Python
- python學習手冊(4)Python
- SQLite學習手冊(目錄)SQLite
- Linux學習手冊(轉)Linux
- PostgreSQL 速查、備忘手冊 | PostgreSQL Quick Find and TutorialSQLUI
- Redis學習手冊(Key操作命令)Redis
- python學習手冊17作用域Python
- Flutter狀態管理學習手冊(二)——ReduxFlutterRedux
- Flutter狀態管理學習手冊(三)——BlocFlutterBloC
- 神器 Nginx 的學習手冊 ( 建議收藏 )Nginx
- 前端學習實用工具及手冊自取前端