「OushuDB」用户指南数据定义 创建和管理数据库 (上)

简介: 数据库是一些SQL对象(“数据库对象”)的集合;通常每个数据库对象(表、函数等)属于并且只属于一个数据库。不过有几个系统表 (比如pg_database)属于整个集群并且可以在集群之内的每个数据库里访问。更准确地说,一个数据库是一个模式的集合,而模式包含表、函数等等。因此完整的层次是这样的:服务器→数据库→模式→表(或者其它类型对象,比如函数)。

image.png

1、概述

数据库是一些SQL对象(“数据库对象”)的集合;通常每个数据库对象(表、函数等)属于并且只属于一个数据库。不过有几个系统表 (比如pg_database)属于整个集群并且可以在集群之内的每个数据库里访问。更准确地说,一个数据库是一个模式的集合,而模式包含表、函数等等。因此完整的层次是这样的:服务器→数据库→模式→表(或者其它类型对象,比如函数)。

在与数据库服务器连接的时候,应用应该在它的连接请求里指明它想连接的数据库名称。不允许在一次连接里访问多个数据库(不过没有限制一个应用可以建立的连接数量)。数据库是物理上相互隔离的,对它们的访问控制是在连接层次进行的。如果一个OushuDB 服务器实例用于承载那些应该分隔并且相互之间并不知晓的用户和项目,那么我们建议把它们放在不同的数据库里。如果项目或者用户是相互关联的,并且可以相互使用对方的资源,那么应该把它们放在同一个数据库里,但可能在不同的模式中。模式只是一个纯粹的逻辑结构,谁能访问某个模式由权限系统控制。有关管理模式的更多信息在 http://www.oushu.com/docs/ch/privileges.html 里。

数据库是使用CREATE DATABASE命令创建的,使用DROP DATABASE命令删除。要查看现有数据库的集合,可以检查系统表pg_database,比如

SELECT datname FROM pg_database;

psql程序的l元命令和-l 命令行选项也可以用来列出现存的数据库。
Note:SQL标准把数据库称作”目录”(catalog),不过这两个东西实际上没有什么区别。

2、创建一个数据库

为了创建数据库,必须先运行OushuDB服务器(参阅 http://www.oushu.com/docs/ch/connections-and-authentication.html )。
数据库是用 SQL 命令CREATE DATABASE创建的:

CREATE DATABASE name;

这里的 name 遵循SQL标识符的一般规则。当前角色自动成为此新数据库的所有者。同时,以后删除这个数据库也是这个用户的特权 (同时还会删除其中的所有对象,即使那些对象有不同的所有者)。

创建数据库是一个有限制的操作。参阅 http://www.oushu.com/docs/ch/authentication-methods.html 获取如何赋予权限的信息。

连接数据库服务器才能执行CREATE DATABASE命令,那么第一个数据库是怎样创建的? 第一个数据库总是由initdb命令在初始化数据存储区的时候创建的 (参阅 http://www.oushu.com/docs/ch/creating-a-db.html )。这个数据库叫postgres。因此要创建第一个用户数据库时你可以与postgres连接。

在数据库集群初始化时会创建另一个名为template1 的数据库。在创建一个新的数据库时,实际上就是克隆(复制)了template1数据库。这就意味着你对template1所做的任何修改都会传播到所有随后创建的数据库中。因此,避免在template1中创建对象,除非你想要这些对象传播到每个新建的数据库中。

另外,为了方便,你还可以在shell中用createdb 程序来创建新数据库:

createdb dbname

createdb实质就是和postgres连接并执行CREATE DATABASE 命令,就像上面描述的那样。createdb的手册页包含它的使用细节。注意不带任何参数调用createdb将创建与当前用户名同名的数据库,这可能不是你想要的。
Note
http://www.oushu.com/docs/ch/client-authentication.html 包含有关如何限制哪些用户可以连接某个特定数据库的信息。
有时候你想为其它人创建一个数据库,并且应该使他成为新数据库的所有者,这样他就可以自己配置和管理这个数据库。要实现这个目标,使用下列命令中的一条:

CREATE DATABASE dbname OWNER rolename;

用于 SQL 环境,或:

createdb -O rolename dbname

用于命令行。只有数据库的超级用户才能为其它用户创建数据库(即,你不是其中的成员)。

目录
相关文章
|
2天前
|
SQL 数据库 微服务
微服务03,最简单的Demo,我们每个服务不能重复开发相同业务,微服务数据独立,不要访问其他微服务的数据库,微服务的特点之一是提供不能功能的数据库互相分割,微服务需要根据业务模块拆分,做到单一职责,
微服务03,最简单的Demo,我们每个服务不能重复开发相同业务,微服务数据独立,不要访问其他微服务的数据库,微服务的特点之一是提供不能功能的数据库互相分割,微服务需要根据业务模块拆分,做到单一职责,
|
2天前
|
SQL 自然语言处理 网络协议
【Linux开发实战指南】基于TCP、进程数据结构与SQL数据库:构建在线云词典系统(含注册、登录、查询、历史记录管理功能及源码分享)
TCP(Transmission Control Protocol)连接是互联网上最常用的一种面向连接、可靠的、基于字节流的传输层通信协议。建立TCP连接需要经过著名的“三次握手”过程: 1. SYN(同步序列编号):客户端发送一个SYN包给服务器,并进入SYN_SEND状态,等待服务器确认。 2. SYN-ACK:服务器收到SYN包后,回应一个SYN-ACK(SYN+ACKnowledgment)包,告诉客户端其接收到了请求,并同意建立连接,此时服务器进入SYN_RECV状态。 3. ACK(确认字符):客户端收到服务器的SYN-ACK包后,发送一个ACK包给服务器,确认收到了服务器的确
|
4天前
|
关系型数据库 MySQL 数据库
关系型数据库mysql数据增量恢复
【7月更文挑战第3天】
13 2
|
4天前
|
关系型数据库 MySQL Shell
关系型数据库mysql数据完全恢复
【7月更文挑战第3天】
12 2
|
4天前
|
数据处理 数据库 索引
数据库索引策略如何影响数据的读取效率?
【7月更文挑战第3天】数据库索引策略如何影响数据的读取效率?
7 2
|
3天前
|
前端开发 数据库
文本----富文本数据如何存入到数据库当中,解决方法,看其他大佬写的文章
文本----富文本数据如何存入到数据库当中,解决方法,看其他大佬写的文章
文本----富文本数据如何存入到数据库当中,解决方法,看其他大佬写的文章
|
5天前
|
存储 关系型数据库 MySQL
|
2天前
|
关系型数据库 MySQL 数据库
MybatisPlus添加数据数据库没有数据,数据消失,使用Navicate看不到数据,Navicate中Mysql的数据与idea的数据不一定同步,Navicate与idea的数据库同步,其实有分页
MybatisPlus添加数据数据库没有数据,数据消失,使用Navicate看不到数据,Navicate中Mysql的数据与idea的数据不一定同步,Navicate与idea的数据库同步,其实有分页
|
3天前
|
SQL 关系型数据库 MySQL
Navicate,数据库,Mysql,改表,4月29日Finished - Unsuccessfully,导出数据不妨,右键,备份一下Mysql数据库的内容,你想导入和导出数据不如,用查询的方式去做
Navicate,数据库,Mysql,改表,4月29日Finished - Unsuccessfully,导出数据不妨,右键,备份一下Mysql数据库的内容,你想导入和导出数据不如,用查询的方式去做
|
3天前
|
存储 小程序 数据库
【微信小程序-原生开发】实用教程08 - 开通微信云开发,操作云数据库新增数据(含修改数据权限),初始化云服务(含获取微信云环境 id),获取云数据,滚动公告栏
【微信小程序-原生开发】实用教程08 - 开通微信云开发,操作云数据库新增数据(含修改数据权限),初始化云服务(含获取微信云环境 id),获取云数据,滚动公告栏
7 0