標籤:
一個資料庫包含一個或多個模式,而模式又包含表、序列、函數等,不同的模式可以包含相同名稱的表、序列、函數等。模式本質上是命名空間,就像人的姓氏一樣。一個使用者只要有許可權,串連到資料庫後,可一次訪問該資料庫的任何模式下的對象。建立一個資料庫會預設建立一個public模式,後續操作資料庫對象如果沒指定模式,則預設為public。例如之前建立的school資料庫
school=# \dn+
List of schemas
Name | Owner | Access privileges | Description
--------+----------+----------------------+------------------------
public | postgres | postgres=UC/postgres+| standard public schema
| | =UC/postgres |
(1 row)
一、建立模式
文法:
school=# \h create schema
Command: CREATE SCHEMA
Description: define a new schema
Syntax:
CREATE SCHEMA schema_name [ AUTHORIZATION user_name ] [ schema_element [ ... ] ]
CREATE SCHEMA AUTHORIZATION user_name [ schema_element [ ... ] ]
CREATE SCHEMA IF NOT EXISTS schema_name [ AUTHORIZATION user_name ]
CREATE SCHEMA IF NOT EXISTS AUTHORIZATION user_name
參數:
schema_name
模式名稱,預設使用user_name,且不能以pg_開頭。
user_name
模式屬於的使用者,預設為執行命令的使用者。
schema_element
一條SQL語句,即建立模式後,在該模式下建立一個資料庫物件。當前支援的子句有CREATE
TABLE, CREATE VIEW, CREATE INDEX, CREATE SEQUENCE, CREATE TRIGGER and GRANT。
IF NOT EXISTS
如果模式已存在,使用該選項不會拋出錯誤。使用此選項不能使用schema_element子句。
樣本
create schema schema_test authorization test1 create table tbl_test(a int) create view view_test as select * from tbl_test;
訪問模式下資料庫物件在模式和資料庫物件之間加一個句點即可
school=# select * from schema_test.tbl_test ; a---(0 rows) school=# select * from schema_test.view_test ; a---(0 rows)
二、模式修改
文法:
school=# \h alter schema
Command: ALTER SCHEMA
Description: change the definition of a schema
Syntax:
ALTER SCHEMA name RENAME TO new_name
ALTER SCHEMA name OWNER TO new_owner
參數:
name
模式名稱
new_name
模式新的名稱,同樣新名稱也不能以pg_開頭
new_owner
模式新使用者名稱稱
樣本
school=# alter schema schema_test owner to postgres ;ALTER SCHEMAschool=# alter schema schema_test rename to test;ALTER SCHEMAschool=# \dn+ List of schemas Name | Owner | Access privileges | Description --------+----------+----------------------+------------------------ public | postgres | postgres=UC/postgres+| standard public schema | | =UC/postgres | test | postgres | |(2 rows)
三、模式刪除
文法:
school=# \h drop schema
Command: DROP SCHEMA
Description: remove a schema
Syntax:
DROP SCHEMA [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
參數:
IF EXISTS
如果模式不存在,不會拋出錯誤。
name
模式名稱。
CASCADE
自動刪除該模式下資料庫物件。
RESTRICT
如果該模式下還存在資料庫物件,則不允許刪除該模式,RESTRICT為預設值。
樣本:
school=# drop schema test;ERROR: cannot drop schema test because other objects depend on itDETAIL: table test.tbl_test depends on schema testview test.view_test depends on schema testHINT: Use DROP ... CASCADE to drop the dependent objects too.
school=# drop schema test cascade;NOTICE: drop cascades to 2 other objectsDETAIL: drop cascades to table test.tbl_testdrop cascades to view test.view_testDROP SCHEMA
postgresql模式建立、修改、刪除