数据库与模式
模式(schema)是对数据库(database)逻辑分割
在数据库创建的同时,就已经默认为数据库创建了一个模式--public,这也是该数据库的默认模式。所有为此数据库创建的对象(表、函数、试图、索引、序列等)都是常见在这个模式中的。
test2_user=# create database mypg; #创建一个数据库
CREATE DATABASE
test2_user=# \c mypg postgres #连接数据库
You are now connected to database "mypg" as user "postgres".
mypg=# \dn
List of schemas
Name | Owner
--------+----------
public | postgres
mypg=# CREATE TABLE test_a(id integer not null); #创建表,没有指定模式名,默认在public下
CREATE TABLE
mypg=# \d
List of relations
Schema | Name | Type | Owner
--------+--------+-------+----------
public | test_a | table | postgres
mypg=# create schema mypg; #创建模式mypg
CREATE SCHEMA
mypg=# create table mypg.b(id integer not null); #创建表的时候指定模式名
CREATE TABLE
mypg=# create table a(id integer not null);
CREATE TABLE
mypg=# \d
List of relations
Schema | Name | Type | Owner
--------+--------+-------+----------
public | a | table | postgres
public | test_a | table | postgres
mypg=# set search_path to public,mypg; #指定搜索路径
SET
mypg=# \d #查看数据库mypg的所有表
List of relations
Schema | Name | Type | Owner
--------+--------+-------+----------
mypg | b | table | postgres
public | a | table | postgres
public | test_a | table | postgres
数据库是被模式(schema)来切分的,一个数据库至少有一个模式,所有数据库内部的对象(object)是被创建于模式的
官方建议是这样的:在管理员创建一个具体数据库后,应该为所有可以连接到该数据库的用户分别创建一个与用户名相同的模式,然后,将search_path设置为"$user",
=====
表空间与数据库
数据库创建语句CREATE DATABASE dbname 默认的数据库所有者是当前创建数据库的角色,默认的表空间是系统的默认表空间--pg_default
mypg=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------------+------------+----------+-------------+-------------+---------------------------
exampledb | dbuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/dbuser +
| | | | | dbuser=CTc/dbuser
hq | dbuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
mydb | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
mypg | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
test1_user | test1_user | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/test1_user +
| | | | | test1_user=CTc/test1_user
test2_user | test1_user | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
(9 rows)
在PostgreSQL中,数据的创建是通过克隆数据库模板来实现
由于CREATE DATABASE dbname并没有指明数据库模板,所以系统将默认克隆template1数据库,得到新的数据库dbname
而template1数据库的默认表空间是pg_default,这个表空间是在数据库初始化时创建的,所以所有template1中的对象将被同步克隆到新的数据库中
mypg=# \c template1 #连接数据库template1 
template1=# \d #下面没有任何表
No relations found.
template1=# \dn
List of schemas
Name | Owner
--------+----------
public | postgres
(1 row)

template1=# CREATE TABLE yhq(id integer not null,date TIMESTAMP NOT NULL DEFAULT LOCALTIMESTAMP(0)); #在template1下面创建一个表
CREATE TABLE
template1=# INSERT INTO yhq (id) VALUES (1); #并插入一条记录
INSERT 0 1
template1=# select * from yhq;
id | date
----+---------------------
1 | 2018-12-13 16:03:10
template1=# select *from pg_tablespace; #查看数据库的表空间
spcname | spcowner | spcacl | spcoptions
------------+----------+--------+------------
pg_default | 10 | |
pg_global | 10 | |
template1=# \h create tablespace  #查看创建表空间的语法
Command: CREATE TABLESPACE
Description: define a new tablespace
Syntax:
CREATE TABLESPACE tablespace_name
[ OWNER { new_owner | CURRENT_USER | SESSION_USER } ]
LOCATION 'directory'
[ WITH ( tablespace_option = value [, ... ] ) ]

[root@mysqlhq local]# mkdir /usr/local/pgdata  #创建一个空目录
[root@mysqlhq local]# chown postgres:postgres /usr/local/pgdata/ #指定权限

template1=# create tablespace yhq owner postgres location '/usr/local/pgdata'; #创建一个表空间,并指定路径
CREATE TABLESPACE
template1=# CREATE DATABASE yhq1 TEMPLATE template1 OWNER postgres TABLESPACE yhq; #创建数据库,指定模板和表空间
CREATE DATABASE
template1=# \l
yhq1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template1=# \c yhq1 #连接新创建的数据库
You are now connected to database "yhq1" as user "postgres".
yhq1=# \d
List of relations
Schema | Name | Type | Owner
--------+------+-------+----------
public | yhq | table | postgres
(1 row)

yhq1=# select * from yhq; #里面确实存在数据,并确认来模板template1
id | date
----+---------------------
1 | 2018-12-13 16:03:10
(1 row)
[root@mysqlhq local]# cd pgdata/ #进入刚创建的表空间路径
[root@mysqlhq pgdata]# ll
total 0
drwx------ 3 postgres postgres 19 Dec 13 16:11 PG_9.5_201510051
[root@mysqlhq pgdata]# cd PG_9.5_201510051/
[root@mysqlhq PG_9.5_201510051]# ll
total 12
drwx------ 2 postgres postgres 8192 Dec 13 16:11 25403  #这个路径下面,有一堆的文件

postgresql 数据库,模式,表空间的关系的更多相关文章

  1. 分享知识-快乐自己: Oracle数据库实例、用户、表、表空间之间关系

    数据库: Oracle数据库是数据的物理存储.这就包括(数据文件ORA或者DBF.控制文件.联机日志.参数文件). 其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库 ...

  2. ORACLE RMAN备份及还原 RMAN能够进行增量备份:数据库,表空间,数据文件

    ORACLE RMAN备份及还原   RMAN能够进行增量备份:数据库.表空间.数据文件 仅仅有使用过的block能够被备份成backup set 表空间与数据文件相应关系:dba_data_file ...

  3. oracle之二表和表空间的关系

    表和表空间的关系 建一个使用缺省值的表空间SQL> create tablespace a datafile '/u01/data/urpdb/a01.dbf' size 10m; 利用orac ...

  4. orale数据库.实例.表空间.用户.表

    近期因为工作原因接触到Oracle数据库.了解到Oracle和mysql的结构上还是有很大的区别的. Oracle数据库---实例---表空间---用户---表 我们将从这5个方面来了解Oracle ...

  5. Oracle 删除用户和表空间////Oracle创建删除用户、角色、表空间、导入导出、...命令总结/////Oracle数据库创建表空间及为用户指定表空间

    Oracle 使用时间长了, 新增了许多user 和tablespace. 需要清理一下 对于单个user和tablespace 来说, 可以使用如下命令来完成. 步骤一:  删除user drop ...

  6. Oracle数据库查看表空间sql语句

    转: Oracle数据库查看表空间sql语句 2018-09-03 15:49:51 兰海泽 阅读数 6212   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出 ...

  7. 在Oracle中数据库、表空间、表之间的关系

    在oracle中,表空间是存储概念上的,建立表空间需要有对应的数据文件,数据文件建立好之后直接会把一定的磁盘空间分配给它,这样可以对数据库的存储空间进行有效的管理.然后在建表的时候指定对应的表空间,该 ...

  8. oracle登录管理员创建数据库和表空间

    登录管理员最高权限账号 cmd输入sqlplus 回车,或者直接打开sqlplus 用户名:sys 密码:sys as sysdba 1.首先,创建(新)用户: create user usernam ...

  9. (Les16 执行数据库恢复)-表空间恢复

    NOARCHIVELOG模式下丢失了数据文件     数据库处于NOARCHIVELOG模式时,如果丢失任何数据文件,执行以下步骤         1.如果实例尚未关闭,请关闭实例         2 ...

随机推荐

  1. jstl标签 c:if和c:choose

    <c:if test="${test == null}">test为null</c:if> 其意思是,如果test 为 null,那么就打印 “test为n ...

  2. SEM竞价数据基本分析方法

    今天我们从账户数据表现来看一看怎样通过数据分析,判断账户出现的问题及解决思路.也欢迎大家提出意见,共同讨论进步. 首先我们从关键词报告来分析数据: 以上图数据为例.(设定该行业CPC均价为8) 先说下 ...

  3. Linux自定义别名alias重启失效问题

    Linux上的别名功能非常方便,例如ll可以显示文件列表的长信息,但是却不是以human能读懂的方式显示,所以我尝试直接在命令行中自定义一个别名: alisa lk='ls -lh' 然后lk就能正常 ...

  4. 算法总结之 数组的partition调整 三个值的升序

    给定一个数组arr, 其中只可能有 0,1,2三个值,请实现arr排序 另一种问法: 有一个数组,只有红 蓝 黄 球,请事先红球全放在数组的左边,蓝球放中间,黄球放右边 另一种问法: 有一个数组,再给 ...

  5. 【bzoj1040】骑士[ZJOI2008](树形dp)

    题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1040 这道题,很明显根据仇恨关系构造出的图形是一堆环套树.如果是普通的树,就可以马上裸树 ...

  6. 利用CXF框架开发webservice

    开发服务端代码 1. web.xml文件中添加cxf的servlet 2. 定义接口 @WebService(targetNamespace="http://UserInfo.ws.com& ...

  7. js获取css样式方法

    一.CSS样式共有三种:内联样式(行间样式).内部样式.外部样式(链接式和导入式) <div id="a" style="width: 100px;height: ...

  8. ZooKeeper-znode概念与使用

    可以将ZK看作一个具有高可用性特征的文件系统.这个文件系统中没有文件和目录,而是统一使用节点(znode)的概念,称为znode.znode既可以作为保存数据的容器(如同文件),也可以作为保存其他zn ...

  9. Hadoop心跳机制源码分析

    正文: 一.体系背景 首先和大家说明一下:hadoop的心跳机制的底层是通过RPC机制实现的,这篇文章我只介绍心跳实现的代码,对于底层的具体实现,大家可以参考我的另几篇博客: 1. hadoop的RP ...

  10. JMeter ——Test fragment

    fragment 为片段,可以是一个不完整的用例.比如你可以把一个http请求保存为fragment,如果不这样做的话,你是必须先要添加一个测试计划-线程组-http请求的.你可以把某步骤一系列的请求 ...