postgresql schema模式


轉載地址:【傳送門

模式(schema)實際上一個命名表的集合。也可以包含一個schema視圖,索引,序列,數據類型,運算符和函數。Schema是滿足類似於在操作系統級別的目錄,但該模式不能嵌套。 CREATE SCHEMA PostgreSQL語句創建一個模式(schema)。

語法

創建型模式的基本語法如下: yiibai.com

CREATE SCHEMA name;
  

其中,name是模式的名稱。 www.yiibai.com

在Schema中創建表的語法

The basic syntax to create table in schema is as follows:

 

CREATE TABLE myschema.mytable (
...
);
  

Example

Let us see an example for creating a schema. Connect to the database testdb and create a schemamyschema as follows:

testdb=# create schema myschema;
CREATE SCHEMA
 yiibai.com 

The message "CREATE SCHEMA" signifies that the schema is created successfully. yiibai.com

Now, let us create a table in the above schema as follows: yiibai.com

testdb=# create table myschema.company(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),
   PRIMARY KEY (ID)
   );
  

This will create an empty table. You can verify the table created with the command below:

 

testdb=# select * from myschema.company;
  

This would produce following result:

 

 id | name | age | address | salary
----+------+-----+---------+--------
(0 rows)
  

刪除模式語法

To drop a schema if it's empty (all objects in it have been dropped), then use:

 

DROP SCHEMA myschema;
  

To drop a schema including all contained objects, use:

 

DROP SCHEMA myschema CASCADE;
 yiibai.com 

使用模式的優勢

  • It allows many users to use one database without interfering with each other.

     

  • It organizes database objects into logical groups to make them more manageable.

     

  • Third-party applications can be put into separate schemas so they do not collide with the names of other objects.

------------------------------------------------  分割線 ----------------------------------------------

轉載地址:【傳送門

 一個數據庫包含一個或多個命名的模式,模式又包含表。模式還包含其它命名的對象,包括數據類型、函數,以及操作符。同一個對象名可以在不同的模式里使用而不會導致沖突; 比如,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關鍵字將包含CREATEUSAGE兩種權限。如果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一種模式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM