热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PostgreSQL13第 18 章 服务器设置和操作18.2. 创建一个数据库集簇

PostgreSQL13.1中文手册第 18 章 服务器设置和操作18.2.

18.2. 创建一个数据库集簇

18.2.1. 二级文件系统的使用
18.2.2. 文件系统


在你能做任何事情之前,你必须在磁盘上初始化一个数据库存储区域。我们称之为一个数据库集簇(SQL标准使用的术语是目录集簇)。一个数据库集簇是被一个运行数据库服务器的单一实例所管理的多个数据库的集合。在初始化之后,一个数据库集簇将包含一个名为postgres的数据库,它表示被功能、用户和第三方应用所使用的默认数据库。数据库服务器本身并不要求postgres数据库存在。另一个在初始化过程中为每一个集簇创建的数据库被称为template1。顾名思义,它将被用于创建后续数据库的模板;它不应该被用于实际工作(在集簇内创建新数据库的更多信息请见第 22 章)。


在文件系统术语中,一个数据库集簇是一个单一目录,所有数据都将被存储在其中。我们称它为数据目录数据区域。在哪里存储你的数据完全由你选择。没有默认的位置,不过/usr/local/pgsql/data/var/lib/pgsql/data位置比较流行。
数据目录必须在使用前初始化,必须使用与PostgreSQL一起安装的程序initdb


如果您使用的是 PostgreSQL 的预打包版本,它可能有一个特定的约定来放置数据目录的位置,并且它还可能提供用于创建数据目录的脚本。 在这种情况下,您应该优先使用该脚本而不是直接运行 initdb。 有关详细信息,请参阅包级文档。


要手动初始化数据库集群,请运行 initdb 并使用 -D 选项指定所需的数据库集群文件系统位置,例如:


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


请注意,您必须在登录 PostgreSQL 用户帐户时执行此命令,这在上一节中进行了描述。


另一种替代方案是,你可以通过pg_ctl程序来运行initdb


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


如果你使用pg_ctl来启停服务器(见第 18.3 节),这种方法可能更直观,以为这样pg_ctl将是你用来管理数据库服务器实例的唯一命令。


如果你指定的目录还不存在,initdb将尝试创建它。当然,如果initdb没有在父目录中的写权限,这将会失败。通常推荐让PostgreSQL用户拥有数据目录及其父目录,这样就不存在上面的问题了。如果想要的父目录也不存在,你将需要先创建它,如果父父目录不可写则使用 root 特权。因此,该过程可能像这样:


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



如果数据目录存在并且已经包含文件,initdb将拒绝运行。这可以避免无意中覆盖一个已有的安装。


因为数据目录包含所有存储在数据库里的数据,所以最重要的是保护这个目录不受未授权的访问。因此,initdb会回收禁止除PostgreSQL用户,也可以选择组,之外所有用户的访问权限。当组访问启用时,是只读的。它允许相同组中未被授权的用户作为集簇属主,备份集簇数据或者执行其他只需要读访问权限的操作。


注意在现有集群启用或禁用组访问时,需要关闭集群,且重新启动PostgreSQL之前设置所有的目录和文件到恰当的模式。否则,数据目录中会存在多种模式。集群仅可以被其属主访问,恰当的模式应该是,其目录设置为0700,普通文件设置为0600。允许集群被组可读,恰当的模式应该是,其目录设置为0750,普通文件设置为0640


不过,虽然目录的内容是安全的,但默认的客户端认证设置允许任意本地用户连接到数据库甚至成为数据库超级用户。如果你不信任其他本地用户, 我们建议你使用initdb-W--pwprompt--pwfile选项之一给数据库超级用户赋予一个口令。还可以指定-A md5-A password,这样就不会使用默认的trust 身份认证。或者在执行initdb之后、第一次启动服务器之前修改生成的pg_hba.conf文件(另外一些可行的方法包括peer认证或者用文件系统权限限制连接。更多信息见第 20 章)。


initdb同时也为数据库集簇初始化默认区域。 通常,它将只是使用环境中的区域设置并且把它们应用于被初始化的数据库。 可以为数据库指定一个不同的区域;有关于此的更多信息可以在第 23.1 节中找到。 特定数据库集簇中使用的默认排序顺序是通过initdb设置的, 虽然你可以创建使用不同排序顺序的新数据库,但在 initdb 创建的模板数据库中使用的顺序不能更改(除非删除并重建它们)。使用非CPOSIX的区域还会对性能造成影响。因此,第一次就正确地选择很重要。


initdb还为数据库集簇设置默认的字符集编码。通常字符集编码应该选择与区域设置匹配。详见第 23.3 节。


C以及非POSIX区域对于字符集排序依赖于操作系统的排序规则库。这控制着索引中存储的键的排序。为此,通过快照恢复、二进制流复制、更换不同的操作系统或者升级操作系统都不能把一个集簇切换到一种不兼容的排序规则库版本。


通常来说,任何具有 POSIX 语义的文件系统都可用于 PostgreSQL。用户出于各种原因会喜欢不同的文件系统,包括供应商支持、性能和熟悉程度等。
经验表明,在其他方面相同的情况下,人们不应期望仅仅通过切换文件系统或进行较小的文件系统配置调整以造成明显的性能或行为更改。


可以用 NFS文件系统来存储 PostgreSQL数据目录。
PostgreSQL没有特殊对待NFS文件系统,这意味着它假定NFS的行为与本地连接的驱动器完全一样。
PostgreSQL不使用任何已知在NFS上非标准的功能,例如文件锁定。


PostgreSQL使用NFS 的唯一硬性要求是,文件系统需要使用 hard 选项挂载。
使用hard选项,如果存在网络问题,进程可以无限期地hang,因此这个配置需要仔细的监视设置。
soft 选项将在出现网络问题时中断系统调用,但 PostgreSQL 不会重复系统呼叫以这种方式中断,因此任何此类中断都将导致报告 I/O 错误。


sync挂载选项不是必须的。
async选项的特性是足够的,因为 PostgreSQL 发出 fsync调用,会在适当的时候刷新写缓存。(这与它在本地文件系统上的工作方式相类似。)
但是,强烈建议在部署NFS server 的系统上使用sync导出选项(主要是Linux)。
否则,NFS 客户端上的 fsync 或等效项实际上不能保证实现服务器上的永久存储,这可能会导致损坏,类似于使用参数
fsync关闭。
这些挂载和导出选项的默认值在供应商和版本之间有所不同,因此建议在任何情况下检查并明确指定它们,以避免任何歧义。


在某些情况下,可以通过 NFS 或较低级别的协议,例如 iSCSI,访问外部存储产品。
在后一种情况下,存储显示为块设备,可以在其上创建任何可用的文件系统。
这种方法可能会使 DBA 不必处理 NFS 的一些特性,但是在其他级别当然会出现管理远程存储的复杂性。


推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
author-avatar
liuyidii
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有