1.概述

模式(schema)可以看着是一个表的集合。
一个模式可以包含视图、索引、数据类型、函数和操作符等。
相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 myschema 都可以包含名为 mytable 的表。

2.优势:

  • 允许多个用户使用一个数据库并且不会互相干扰。
  • 将数据库对象组织成逻辑组以便更容易管理。
  • 第三方应用的对象可以放在独立的模式中,这样它们就不会与其他对象的名称发生冲突。

    3.创建和删除模式

    3.1创建模式

    ```sql —语法 CREATE SCHEMA 模式名称;

—示例 runoobdb=# create schema myschema; CREATE SCHEMA

输出CREATE SCHEMA 即表示创建成功

  1. <a name="GvdxC"></a>
  2. ##### 3.1.1在模式下创建表格
  3. ```sql
  4. --示例
  5. CREATE TABLE myschema.company(
  6. ID INT NOT NULL,
  7. NAME VARCHAR(20) NOT NULL,
  8. AGE INT NOT NULL,
  9. ADDRESS CHAR(25),
  10. SALARY DECIMAL(18,2),
  11. PRIMARY KEY (ID)
  12. );

3.2删除模式

--删除一个为空的模式(其中的所有对象已经被删除):
DROP SCHEMA schema名称;

--示例
--先创建一个空的SCHEMA;
runoobdb=# create schema testschema;
CREATE SCHEMA
--然后删除
runoobdb=# DROP SCHEMA testschema;
DROP SCHEMA


--删除一个模式以及其中包含的所有对象:
DROP SCHEMA schema名称 CASCADE;

--示例
--先创建一个空的SCHEMA;
runoobdb=# create schema schema2;
CREATE SCHEMA
--在SCHEMA中创建表
runoobdb=# CREATE TABLE schema2.company(
runoobdb(# ID   INT          NOT NULL,
runoobdb(# NAME VARCHAR(20)  NOT NULL,
runoobdb(# AGE  INT          NOT NULL,
runoobdb(# ADDRESS   CHAR(25),
runoobdb(# SALARY    DECIMAL(18,2),
runoobdb(# PRIMARY   KEY (ID)
runoobdb(# );
CREATE TABLE
--删除
runoobdb=# DROP SCHEMA schema2 CASCADE;
注意:  递归删除 表 schema2.company
DROP SCHEMA
--查看该模式还存不存在
runoobdb=# SELECT * FROM information_schema.schemata
runoobdb-#
发现已经被删除了

4.查看模式

SELECT * FROM information_schema.schemata

--示例
runoobdb=# select * from information_schema.schemata;
 catalog_name |    schema_name     | schema_owner | default_character_set_catalog | default_character_set_schema | default_character_set_name | sql_path
--------------+--------------------+--------------+-------------------------------+------------------------------+----------------------------+----------
 runoobdb     | myschema           | postgres     |                               |                              |                            |
 runoobdb     | information_schema | postgres     |                               |                              |                            |
 runoobdb     | public             | postgres     |                               |                              |                            |
 runoobdb     | pg_catalog         | postgres     |                               |                              |                            |
 runoobdb     | pg_toast_temp_1    | postgres     |                               |                              |                            |
 runoobdb     | pg_temp_1          | postgres     |                               |                              |                            |
 runoobdb     | pg_toast           | postgres     |                               |                              |                            |
(7 行记录)

4.1查看某个模式所有表格

--语句
select * from pg_tables where schemaname = 'schema_name';

--示例
runoobdb=# select * from pg_tables where schemaname = 'myschema';
 schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity
------------+-----------+------------+------------+------------+----------+-------------+-------------
 myschema   | company   | postgres   |            | t          | f        | f           | f
(1 行记录)

4.2查看模式中的某个表格的内容

--语句
select * from 模式名称.表格名称;

--示例,查看myschema模式中company表中的内容
runoobdb=# select * from myschema.company;
 id | name | age | address | salary
----+------+-----+---------+--------
(0 行记录)