zoukankan      html  css  js  c++  java
  • 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时应该建立三个模式,使其与三个数据库相对应;
  • 相关阅读:
    Linux下源码安装Kong网关
    nodejs.cn-Node.js-入门教程:Node.js 从命令行接收参数
    nodejs.cn-Node.js-入门教程:如何使用 Node.js REPL
    nodejs.cn-Node.js-入门教程:如何从 Node.js 读取环境变量
    nodejs.cn-Node.js-入门教程:如何从 Node.js 程序退出
    nodejs.cn-Node.js-入门教程:从命令行运行 Node.js 脚本
    nodejs.cn-Node.js-入门教程:V8 JavaScript 引擎
    nodejs.cn-Node.js-简单介绍:Node.js 与浏览器的区别
    nodejs.cn-Node.js-简单介绍:使用 Node.js 需要了解多少 JavaScript
    nodejs.cn-Node.js-简单介绍:如何安装 Node.js
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/5023740.html
Copyright © 2011-2022 走看看