数据的组织结构

  • 数据库;表,索引;数据行
  • 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时应该建立三个模式,使其与三个数据库相对应;

psql-05数据库,模式的更多相关文章

  1. Android-MediaProvider数据库模式

    原文地址:http://www.otechu.me/zh/2011/10/schema-of-android-mediaprovider-database/ 摘要: Android MediaProv ...

  2. DDL_数据库模式定义语言

    2014年11月22日 15:53:24 DDL 定义  define 概念:是用于描述数据库中要存储的现实世界实体的语言.一个数据库模式包含该数据库中所有实体的描述定义.               ...

  3. mysql引擎,完整的见表语句,数据库模式, 常用数据类型,约束条件

    引擎 show engines : 查看引擎 innodb(默认引擎):支持事务,行级锁,外键 myisam:查询效率由于innodb,不需要支持事务,行级锁,外键,可以选用myisam来优化数据库 ...

  4. ADO.Net两种访问数据库模式

    在连接模式下的数据库访问通常包括以下几个步骤: 1.通过数据库连接类(DbConnection)链接类指定到数据库服务器的数据库 2.通过数据库命令类(DbCommand)在数据库上执行SQL命令,可 ...

  5. Linux环境下将Oracle11g数据库模式由非归档模式(Noarchivelog)修改为自动归档模式(archivelog)

    1.查看Oracle当前版本 select * from v$version 如图所示: 2.切换到Oracle用户 su - oracle 如图所示: 3.进入sqlplus(此时尚未登录oracl ...

  6. 05 数据库入门学习-正则表达式、用户管理、pymysql模块

    一.正则表达式 正则表达式用于模糊查询,模糊查询已经讲过了 like 仅支持 % 和 _ 远没有正则表达式灵活当然绝大多数情况下 like足够使用 #语法 select *from table whe ...

  7. Oracle12c传统数据库模式 OGG

    OGG12C 配置 环境配置: 安装数据库Oracle12c 安装源端OGG:oggs  PORT:7809 安装目标端OGG:oggt   PORT:7909 源端和目标端地址:127.0.0.1 ...

  8. GoLang设计模式05 - 原型模式

    原型模式也是一种创建型模式,它可以帮助我们优雅地创建对象的拷贝.在这种设计模式里面,将克隆某个对象的职责交给了要被克隆的这个对象.被克隆的对象需要提供一个clone()方法.通过这个方法可以返回该对象 ...

  9. 来玩Play框架05 数据库

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 数据库是整个站点的数据储藏室.用户提交的数据可以存储在数据库中,以便未来使用.Pl ...

随机推荐

  1. 最喜欢的VS 键盘快捷键摘抄

    最喜欢的Visual Studio键盘快捷键(关闭)   336年最喜欢的 425年 你最喜欢的Visual Studio键盘快捷键是什么? 我总是让我的手在键盘上,远离鼠标! 一个请每回答. net ...

  2. Linux 添加新硬盘 LVM操作(作用:新增硬盘的卷管理)

    1 查看当前系统硬盘及分区情况 (注:linux中SCSI的第1个硬盘/dev/sda,第2个硬盘/dev/sdb依此类推) 2 初始化分区sdb为物理卷pv pvcreate /dev/sdb  / ...

  3. September 25th 2016 Week 40th Sunday

    Everything is good in its season. 万物逢时皆美好. Don't lose hope. Remeber that even a dog has its day. Onc ...

  4. Mac下java开发环境的搭建与开发工具的安装

    一.安装JDK 1.根据你当前环境的需要,下载相应的JDK并安装,安装步骤与其他Mac软件安装方法相同,我安装的是jdk1.8.0_74.jdk,mac中jdk1.8的默认位置:/Library/Ja ...

  5. viewpager中彻底性动态添加、删除Fragment

    为了解决彻底删除fragment,我们要做的是:1.将FragmentPagerAdapter 替换成FragmentStatePagerAdapter,因为前者只要加载过,fragment中的视图就 ...

  6. Runtime.getRuntime().exec()

    Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象 的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实 ...

  7. Python中如何读取xml的数据

    <?xml version="1.0" encoding="utf-8" ?> - <catalog> <maxid>4&l ...

  8. jQuery – 7.动态创建Dom、删除节点

    动态创建Dom节点     1.使用$(html字符串)来创建Dom节点     2.append方法用来在元素的末尾追加元素     案例:动态生成网站列表     3.prepend,在元素的开始 ...

  9. MyEclipse2014配置Tomcat开发JavaWeb程序JSP以及Servlet(转载)

    转载地址:http://blog.csdn.net/21aspnet/article/details/21867241 1.安装准备 1).下载安装MyEclipse2014,这已经是最新版本. 2) ...

  10. 在python中使用concurrent.futures实现进程池和线程池

    #!/usr/bin/env python # -*- coding: utf-8 -*- import concurrent.futures import time number_list = [1 ...