postgresql初始化之initdb的使用详解

 更新时间:2021年01月12日 15:11:36   作者:怠惰的小小白  
这篇文章主要介绍了postgresql初始化之initdb的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

initdb 官网

initdb创建了一个新的PostgreSQL数据库集群。数据库集群是由单个服务器实例管理的数据库集合。

创建数据库集群包括数据库所在的目录、生成共享目录表(属于整个集群而不是任何特定数据库的表)以及创建template1和postgres数据库。稍后创建新数据库时,将复制template1数据库中的所有内容(因此,template1中安装的任何内容都会自动复制到以后创建的每个数据库中。),postgres数据库是供用户、实例程序和第三方应用程序使用的默认数据库。

尽管initdb将尝试创建指定的数据目录,但如果所需数据目录的父目录是根目录,则它可能没有权限。要再这样的设置中初始化,需要创建一个空数据目录作为根目录,然后使用chown将目录的所有权分配给数据库用户账户,然后su成为运行initdb的数据库用户。

initdb必须作为拥有服务器进程的用户运行,因为服务器需要访问initdb创建的文件和目录。由于服务器不能作为root用户运行,所以也不能作为root用户运行initdb。

出于安全原因,在默认情况下,initdb创建的新集群只能由集群所有者访问。——allow-group-access选项允许与集群所有者属于同一组的任何用户读取集群中的文件。这对于作为非特权用户执行备份非常有用。

initdb初始化数据库集群的默认语言环境和字符集编码。在创建数据库时,可以分别设置字符集编码、排序顺序(LC_COLLATE)和字符集类(LC_CTYPE,例如upper、lower、digit)。initdb确定template1数据库的那些设置,这些设置将作为所有其他数据库的默认设置。

要更改默认的排序顺序或字符集类,请使用——lc-collate和——lc-ctype选项。除了C或POSIX之外的排序顺序也会造成性能损失。由于这些原因,在运行initdb时选择正确的语言环境是很重要的。

其余的语言环境类别可以在服务器启动后更改。还可以使用——locale设置所有语言环境类别的默认值,包括排序顺序和字符集类。所有服务器语言环境值(lc_*)都可以通过SHOW All来显示。

常用参数:

-D directory/--pgdata=directory此选项指定应该存储数据库集群的目录。必传。也可以设置环境变量PGDATA来替换-D选项。

-U username/--username=username选择数据库superuser的用户名。这默认为运行initdb的用户的名称。

-E encoding/--encoding=encoding选择模板数据库的编码。这也是您稍后创建的任何数据库的默认编码,

--lc-collate/--lc-ctype更改默认的排序顺序或字符集类。

-k/--data-checksums在数据页上使用校验和来帮助检测I/O系统的损坏,否则系统将是静默的。启用校验和可能会导致显著的性能损失。如果设置,则计算所有数据库中所有对象的校验和。所有校验和失败将在pg_stat_database视图中报告。

所以postgresql初始化可能使用的命令是:

su - pguser001 -c "/u01/pgsql/bin/initdb --username=pguser001 --encoding=UTF8 --lc-collate=C --lc-ctype=en_US.
utf8 --data-checksums -D /data"

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

补充:postgresql 初始化 initdb 出现No such file or directory

1.initdb出现

 FATAL: could not open extension control file "/opt/HighGo/Develop/share/postgresql/extension/file_fdw.control": No such file or directory.

如下:

me@me:/opt/HighGo/Develop/bin$ <span style="color:rgb(51,51,255);">./initdb -D ../data -W</span>
The files belonging to this database system will be owned by user "me".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
creating directory ../data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 32MB
creating configuration files ... ok
creating template1 database in ../data/base/1 ... ok
initializing pg_authid ... ok
Enter new systemuser password: 
Enter it again: 
Enter syssao password: 
Enter it again: 
Enter syssso password: 
Enter it again: 
setting dba password ... ok
initializing dependencies ... ok
<span style="color:rgb(204,0,0);">creating system views ... FATAL: could not open extension control file "/opt/HighGo/Develop/share/postgresql/extension/file_fdw.control": No such file or directory
STATEMENT: /*</span>
 * PostgreSQL System Views
 *
 * Copyright (c) 1996-2012, PostgreSQL Global Development Group
 *
 * src/backend/catalog/system_views.sql

原因是file_fdw.control插件没有安装.进入源代码目录下的contrib目录下.找到file_fdw文件进入其中,编译安装,

make
make install

同理出现:

creating system views ... FATAL: 
could not open extension control file "/opt/HighGo/Develop/share/postgresql/extension/dblink.control": No such file or directory.

在contrib目录下进入到dblink文件中,make,make install

所以如果出现一些其他的hstore.control 等.相应的安装上.

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • Postgresql和mysql的区别及说明

    Postgresql和mysql的区别及说明

    这篇文章主要介绍了Postgresql和mysql的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • PostgreSQL进行数据导入和导出的操作代码

    PostgreSQL进行数据导入和导出的操作代码

    在数据库管理中,数据的导入和导出是非常常见的操作,特别是在 PostgreSQL 中,提供了多种工具和方法来实现数据的有效管理,本文将详细介绍在 PostgreSQL 中如何进行数据导入和导出,并给出具体的命令及示例,需要的朋友可以参考下
    2024-10-10
  • PostgreSQL管理工具phpPgAdmin入门指南

    PostgreSQL管理工具phpPgAdmin入门指南

    phpPgAdmin是用PHP开发的一个基于web的PostgreSQL数据库管理工具。和MySql时代的PHPMyAdmin类似。本文介绍了phpPgAdmin安装和使用方法,需要的朋友可以参考下
    2014-03-03
  • Postgresql之时间戳long,TimeStamp,Date,String互转方式

    Postgresql之时间戳long,TimeStamp,Date,String互转方式

    这篇文章主要介绍了Postgresql中的时间戳long,TimeStamp,Date,String互转方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • PostgreSQL 添加各种约束语法的操作

    PostgreSQL 添加各种约束语法的操作

    这篇文章主要介绍了PostgreSQL 添加各种约束语法的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • PostgreSQL中rank()窗口函数实用指南与示例

    PostgreSQL中rank()窗口函数实用指南与示例

    在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名,本文将详细介绍rank()函数的使用方法,并通过多个实用示例展示其在不同场景下的应用,需要的朋友可以参考下
    2025-07-07
  • Docker环境实现PostgreSQL自动备份的流程步骤

    Docker环境实现PostgreSQL自动备份的流程步骤

    本文详细介绍了如何在Ubuntu系统中安装Docker,然后在Docker容器内安装和配置PostgreSQL数据库,接着,重点讲解了如何在PostgreSQL中安装和配置pg_rman工具,用于数据库的备份和恢复操作,文章还涵盖了创建定时备份任务以及删除备份的步骤,需要的朋友可以参考下
    2024-11-11
  • PostgreSQL limit的神奇作用详解

    PostgreSQL limit的神奇作用详解

    这篇文章主要介绍了PostgreSQL limit的神奇作用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-09-09
  • PostgreSQL如何修改默认端口号

    PostgreSQL如何修改默认端口号

    文章主要内容是关于在升级PostgreSQL过程中遇到的问题,以及解决这些问题的方法,升级过程中,由于端口号设置不正确,导致psql连接到旧版本的服务器,从而引发语法错误,解决方法是在连接数据库时指定正确的端口号,或者修改默认端口号
    2024-12-12
  • PostgreSQL如何查询表大小(单独查询和批量查询)

    PostgreSQL如何查询表大小(单独查询和批量查询)

    PostgreSQL提供了多个系统管理函数来查看表,索引表空间及数据库的大小,这篇文章主要给大家介绍了关于PostgreSQL如何查询表大小的相关资料,文中介绍的方法包括单独查询和批量查询,需要的朋友可以参考下
    2024-02-02

最新评论