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. WPF TextSelection获取选中部分内容

    一.简单实例 //TextSelect继承自TextRange TextSelection selection = richTextBox.Selection; //1.获取选中内容 string r ...

  2. awr相关指标解析

    awr相关指标解析 2016年11月11日 15:09

  3. Typescript 团队合作的利器

    前言 在介绍Typescript 之前,我需要隆重介绍一个人: 安德斯·海尔斯伯格(Anders Hejlsberg,1960.12~),丹麦人,Turbo Pascal编译器的主要作者,Delphi ...

  4. Objective-C和C++的区别

    1.都是有C语言延伸而来2.OC是完全动态的,C++是部分动态的3.OC不支持多继承,通过代理 类别 协议优雅的实现了相关的一系列特性4.调用机制不同OC里面叫发送消息  C++叫做调用函数数5.OC ...

  5. 10集合:List<T>,Dictionary<K,V>

    List<T>泛型集合 List<T>是C#中一种快捷.易于使用的泛型集合类型,使用泛型编程为编写面向对象程序增加了极大的效率和灵活性.   1.List<T>用法 ...

  6. java基础之反射机制

    一.概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为jav ...

  7. c++面试(一)

    1.在c++中可以通过"::"来直接操作全局变量. 2.i++与++i效率的比较. (1)內建数据类型时,他们的效率差别不大. (2)自定义数据类型(类等)的情况,(++i)可以返 ...

  8. 用arm-linux-gcc v4.3.4交叉编译Qt4.8.3

    1.解压缩 #tar zxvf  qt-everywhere-opensource-src-4.8.3.tar.gz 2. configure #mkdir buildarm-static #cd b ...

  9. DOM对象控制HTML无素——详解3

    创建元素节点createElement createElement()方法可创建元素节点.此方法可返回一个 Element 对象. 语法: document.createElement(tagName ...

  10. Html5游戏框架createJs的简单用法

    声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢!http://www.it165.net/pro/html/201403/11105.html 楼主记忆力不好,最近刚好用了一下create ...