psql-05数据库,模式

数据的组织结构

  • 数据库;表,索引;数据行
  • PostgreSQL中一个服务(实例)可以有多个数据库;而一个数据库不能属于多个实例;

数据库

创建数据库

create database name [owner] [template] [encoding] [tablespace] [connection limit].....
  • owner指定创建的数据库属于哪个用户;
  • template指定从哪个模版中创建数据库,默认为template1;
  • encoding创建新数据库使用的字符编码;
create databse test encoding 'LATIN1' template template0;

//上面必须使用template0,因为编码与区域设置必须与模版数据库相匹配;template0不包含任何会受字符集编码或排序影响的数据或索引;
  • tablespace指定和新数据库关联的表空间名称;

  • connection limit指定数据库可以接受多少并发的连接;默认-1无限制;

修改数据库

alter database test connection limit 10;

//改名
alter databasw test01 rename to test02;

//修改配置参数
alter database test set enable_indexscan to off;

删除数据库

drop database [if exists] name; 
  • 不能在事务块中删除数据库;但能修改数据库;

模式

  • 可以理解为一个命名空间活目录;不同的模式下可以有相同的名称的表,函数等;
  • PostgreSQL中不能同时访问不同的数据库中的对象;而模式没有此限制;

使用模式的原因

  • 允许多个用户在使用同一数据库时彼此互不干扰;
  • 把数据库对象放在不同模式下,然后组织成逻辑组,便于管理;
  • 第三方应用可以放在不同的模式中,这样就不会和其他对象的名称冲突;

使用

  • 创建:
create schema name;

//为test_user用户创建一个同名的模式

create schema authorization test_user;

//创建模式的同时还可以在这个模式下创建一些表的视图

create schema test
  create table t1 (id int, title text),
  create table t2 (id int, content text)
  create view v1 as 
    select a.id, a.title, b.content from t1 a, t2 b where a.id = b.id;
  • 查看: \dn
  • 删除:drop schema name;
  • 修改
//修改名称
alter schema test rename to test1;

//修改属主
alter schema test owner to newowner; 
  • 查看非当前模式下的所有表: \d other_schema.*

公共模式

  • 实际上创建或访问模式中的对象格式为:schema_name.table_name
  • 通常情况下,创建一个新的数据库时会自动创建一个名为public的模式;

模式搜索路径

  • 为了简化定位对象,可以通过查找一个搜索路径来判断某个表在哪个模式下;
  • 查看当前搜索路径: show search_path; 默认为: "$user",public;
  • 修改当前搜索路径:
set search_path to newpath;  //当前session中

alter role username set search_path to newpath;  //修改权限下数据库的搜索路径

模式的权限

  • 一般用户无法访问模式中不属于他们的对象;
  • 若要访问,模式的所有者必须在模式上赋予usage权限; 创建赋予create权限;
  • 默认情况下每个人在public模式在都有create, usage权限;撤销:
revoke create on schema public from public; //最后一个public指所有用户;

模式的移植

  • SQL标准里,同一个模式里的对象是不能被不同用户所拥有的;有些数据了不允许创建和所有者不同名的模式(oracle);
  • 如果在PostgesSQL中为每个用户创建一个与用户名同名的模式,那么就能与Oracle数据库相兼容;
  • SQL标准里没有public模式概念;为了与其他数据库兼容不应该使用public模式;
  • 有些数据库系统没有模式或通过允许跨数据库访问来提供模式功能(mysql);假设mysql实例中有三个数据库,迁移到PostgreSQL时应该建立三个模式,使其与三个数据库相对应;
posted @ 2015-12-06 15:47  JinksPeng  阅读(301)  评论(0编辑  收藏  举报