參考文章:PostgreSQL基本使用(3)Schema_pg數據庫查詢schema-CSDN博客
PostgreSQL 模式(Schema)可以理解為是一個表的集合(或者所屬者)。
例如:
在 MySQL 中,Scheam 是庫;所有的表都 “存放” 在一個庫中。使用時,用庫.表名
;假若有?testdb?庫,其內有?client?表,統計表行數SQL:select count(*) from?testdb.client
;
在 Oracle 中,Schema 是用戶;所有的表都 “存放” 在一個用戶中。使用時,用用戶.表名;假若有 fid_test 用戶,期內有 client_info 表,查詢 ID 為 100 的用戶詳細信息:select * from fid_test.client_info where id = 100;
那在 PostgreSQL 中,Schema 就是 Schema(不是庫、也不是用戶)。在使用時,使用schema名.表名稱
使用模式(Schema)的優勢:
- 允許多個用戶使用一個數據庫并且不會互相干擾
- 將數據庫對象組織成邏輯組以便更容易管理
- 第三方應用的對象可以放在獨立的模式中,這樣他們就不會與其他對象的名稱發生沖突
默認的Schema
每創建一個數據庫,其都會有一個默認的schema,名稱為 public
創建 Schema
除了默認的 public 這個Schema,也可以創建自定義的Schema,SQL 語句如下:
create schema testschema;
在 testschema 中創建表.?
create table testschema.test(id int, name varchar(200));
若添加數據時,不指定 testschema 則表達的意思是給 public 這個schema中的 test 表添加數據。
由于當前 mydb2 這個數據庫中的 public 中無 test 表,所以:若不指定 testschema將會報錯
查看 Schema
要查看當前 PostgreSQL 數據庫中的所有 schema,你可以使用以下 SQL 查詢:
SELECT schema_name
FROM information_schema.schemata;
這將返回一個結果集,其中包含數據庫中所有 schema 的名稱。請注意,這將包括 PostgreSQL 系統 schema(例如?public
、pg_catalog
?等)和用戶自定義 schema(如果有的話)。
刪除 Schema
在 PostgreSQL 中,如果刪除一個 schema(模式),默認情況下其中的表也會被刪除。然而,這個行為可以通過設置刪除模式時的選項來改變。
在 PostgreSQL 中,刪除 schema 可以使用?DROP SCHEMA
?命令。如果你使用以下方式刪除一個 schema,那么其中的表也會被一并刪除:
DROP SCHEMA schema_name CASCADE;
在上述命令中,CASCADE
?選項表示級聯刪除,即刪除 schema 的同時也刪除其包含的所有對象,包括表、視圖、函數等。
如果你不想刪除表,而只是刪除 schema,可以使用以下方式:
DROP SCHEMA schema_name;
這樣會刪除 schema,但是如果其中有任何對象(如表),則刪除操作會失敗并顯示錯誤消息,因為默認情況下 PostgreSQL 不允許刪除一個非空的 schema
。