PostgreSQL相关知识概念
本文主要介绍PostgreSQL数据库的一些重要知识点,
包括数据库、模式、表空间、用户/角色等概念和关系,
帮助用户理解PostgreSQL数据库的重要概念,
从而能够更好的使用PostgreSQL。
1.ROLE/USER区别
通常ROLE(角色)和USER(用户)是两个不同的概念,
但是在PostgreSQL里没有区分用户和角色,
这里容易和其他数据库的概念混淆,
在PostgreSQL两者区别仅在于用户比角色多了登陆权限。
下面分别是创建ROLE和USER的SQL:
CREATE ROLE kanon1 PASSWORD 'kanon1';
CREATE USER kanon2 PASSWORD 'kanon2';
创建完成后ROLE kanon1不能登陆,
但是USER kanon2能够登陆。
为ROLE kanon1增加LOGIN权限:
ALTER ROLE kanon1 LOGIN;
然后kanon1也能够登陆了。
CREATE USER除了默认具有LOGIN权限之外,
其他与CREATE ROLE是完全相同的。
下面两条SQL语句是等价的:
CREATE ROLE kanon PASSWORD 'kanon' LOGIN;
CREATE USER kanon PASSWORD 'kanon';
角色(用户)可以拥有全局数据库对象,
可以拥有数据库服务器全局范围内的权限,
用于对数据库所有的对象进行管理。
角色不特定于某个单独的数据库,
如果需要管理数据库系统则必须连接到一个数据库上。
2.DATABASE与SCHEMA的关系
SCHEMA(模式)是对DATABASE(数据库)逻辑分割,
SCHEMA可以理解为命名空间,
SCHEMA就是数据库对象的集合。
一个DATABASE至少有一个SCHEMA,
在创建DATABASE时,
自动创建一个默认SCHEMA public。
这个DATABASE创建的所有对象(表、函数、视图、索引、序列等),
如果没有指定SCHEMA,
默认都是属于public。
用户登录到PostgreSQL,连接到一个数据库后,
由于一个DATABASE可以有多个SCHEMA,
需要通过DATABASE的search_path来确定SCHEMA的搜索顺序,
可以通过命令SHOW查看具体的顺序,
也可以通过命令SET来设置顺序。
查看当前数据库搜索路径:
SHOW search_path;
设置新的搜索路径:
SET search_path TO myschema,public;
官方建议:
在管理员创建一个DATABASE后,
应该为所有可以连接到该DATABASE的用户,
分别创建一个与用户名相同的SCHEMA,
然后将search_path设置为"$user",
这样当某个用户连接上来后,
默认使用的是与之同名的SCHEMA,
这是一个好的设计架构。
3.为DATABASE对象指定SCHEMA
数据库中一个对象的完整名称为SCHEMA.object,
而不是USER.object。
如果在操作对象时不指定SCHEMA,
则使用登陆用户的默认SCHEMA。
比如查询一个表时,
没有指明该表所属的SCHEMA,
系统自动在表上加上默认的SCHEMA名。
查询freeoa用户的emp表:
select * from emp;
假设freeoa用户默认的SCHEMA为freeoa,
则实际上SQL语句的完整写法:
select * from freeoa.emp;
创建schema kanon,属主为kanon:
CREATE SCHEMA kanon OWNER kanon;
创建表test,指定属于schema kanon:
CREATE TABLE kanon.test (id integer not null);
同一个对象名可以在不同的SCHEMA里使用而不会导致冲突,
比如schema1和schema2都可以包含叫做test的表,
和DATABASE不同,SCHEMA不是严格分离的,
一个用户只要有权限,
可以访问一个DATABASE中的任意SCHEMA。
用户可以允许别人在自己的SCHEMA里创建对象,
需要赋予其他用户在该SCHEMA的CREATE权限。
默认每个人都在SCHEMA public上有CREATE权限,
所以连接到数据库上的用户都可以在public创建对象。
这个权限可以撤销:
REVOKE CREATE ON public FROM PUBLIC;
第一个public是SCHEMA,
第二个PUBLIC是指所有用户。
4.表空间
在PostgreSQL中,表空间是一个目录,
表空间是实际的数据存储的地方,
存储的是它所包含的数据库的各种物理文件。
一个数据库schema可能存在于多个表空间,
一个表空间也可以为多个schema服务。
创建数据库使用CREATE DATABASE dbname,
默认的数据库所有者是当前创建数据库的用户,
默认的表空间是系统的默认表空间pg_default。
在PostgreSQL中,数据库的创建是通过克隆数据库模板来实现的。
由于CREATE DATABASE dbname并没有指明数据库模板,
所以默认使用template1数据库当作克隆模板,
template1中的全部对象将被同步克隆到新的数据库中。
由于template1数据库的默认表空间是pg_default,
所以新的数据库也使用默认表空间是pg_default,
pg_default这个表空间是在数据库初始化时创建的。
创建数据库时指定数据库模板和表空间:
CREATE DATABASE dbname OWNER kanon TEMPLATE template1 TABLESPACE tablespacename;
表空间的作用:
通过使用表空间,管理员可以控制磁盘的布局。
表空间的最常用的作用是优化性能,
比如一个最常用的索引可以建立在非常快的硬盘上,
而不太常用的表可以建立在便宜的硬盘上,
比如用来存储用于进行归档文件的表。
PostgreSQL相关知识概念的更多相关文章
- 常用SQL操作(MySQL或PostgreSQL)与相关数据库概念
本文对常用数据库操作及相关基本概念进行总结:MySQL和PostgreSQL对SQL的支持有所不同,大部分SQL操作还是一样的. 选择要用的数据库(MySQL):use database_name; ...
- Golang(十)TLS 相关知识(一)基本概念原理
0. 前言 最近参与一个基于 BitTorrent 协议的 Docker 镜像分发加速插件的开发,主要参与补充 https 协议 学习了 TLS 相关知识,下面对之前的学习做一下简单总结 参考文献:T ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- listener监听器的相关知识
从别人的博客上我学习了listener的相关知识现在分享给大家 1.概念: 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上 ...
- 【转】java NIO 相关知识
原文地址:http://www.iteye.com/magazines/132-Java-NIO Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的 ...
- Java 容器相关知识全面总结
Java实用类库提供了一套相当完整的容器来帮助我们解决很多具体问题.因为我本身是一名Android开发者,包括我在内很多安卓开发,最拿手的就是ListView(RecycleView)+BaseAda ...
- HTML入门基础教程相关知识
HTML入门基础教程 html是什么,什么是html通俗解答: html是hypertext markup language的缩写,即超文本标记语言.html是用于创建可从一个平台移植到另一平台的超文 ...
- 《Python网络编程》学习笔记--从例子中收获的计算机网络相关知识
从之前笔记的四个程序中(http://www.cnblogs.com/take-fetter/p/8278864.html),我们可以看出分别使用了谷歌地理编码API(对URL表示地理信息查询和如何获 ...
- python实现单例模式的三种方式及相关知识解释
python实现单例模式的三种方式及相关知识解释 模块模式 装饰器模式 父类重写new继承 单例模式作为最常用的设计模式,在面试中很可能遇到要求手写.从最近的学习python的经验而言,singlet ...
随机推荐
- Activity 详解
1.活动的生命周期 1.1.返回栈 Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈.栈是一种先进后出的数据结构,在默认情况下,每当我们启 ...
- ubuntu基础
下载地址: http://cdimage.ubuntu.com/releases/ #:配置多网卡静态IP地址和路由 root@ubuntu:~# vim /etc/netplan/01-netcfg ...
- 【Linux】【Services】【Web】Haproxy
1. 概念 1.1. 官方网站 http://www.haproxy.org/ 2. 安装 yum安装 yum -y install haproxy keepalived 配置haproxy日志,修改 ...
- zookeeper 异常 :stat is not executed because it is not in the whitelist. Connection closed b
1 .问题 1.启动 zookeeper 后 用指令: telnet 127.0.0.1 2181 连接 提示输入指令 :stat 后报错,然后关闭连接 2.问题解决: 修改启动指令 zkServe ...
- 使用递归方法,遍历输出以.java结尾的文件
package cn.itcast.demo01;import java.io.File;/** * @author newcityman * @date 2019/7/27 - 19:17 * 题目 ...
- SpringMvc分析
1.用户单击某个请求路径,发起一个request请求,此请求会被前端控制器(DispatcherServlet)处理 2.前端控制器(DispatcherServlet)请求处理器映射器(Handle ...
- PowerDotNet平台化软件架构设计与实现系列(07):数据同步平台
上文介绍定时任务调度平台的时候提到,定时任务调度平台的类模式一般用于处理耗时较长的任务.但是根据经验,有些耗时较长的任务,可以通过简化业务逻辑.分页.批量多次处理,改造为耗时较小的适合使用RESTfu ...
- LuoguP7911 [CSP-J 2021] 网络连接 题解
Content 题目过于难解释,请前往题面查看.以下直接给出本题做法. Solution 入门组 T3 在我印象中向来都不是很容易能做出来的题目,但是今年这个 T3 不得不说还是挺好做的. 我们先不妨 ...
- THUSC 2021 游记
想了想不往博客园放不行,还是放上来了. 原文 \[\texttt{Brief Introduction} \] 众所周知,THUSC2021 5 月 15-16 日在杭州市 XJ 中学举办,然而由于 ...
- CF23A You're Given a String... 题解
Content 给定一个长度为 \(n\) 的字符串,求出至少出现两次的最长子串的长度. 数据范围:\(1\leqslant n\leqslant 100\). Solution 我们直接暴力求出每个 ...