17.2. 创建一个数据库集群(Database Cluster)

在你能做任何事情之前,你必须在磁盘上初始化一块存储空间。我们称这为一个数据库集群(database cluster). 一个Database cluster是一批被一个运行着数据库服务的示例所管理的数据库.初始化以后,一个database cluster将会包含一个名为 postgres的数据库,它是一个被一些工具、用户和第三方应用使用的默认数据库。数据库服务器本身不需要 postgres ,但是很多外部的程序会假设它存在。另外一个在每一个cluster初始化时创建的数据库叫做 template1. 就像它的名字所暗示,它会被用来作为一个创建后续数据库所使用的模板;它不应该被实际工作所使用(参考21章获取关于在一个集群中创建新的数据库的信息)

在文件系统术语中,一个database cluster是单个的目录,所有的数据会被存储在这个目录下。我们称这个目录为数据目录(data directory)或数据区域(data area).选择在哪个目录下存储您的数据完全取决于您,没有默认目录,尽管诸如/usr/local/pgsql/data或/var/lib/pgsql/data之类的目录作为数据目录是比较流行的。初始化一个database cluster,使用initdb命令,它是和PostgreSQL一起安装的。您期望的的database cluster文件系统目录使用选项 -D标注,如例:

$initdb -D /usr/local/pgsql/data

注意在您登录PostgreSQL用户账户之前必须先执行这个命令,这在上一节已经描述过了。(提示:您可以设置环境变量PGDATA来替换-D选项)

可供选择的,您也可以通过pg_ctl程序像下面这样运行 initdb

$pg_ctl -D /usr/local/pgsql/data initdb

如果您使用pg_ctl启动和停止服务器(查看17.3节)将会更加直观。这样的话在管理数据库服务器示例时pg_ctl将会是唯一的一个命令。

initdb将会尝试创建你指定的一个不存在的目录。很有可能您没有权限创建(如果您尊随我们的建议并创建了一个非特权账户)。在这种情况下,您应该创建这个目录(比如用root权限),然后改变这个目录的拥有者(owner)为PostgreSQL用户。以下示范应该如何做:

root# mkdir /usr/local/pgsql/data
root# chown postgres /usr/local/pgsql/data
root# su postgres
postgres$ initdb -D /usr/local/pgsql/data

如果数据目录已经存在且初始化了的话,initdb将不会运行。

由于数据目录包含了所有存储在数据库里的数据,因此应该有对未授权的访问的安全机制。initdb收回了所有其他用户的访问权限,除了PostgreSQL用户.

然而,尽管这个目录下的内容是安全的,默认的客户授权设置允许任何本地用户连接数据库甚至成为数据库超级用户(管理员)。如果您不信任本地的其他用户,我们建议您使用任意一种initdb的选项-W,--pwprompt或--pwfile来分配给数据库超级用户的密码。并且,指定-A md5或-A password,这样默认的 trust 授权模式不起作用;或者在运行initdb后,第一次启动您的数据库服务器之前修改生成的pg_hda.conf文件。(其他的合理的途径包括使用peer授权或文件系统权限来限制链接。查看19章获取更多信息)

initdb同时为database cluster初始化默认的locale,一般而言,它只是使用本地locale设置并将其应用到初始化的数据库中。为数据库指定一个其他的locale是可能的;更多的信息可以在22.1节找到。默认的应用在特定的database cluster上的排序(sort order)是被initdb设置的,并且如果您创建了使用不同的排序的新的数据库,除非您删除重建它,在template数据库中使用的order是不会改变的。使用其他的locale而不是使用C或POSIX会对性能产生影响。因此在第一次正确的选择选项是很重要的。

initdb同时为database cluster设置默认的字符集和encoding。一般而言应该选择匹配locale设置。更多细节查看22.3节

17.2.1 网络文件系统

很多安装在网络文件系统创建database cluster。有些直接用NFS,或者使用内部使用NFS的NAS来完成。PostgreSQL并非特定于NFS文件系统,意味着它使用NFS的方式和本地连接的驱动(DAS,直接连接的存储器)完全一致。如果客户端和服务端的NFS实现未遵循标准的语意(semantics),这可能会产生可靠性问题(查看http://www.time-travellers.org/shane/papers/NFS_considered_harmful.html).具体而言,延时(异步)写入NFS服务器会产生可靠性问题;如果可以,尽量同步挂载(不用缓存)

postgresql使用文档之一 初始化数据存储区的更多相关文章

  1. 利用POI工具读取word文档并将数据存储到sqlserver数据库中

    今天实现了利用POI工具读取word文档,并将数据存储到sql数据库中,代码如下: package word; import java.io.File; import java.io.FileInpu ...

  2. MongoDB学习(查找文档和其他数据查找操作)

    理解Cursor对象和查询运算符 cursor对象 cursor对象相当于一个指针,可通过迭代它来访问MongdoDB数据库中的一组对象. 在使用 find() 方法查询时,返回的并非实际文档,而是一 ...

  3. Oracle 11g 单实例到单实例OGG同步实施文档-RMAN 初始化

    Oracle 11g 单实例到单实例OGG同步实施文档-RMAN 初始化 2018-06-07 13:455170原创GoldenGate 作者: leo 本文链接:https://www.cndba ...

  4. Oracle 11g 单实例到单实例OGG同步实施文档-EXPDP初始化

    Oracle 11g 单实例到单实例OGG同步实施文档-EXPDP初始化 2018-06-07 00:446470原创GoldenGate 作者: leo 本文链接:https://www.cndba ...

  5. postgresql pgsql最新版安装指南及数据存储路径更改及主从配置

    postgresql pgsql最新版安装指南及数据存储路径更改及主从配置 安装指南 首先在apt的list添加你当前系统版本对应的apt列表 目前官网有16.04,14.04,12.04 分别对应下 ...

  6. 从多个XML文档中读取数据用于显示webapi帮助文档

    前言: 你先得知道HelpPageConfig文件,不知道说明你现在不需要这个,所以下文就不用看了,等知道了再看也不急.当然如果你很知道这个,下文也不用看了,因为你会了. 方法一: new XmlDo ...

  7. C#动态生成Word文档并填充数据

    C#也能动态生成Word文档并填充数据 http://www.cnblogs.com/qyfan82/archive/2007/09/14/893293.html 引用http://blog.csdn ...

  8. 51单片机RAM 数据存储区学习笔记

    转自:http://www.eepw.com.cn/article/216237_2.htm 1.RAM keil C语言编程 RAM是程序运行中存放随机变量的数据空间.在keil中编写程序,如果当前 ...

  9. MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系

    MongoDB的集合(collection)可以看做关系型数据库的表,文档对象(document)可以看做关系型数据库的一条记录.但两者并不完全对等.表的结构是固定的,MongoDB集合并没有这个约束 ...

随机推荐

  1. HTML5 文件域+FileReader 读取文件(二)

    一.读取文本文件内容,指定字符编码 <div class="container"> <!--文本文件验证--> <input type="f ...

  2. Eclipse基本设置

    1.设置java的JDK:window->preferences->Java->Installed JREs->Add 2.设置文件默认打开方式: window->pre ...

  3. 我的第一个boke

    哈哈哈 接口

  4. iOS自动布局之autoresizingi

    对于iOS的app开发者来说,不会像Android开发者一样为很多的屏幕尺寸来做界面适配,因此硬编码的坐标也能工作良好,但是从设计模式上来说这不是好的做法.而且也还有一些问题,如iPhone5的适配, ...

  5. Java线程(学习整理)--1--守护线程

    1.什么是守护线程? 今天老师讲解我才知道有守护线程这回事!原来守护线程经常存在于我们的身边,比如:一个免费的网页游戏,里面都会或多或少有些插入性的广告!! 一般情况下,我们不会去点击这些广告的,但是 ...

  6. 【转载】C++应用引用计数技术

    原帖:http://www.cnblogs.com/chain2012/archive/2010/11/12/1875578.html 因为Windows的内核对象也运用了引用计数,所以稍作了解并非无 ...

  7. Window.onload事件

    window.onload是一个事件,当文档加载完成之后就会触发该事件,可以为此事件注册事件处理函数,并将要执行的脚本代码放在事件处理函数中,于是就可以避免获取不到对象的情况

  8. 使用Thinkphp框架开发移动端接口

     本文给大家分享的是使用thinkphp框架开发移动端接口的2种方法,一种是开发API,另外一种是实现移动端访问自动切换移动主题模板,从而实现伪app访问,下面我们就来详细看下如何实现吧. 方案一:给 ...

  9. Yii2的相关学习记录,前后台分离及migrate使用(七)

    最近一直忙其它的(其实是懒!),将<深入理解Yii2>看了一遍,一些当初没明白的稍微明了了点,然后又看yii2的图片上传等处理.富文本.restful什么的,但由于没进行到这里,只看也不管 ...

  10. php数组基础

    一.php数组的声明      1.数组中可以有任意类型的数据      2.长度可以变长      3.数组的分类:           a.索引数组:数组是以从0开始的帧数作为索引值       ...