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. (转)修改ECSHOP前后台的title中的ecshop

    前台部分: 1:去掉头部TITLE部分的ECSHOP演示站 Powered by ecshop 前者在后台商店设置 - 商店标题修改 后者打开includes/lib_main.php $page_t ...

  2. ui线程和后台线程异步

    private void Button_Click(object sender, RoutedEventArgs e) { CreateElementOnSeperateThread(() => ...

  3. 国际化 native2ascii用法

    cmd下输入: native2ascii -encoding GBK(需要编译成哪种语言) (中文文件路劲) (英文文件路劲) 其他固定 例如 native2ascii -encoding GBK C ...

  4. 【转】iOS-Core-Animation-Advanced-Techniques(六)

    原文:http://www.cocoachina.com/ios/20150106/10839.html 基于定时器的动画和性能调优 基于定时器的动画 我可以指导你,但是你必须按照我说的做. -- 骇 ...

  5. java_设计模式_适配器模式_Adapter Pattern(2016-08-09)

    概念 将一个接口转换成客户希望的另外一个接口.(该模式使得原本不兼容的类可以一起工作). UML图 适配器模式有类的适配器模式和对象的适配器模式两种不同的形式. (1)对象的适配器模式结构图 (2)类 ...

  6. hdoj1847(博弈论)

    代码: #include<stdio.h>int main(){ int N; while(scanf("%d",&N)!=EOF) printf(N%3==0 ...

  7. 【BZOJ2648】【kd_tree】SJY摆棋子

    Description   这天,SJY显得无聊.在家自己玩.在一个棋盘上,有N个黑色棋子.他每次要么放到棋盘上一个黑色棋子,要么放上一个白色棋子,如果是白色棋子,他会找出距离这个白色棋子最近的黑色棋 ...

  8. 24种设计模式--多例模式【Multition Pattern】

    这种情况有没有?有!大点声,有没有?有,是,确实有,就出现在明朝,那三国期间的算不算,不算,各自称帝,各有各的地盘,国号不同.大家还 记得那首诗<石灰吟>吗?作者是谁?于谦,他是被谁杀死的 ...

  9. Java compile时,提示 DeadCode的原因

    在工程编译时,编译器发现部分代码是无用代码,则会提示:某一行代码是DeadCode.今天compile工程的时候发现某一个循环出现这个问题,如下: public void mouseOver(fina ...

  10. How far away ?

    #include<iostream> #include <algorithm> using namespace std; const int M=40010; int dis[ ...