4.3 模式

4.3.1 什么是模式

  1. 可以理解为一个命名空间或目录,不同模式下可以有相同的表、函数等对象而不会产生冲突

  2. 便于管理,只要有权限,各个模式的对象可以相互调用

  3. 需要模式的主要原因:

    1. 允许多个用户同时使用同一个数据库且用户之间不互相干扰

    2. 把数据库对象放在不同的模式下组织成逻辑组,使数据对库对象更便于管理

    3. 第三方的应用可以放在不同的模式中,这样就不会和其他对象的名字产生冲突了

4.3.2 模式的使用

  1. 创建模式的语法:

    CREATE SCHEMA schemaname [ AUTHORIZATION username ] [ schema_element [ ... ] ]
    
    CREATE SCHEMA AUTHORIZATION username [ schema_element [ ... ] ]

    备注:

  2. 创建名为"osdba"的模式:

    CREATE SCHEMA osdba;
  3. 查看已有的模式:

    \dn

    备注:均在命令行模式下运行

  4. 删除模式:

    DROP SCHEMA osdba;
  5. 为用户osdba创建名为osdba的模式

    CREATE SCHEMA AUTHORIZATION osdba;
  6. 修改名称和属性

    ALTER SCHEMA name RENAME TO newname
    ALTER SCHEMA name OWNER TO newowner

4.3.3 公共模式

  1. 默认访问模式中的对象,一般是模式名.表名(对象名),默认情况不写模式名的情况下,访问的是模式名是public模式

4.3.4 模式的搜索路径

  1. 显示当前搜索路径:

    SHOW search_path;

4.3.5 模式的权限:

  1. 回收public模式中的权限

    REVOKE CREATE ON SCHEMA public FROM PUBLIC;

    备注:

    第一个public是模式的名称

    第二个PUBLIC是指所有用户

4.3.6 模式的可移植性

有些数据库系统中可能根本没有模式,而是通过允许跨数据库访问来提供模式的功能,如MySQL。如果需要在这些数据库上实现最大的可移植性,或许不应该使用模式。假设MySQL实例中有3个数据库,在移植到PostgreSQL中时,或许你应该建3个模式,使其与MySQL实例中的3个数据库相对应,而不是在PostgreSQL中建3个数据库与之对应。

最后更新于