• postgresql中的schema


    pg中的schema类似于mysql数据库的角色

    实例-->database-->schema-->数据库对象,表,视图,存储过程,函数等

    CREATE SCHEMA myschema;
    访问的时候需要写成schema_name.table_name的形式,比如

    select * from schema_name.table_name;
    CREATE TABLE schema_name.table_name(...);
    CREATE SCHEMA schema_name AUTHORIZATION user_name;创建一个名为schema_name的schema,他的owner是user_name
    

    删除schema
    DROP SCHEMA myschema;
    删除schema以及其中的所有对象
    DROP SCHEMA myschema CASCADE;
    创建时也可以不写schema名称,不写的时候默认schema名称是用户名

    数据库中会有默认的schema,名称为public
    可以在其中建表

    CREATE TABLE table_name;
    或者
    CREATE TABLE public.table_name;
    

    搜索路径
    每个数据库下面可能有多个schema,比如a数据库有b,c,d,e四个schema
    那么访问的时候就需要写成select * from a.table_name;或者select * from b.table_name;等
    SHOW search_path;//可以查看当前库下面的搜索路径
    如果不想写成select * from a.table_name;或者select * from b.table_name;
    则可以设置他的搜索路径
    SET search_path TO a,public;
    那么后续scheme a下的表进行访问的时候就可以直接使用select * from table_name进行查询

    show search_path
    search_path
    --------------
     "$user", public  //表示有个与当前用户同名的schema,和public两个schema
    

    如果其他用户想访问某个schema下的对象,则该schema的owner必须赋予其他用户的usage权限,如果需要做其他操作也需要赋予相应的权限在默认情况下,所有人都拥有在public模式上的CREATE和USAGE权限。

    REVOKE CREATE ON SCHEMA public FROM PUBLIC;//第一个“public”是模式,第二个“public”指的是“每一个用户”。第一种是一个标识符,第二种是一个关键词,所以两者的大小写不同,即收回所有用户在public 这个schema下的create权限

    查看当前数据库下的所有schema

    SELECT * FROM information_schema.schemata;
    mydb=> 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
    --------------+--------------------+--------------+-------------------------------+------------------------------+--------
    --------------------+----------
     mydb         | pg_catalog         | postgres     |                               |                              |
                        |
     mydb         | public             | postgres     |                               |                              |
                        |
     mydb         | information_schema | postgres     |                               |                              |
                        |
    (3 rows)
    
    mydb=> \c postgres
    You are now connected to database "postgres" as user "b1".
    postgres=> 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
    --------------+--------------------+--------------+-------------------------------+------------------------------+--------
    --------------------+----------
     postgres     | pg_catalog         | postgres     |                               |                              |
                        |
     postgres     | information_schema | postgres     |                               |                              |
                        |
     postgres     | public             | postgres     |                               |                              |
                        |
    (3 rows)
    

    系统目录模式

    除了public模式之外,还有pg_catalog模式,其中包含了各种系统表以及系统默认的数据类型操作符等等,一般在search_path中没有显示的定义pg_catalog的时候,会优先在这个schema搜索,如果需要自定义一些和pg_catalog下的同名对象的时候,可以显式的将pg_catalog放在一般在search_path中没有显示的定义pg_catalog的时候的末尾

  • 相关阅读:
    图标图片1
    korGE打包注意事项
    书摘1011
    ffmpeg转流rtp转udp
    ffmpeg文档
    ffmpeg http 推流服务器
    cpp笔记
    搭建shAadowsoacks 错误
    ffmpeg 开发板推流到ubuntu和pc
    gstreamer笔记
  • 原文地址:https://www.cnblogs.com/nanblog/p/16400487.html
Copyright © 2020-2023  润新知