postgresql創建schema

schema概念有點像命名空間或者把它想像成一個文件系統中的目錄,差別就是這個schema下不能再有schema嵌套.
各個對象比如表、函數等存放在各個schema下,同一個schema下不能有重複的對象名字,但在不同schema下可以重複.

使用schema的作用

  • 方便管理多個用戶共享一個數據庫,但是又可以互相獨立.
  • 方便管理衆多對象,更有邏輯性.
  • 方便兼容某些第三方應用程序,創建對象時是有schema的.

比如要設計一個複雜系統.由衆多模塊構成,有時候模塊間又需要有獨立性.各模塊存放單獨的數據庫顯然是不合適的.
這時候使用schema來分類各模塊間的對象,再對用戶進行適當的權限控制.這樣邏輯也非常清晰.

創建schema

db01=# create schema schema01;
CREATE SCHEMA
db01=# \dn
   List of schemas
   Name   |  Owner
----------+----------
 public   | postgres
 schema01 | postgres
(2 rows)

在schema中創建對象

db01=# create table schema01.t1(id int);
CREATE TABLE
db01=# insert into schema01.t1 values(1);
INSERT 0 1
db01=# select * from t1;
ERROR:  relation "t1" does not exist
LINE 1: select * from t1;
                      ^
db01=# select * from schema01.t1;
 id
----
  1
(1 row)
db01=# select * from db01.schema01.t1;
 id
----
  1
(1 row)

默認是在public這個schema下.因此要帶上schema名稱.數據庫名字如果要帶上,只能是當前連接的數據庫!!

刪除schema

db01=# drop schema schema01;
ERROR:  cannot drop schema schema01 because other objects depend on it
DETAIL:  table schema01.t1 depends on schema schema01
HINT:  Use DROP ... CASCADE to drop the dependent objects too.
db01=# drop schema schema01 cascade;
NOTICE:  drop cascades to table schema01.t1
DROP SCHEMA

schema下有對象如果需要一起刪除,需要帶上cascade關鍵字.有點像使用rmdir刪除目錄一樣,文件夾下有東西不然刪除.

創建schema指定owner

默認是誰創建的schema,owner就是誰,當然也可以指定

db01=# create schema s01 authorization hippo;
CREATE SCHEMA
db01=# create schema authorization hippo;
CREATE SCHEMA
db01=# \dn
  List of schemas
  Name  |  Owner
--------+----------
 hippo  | hippo
 public | postgres
 s01    | hippo
(3 rows)

指定了owner,不指定schema,則schema名字與owner一致。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章