postgresql下Schema和DataBase
database —> schema —> table
1.同一个实例下,不同database是不能相互访问的,即独立的。
2.同一个数据库,不同模式下的表是可以相互访问,即可共享的
3.不同模式下,表名可以是一样。也就是表在模式下是独立。
##授权某个库下的某个模式下有创建表的权限
grant create on database db_name to 'role_user';
grant create on schema sm_name to 'role_user';
类比理解:
postgresql中的database,可以看作mysql的一个实例
postgresql中的schema,可以看作mysql的database
postgresql中的table,可以看作mysql的table
postgresql的database和schema的理解_postgresql database schema-CSDN博客
=========================================================================================
PG的逻辑结构:
第一层是实例(Instance)。
第二层是数据库(Database);一个实例下有多个数据库;每个数据库之间是完全独立的。
第三层是Schema;数据库下面有多个Schema;其中“public” 是数据库创建时产生的。
每个Schema下面可以创建表,视图,索引,函数,序列,物化视图,外部表等等。
注意:
在PostgreSQL每个数据库是完全独立的;所以访问同一个实例下其他数据库需要借用 dblink或者fdw接口)。
在PostgreSQL同一实例下,不能直接访问其它数据库【MySQL可以,因为MYSQL跟PostgreSQL逻辑结构不一样,MYSQL实例中的数据库相当于PostgreSQL的第三层的Schema】
PostgreSQL教程--逻辑结构:实例、数据库、schema、表之间的关系_数据库schema和实例的区别-CSDN博客
=========================================================================================
实例/Database/Schema/对象关系
在PostgreSQL中,这几者之间关系为:
PG数据库服务(实例)
└ database1
└ schemaA
└ table_T1
└ table_T2
└ view_V1
└ schemaB
└ database2
└ schemaA
└ schemaB
└ database3
└ schemaA
└ schemaB
PG数据库服务(实例)中可以有多个数据库(database),在psql工具中可以通过\c切换所连接的库。每个数据库下有不同的shema、每个schema下有不同的对象。
MySQL没有上图中数据库概念,只有上图的schema(在MySQL中schema也称为database,实际应为schema)
在Oracle中,用户与Schema是绑定对应的,一个用户就是一个Schema。