• postgresql schema模式


    转载地址:【传送门

    模式(schema)实际上一个命名表的集合。也可以包含一个schema视图,索引,序列,数据类型,运算符和函数。Schema是满足类似于在操作系统级别的目录,但该模式不能嵌套。 CREATE SCHEMA PostgreSQL语句创建一个模式(schema)。

    语法

    创建型模式的基本语法如下: yiibai.com

    CREATE SCHEMA name;
      

    其中,name是模式的名称。 www.yiibai.com

    在Schema中创建表的语法

    The basic syntax to create table in schema is as follows:

    CREATE TABLE myschema.mytable (
    ...
    );
      

    Example

    Let us see an example for creating a schema. Connect to the database testdb and create a schemamyschema as follows:

    testdb=# create schema myschema;
    CREATE SCHEMA
     yiibai.com 

    The message "CREATE SCHEMA" signifies that the schema is created successfully. yiibai.com

    Now, let us create a table in the above schema as follows: yiibai.com

    testdb=# create table myschema.company(
       ID   INT              NOT NULL,
       NAME VARCHAR (20)     NOT NULL,
       AGE  INT              NOT NULL,
       ADDRESS  CHAR (25) ,
       SALARY   DECIMAL (18, 2),
       PRIMARY KEY (ID)
       );
      

    This will create an empty table. You can verify the table created with the command below:

    testdb=# select * from myschema.company;
      

    This would produce following result:

     id | name | age | address | salary
    ----+------+-----+---------+--------
    (0 rows)
      

    删除模式语法

    To drop a schema if it's empty (all objects in it have been dropped), then use:

    DROP SCHEMA myschema;
      

    To drop a schema including all contained objects, use:

    DROP SCHEMA myschema CASCADE;
     yiibai.com 

    使用模式的优势

    • It allows many users to use one database without interfering with each other.

    • It organizes database objects into logical groups to make them more manageable.

    • Third-party applications can be put into separate schemas so they do not collide with the names of other objects.

    ------------------------------------------------  分割线 ----------------------------------------------

    转载地址:【传送门

     一个数据库包含一个或多个命名的模式,模式又包含表。模式还包含其它命名的对象,包括数据类型、函数,以及操作符。同一个对象名可以在不同的模式里使用而不会导致冲突; 比如,schema1和myschema都可以包含叫做mytable的表。和数据库不同,模式不是严格分离的:一个用户可以访问他所连接的数据库中的任意模式中的对象,只要他有权限。
        我们需要模式有以下几个主要原因:
        1). 允许多个用户使用一个数据库而不会干扰其它用户。
        2). 把数据库对象组织成逻辑组,让它们更便于管理。
        3). 第三方的应用可以放在不同的模式中,这样它们就不会和其它对象的名字冲突。
        
        1. 创建模式:
        CREATE SCHEMA myschema;
        通过以上命令可以创建名字为myschema的模式,在该模式被创建后,其便可拥有自己的一组逻辑对象,如表、视图和函数等。
        
        2. public模式:
        在介绍后面的内容之前,这里我们需要先解释一下public模式。每当我们创建一个新的数据库时,PostgreSQL都会为我们自动创建该模式。当登录到该数据库时,如果没有特殊的指定,我们将以该模式(public)的形式操作各种数据对象,如:
        CREATE TABLE products ( ... ) 等同于 CREATE TABLE public.products ( ... )
        
        3. 权限:
        缺省时,用户看不到模式中不属于他们所有的对象。为了让他们看得见,模式的所有者需要在模式上赋予USAGE权限。为了让用户使用模式中的对象,我们可能需要赋予额外的权限,只要是适合该对象的。PostgreSQL根据不同的对象提供了不同的权限类型,如:
        GRANT ALL ON SCHEMA myschema TO public; 
        上面的ALL关键字将包含CREATEUSAGE两种权限。如果public模式拥有了myschema模式的CREATE权限,那么登录到该模式的用户将可以在myschema模式中创建任意对象,如:
        CREATE TABLE myschema.products (
            product_no integer,
            name text,
            price numeric CHECK (price > 0),
        );
        在为模式下的所有表赋予权限时,需要将权限拆分为各种不同的表操作,如:
        ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
        GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES TO public;
        在为模式下的所有Sequence序列对象赋予权限时,需要将权限拆分为各种不同的Sequence操作,如:
        ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
        GRANT SELECT, UPDATE, USAGE ON SEQUENCES TO public;
        在为模式下的所有函数赋予权限时,仅考虑执行权限,如:
        ALTER DEFAULT PRIVILEGES IN SCHEMA myschema
        GRANT EXECUTE ON FUNCTIONS TO public;
        可以看出,通过以上方式在public模式下为myschema模式创建各种对象是极为不方便的。下面我们将要介绍另外一种方式,即通过role对象,直接登录并关联到myschema对象,之后便可以在myschema模式下直接创建各种所需的对象了。
        CREATE ROLE myschema LOGIN PASSWORD '123456'; --创建了和该模式关联的角色对象。
        CREATE SCHEMA myschema AUTHORIZATION myschema; --将该模式关联到指定的角色,模式名和角色名可以不相等。
        在Linux Shell下,以myschema的角色登录到数据库MyTest,在密码输入正确后将成功登录到该数据库。
        /> psql -d MyTest -U myschema
        Password:
        MyTest=> CREATE TABLE test(i integer);
        CREATE TABLE
        MyTest=> d   --查看该模式下,以及该模式有权限看到的tables信息列表。
                  List of relations
         Schema     |   Name   | Type  |  Owner
        ------------+---------+------+----------
         myschema |   test     | table  | myschema
        (1 rows)
        
        4. 删除模式:
        DROP SCHEMA myschema;
        如果要删除模式及其所有对象,请使用级联删除:
        DROP SCHEMA myschema CASCADE;
        
        5. 模式搜索路径:
        我们在使用一个数据库对象时可以使用它的全称来定位对象,然而这样做往往也是非常繁琐的,每次都不得不键入owner_name.object_name。PostgreSQL中提供了模式搜索路径,这有些类似于Linux中的$PATH环境变量,当我们执行一个Shell命令时,只有该命令位于$PATH的目录列表中,我们才可以通过命令名直接执行,否则就需要输入它的全路径名。PostgreSQL同样也通过查找一个搜索路径来判断一个表究竟是哪个表,这个路径是一个需要查找的模式列表。在搜索路径里找到的第一个表将被当作选定的表。如果在搜索路径中 没有匹配表,那么就报告一个错误,即使匹配表的名字在数据库其它的模式中存在也如此。
        在搜索路径中的第一个模式叫做当前模式。除了是搜索的第一个模式之外,它还是在CREATE TABLE没有声明模式名的时候,新建表所属于的模式。要显示当前搜索路径,使用下面的命令:
        MyTest=> SHOW search_path;
          search_path
        ----------------
         "$user",public
        (1 row)
        可以将新模式加入到搜索路径中,如:
        SET search_path TO myschema,public;
        为搜索路径设置指定的模式,如:
        SET search_path TO myschema; --当前搜索路径中将只是包含myschema一种模式。


  • 相关阅读:
    使用IOCP完成端口队列做任务队列
    对Zlib单元进行再封装
    XmlReader/XmlWriter 类
    TextReader/TextWriter 的类
    LINQ to XML
    Xml序列化
    动态Linq(结合反射)
    设计模式总结
    深入了解.Net上下文
    应用程序域
  • 原文地址:https://www.cnblogs.com/marvelousone/p/7655124.html
Copyright © 2020-2023  润新知