濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > PostgreSQL教程(二):模式Schema詳解

PostgreSQL教程(二):模式Schema詳解

熱門(mén)標(biāo)簽:外呼線路資源屬于電信業(yè)務(wù)嗎 呼和浩特外呼系統(tǒng)原理是什么 河南電話外呼系統(tǒng)招商 青白江400企業(yè)電話申請(qǐng) 小裙科技電銷(xiāo)機(jī)器人怎樣 智能外呼系統(tǒng)官網(wǎng) 長(zhǎng)沙電銷(xiāo)外呼防封卡是什么 內(nèi)蒙古營(yíng)銷(xiāo)智能外呼系統(tǒng)哪個(gè)好 crm外呼系統(tǒng)聯(lián)系方式

一個(gè)數(shù)據(jù)庫(kù)包含一個(gè)或多個(gè)命名的模式,模式又包含表。模式還包含其它命名的對(duì)象,包括數(shù)據(jù)類(lèi)型、函數(shù),以及操作符。同一個(gè)對(duì)象名可以在不同的模式里使用而不會(huì)導(dǎo)致沖突; 比如,schema1和myschema都可以包含叫做mytable的表。和數(shù)據(jù)庫(kù)不同,模式不是嚴(yán)格分離的:一個(gè)用戶(hù)可以訪問(wèn)他所連接的數(shù)據(jù)庫(kù)中的任意模式中的對(duì)象,只要他有權(quán)限。

    我們需要模式有以下幾個(gè)主要原因:

    1). 允許多個(gè)用戶(hù)使用一個(gè)數(shù)據(jù)庫(kù)而不會(huì)干擾其它用戶(hù)。
    2). 把數(shù)據(jù)庫(kù)對(duì)象組織成邏輯組,讓它們更便于管理。
    3). 第三方的應(yīng)用可以放在不同的模式中,這樣它們就不會(huì)和其它對(duì)象的名字沖突。
    
    1. 創(chuàng)建模式:
 

復(fù)制代碼 代碼如下:

    CREATE SCHEMA myschema;
 

    通過(guò)以上命令可以創(chuàng)建名字為myschema的模式,在該模式被創(chuàng)建后,其便可擁有自己的一組邏輯對(duì)象,如表、視圖和函數(shù)等。
    
    2. public模式:

    在介紹后面的內(nèi)容之前,這里我們需要先解釋一下public模式。每當(dāng)我們創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)時(shí),PostgreSQL都會(huì)為我們自動(dòng)創(chuàng)建該模式。當(dāng)?shù)卿浀皆摂?shù)據(jù)庫(kù)時(shí),如果沒(méi)有特殊的指定,我們將以該模式(public)的形式操作各種數(shù)據(jù)對(duì)象,如:
 

復(fù)制代碼 代碼如下:

    CREATE TABLE products ( ... ) 等同于 CREATE TABLE public.products ( ... )
   

    3. 權(quán)限:
    缺省時(shí),用戶(hù)看不到模式中不屬于他們所有的對(duì)象。為了讓他們看得見(jiàn),模式的所有者需要在模式上賦予USAGE權(quán)限。為了讓用戶(hù)使用模式中的對(duì)象,我們可能需要賦予額外的權(quán)限,只要是適合該對(duì)象的。PostgreSQL根據(jù)不同的對(duì)象提供了不同的權(quán)限類(lèi)型,如:
 
復(fù)制代碼 代碼如下:

    GRANT ALL ON SCHEMA myschema TO public;
 

    上面的ALL關(guān)鍵字將包含CREATE和USAGE兩種權(quán)限。如果public模式擁有了myschema模式的CREATE權(quán)限,那么登錄到該模式的用戶(hù)將可以在myschema模式中創(chuàng)建任意對(duì)象,如:
 
復(fù)制代碼 代碼如下:

    CREATE TABLE myschema.products (
        product_no integer,
        name text,
        price numeric CHECK (price > 0),
    );
 

    在為模式下的所有表賦予權(quán)限時(shí),需要將權(quán)限拆分為各種不同的表操作,如:
 
復(fù)制代碼 代碼如下:

    ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
    GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES TO public;
 

    在為模式下的所有Sequence序列對(duì)象賦予權(quán)限時(shí),需要將權(quán)限拆分為各種不同的Sequence操作,如:
 
復(fù)制代碼 代碼如下:

    ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
    GRANT SELECT, UPDATE, USAGE ON SEQUENCES TO public;
 

    在為模式下的所有函數(shù)賦予權(quán)限時(shí),僅考慮執(zhí)行權(quán)限,如:
 
復(fù)制代碼 代碼如下:

    ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
    GRANT EXECUTE ON FUNCTIONS TO public;
 

    可以看出,通過(guò)以上方式在public模式下為myschema模式創(chuàng)建各種對(duì)象是極為不方便的。下面我們將要介紹另外一種方式,即通過(guò)role對(duì)象,直接登錄并關(guān)聯(lián)到myschema對(duì)象,之后便可以在myschema模式下直接創(chuàng)建各種所需的對(duì)象了。
   
復(fù)制代碼 代碼如下:

    CREATE ROLE myschema LOGIN PASSWORD '123456'; --創(chuàng)建了和該模式關(guān)聯(lián)的角色對(duì)象。
    CREATE SCHEMA myschema AUTHORIZATION myschema; --將該模式關(guān)聯(lián)到指定的角色,模式名和角色名可以不相等。
 

    在Linux Shell下,以myschema的角色登錄到數(shù)據(jù)庫(kù)MyTest,在密碼輸入正確后將成功登錄到該數(shù)據(jù)庫(kù)。
 
復(fù)制代碼 代碼如下:

    /> psql -d MyTest -U myschema
    Password:
    MyTest=> CREATE TABLE test(i integer);
    CREATE TABLE
    MyTest=> \d   --查看該模式下,以及該模式有權(quán)限看到的tables信息列表。
              List of relations
     Schema     |   Name   | Type  |  Owner
    ------------+---------+------+----------
     myschema |   test     | table  | myschema
    (1 rows)
   

    4. 刪除模式:
 
復(fù)制代碼 代碼如下:

    DROP SCHEMA myschema;
 

    如果要?jiǎng)h除模式及其所有對(duì)象,請(qǐng)使用級(jí)聯(lián)刪除:
 
復(fù)制代碼 代碼如下:

    DROP SCHEMA myschema CASCADE;
 

    
    5. 模式搜索路徑:

    我們?cè)谑褂靡粋€(gè)數(shù)據(jù)庫(kù)對(duì)象時(shí)可以使用它的全稱(chēng)來(lái)定位對(duì)象,然而這樣做往往也是非常繁瑣的,每次都不得不鍵入owner_name.object_name。PostgreSQL中提供了模式搜索路徑,這有些類(lèi)似于Linux中的$PATH環(huán)境變量,當(dāng)我們執(zhí)行一個(gè)Shell命令時(shí),只有該命令位于$PATH的目錄列表中,我們才可以通過(guò)命令名直接執(zhí)行,否則就需要輸入它的全路徑名。PostgreSQL同樣也通過(guò)查找一個(gè)搜索路徑來(lái)判斷一個(gè)表究竟是哪個(gè)表,這個(gè)路徑是一個(gè)需要查找的模式列表。在搜索路徑里找到的第一個(gè)表將被當(dāng)作選定的表。如果在搜索路徑中 沒(méi)有匹配表,那么就報(bào)告一個(gè)錯(cuò)誤,即使匹配表的名字在數(shù)據(jù)庫(kù)其它的模式中存在也如此。
    在搜索路徑中的第一個(gè)模式叫做當(dāng)前模式。除了是搜索的第一個(gè)模式之外,它還是在CREATE TABLE沒(méi)有聲明模式名的時(shí)候,新建表所屬于的模式。要顯示當(dāng)前搜索路徑,使用下面的命令:
 

復(fù)制代碼 代碼如下:

    MyTest=> SHOW search_path;
      search_path
    ----------------
     "$user",public
    (1 row)
 

    可以將新模式加入到搜索路徑中,如:
 
復(fù)制代碼 代碼如下:

    SET search_path TO myschema,public;
 

    為搜索路徑設(shè)置指定的模式,如:
 
復(fù)制代碼 代碼如下:

    SET search_path TO myschema; --當(dāng)前搜索路徑中將只是包含myschema一種模式。

您可能感興趣的文章:
  • PostgreSQL教程(一):數(shù)據(jù)表詳解
  • PostgreSQL教程(三):表的繼承和分區(qū)表詳解
  • PostgreSQL教程(四):數(shù)據(jù)類(lèi)型詳解
  • PostgreSQL教程(五):函數(shù)和操作符詳解(1)
  • PostgreSQL教程(六):函數(shù)和操作符詳解(2)
  • PostgreSQL教程(七):函數(shù)和操作符詳解(3)
  • PostgreSQL教程(八):索引詳解
  • PostgreSQL教程(九):事物隔離介紹
  • PostgreSQL教程(十):性能提升技巧
  • PostgreSQL教程(十一):服務(wù)器配置
  • PostgreSQL教程(十二):角色和權(quán)限管理介紹
  • PostgreSQL教程(十三):數(shù)據(jù)庫(kù)管理詳解
  • PostgreSQL教程(十四):數(shù)據(jù)庫(kù)維護(hù)

標(biāo)簽:池州 呼倫貝爾 白山 安順 菏澤 黃石 楚雄 舟山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PostgreSQL教程(二):模式Schema詳解》,本文關(guān)鍵詞  PostgreSQL,教程,二,模式,Schema,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PostgreSQL教程(二):模式Schema詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于PostgreSQL教程(二):模式Schema詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    中方县| 盐亭县| 来凤县| 斗六市| 友谊县| 西乌珠穆沁旗| 东平县| 凌源市| 禹州市| 石门县| 寻乌县| 亳州市| 仁怀市| 曲阜市| 华亭县| 祁东县| 靖边县| 徐汇区| 玉山县| 孟州市| 商城县| 新野县| 天台县| 安远县| 中阳县| 长兴县| 界首市| 河津市| 成安县| 资兴市| 定兴县| 武功县| 石棉县| 铅山县| 金川县| 乳山市| 阿勒泰市| 青神县| 曲麻莱县| 乡城县| 浑源县|