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 等.相应的安装上.

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

(0)

相关推荐

  • postgreSQL数据库默认用户postgres常用命令分享

    1.修改用户postgres的密码 #alter user postgres with password 'xxxx';(其中xxxx是修改的密码). 2.查看下当前schema的所有者: // 查看当前schema的所有者,相当于\du元命令 SELECT n.nspname AS "Name", pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner" FROM pg_catalog.pg_namespace n WHE

  • 解决postgresql无法远程访问的情况

    今天刚入手这个数据库玩玩,发现无法通过IP去访问数据库,后面查询原因为,该数据库默认只能通过本地连接,也就是回环地址(127.0.0.1) 解决方案: 1.修改安装目录下的data\pg_hba.conf,在配置文件最后有IPV4和IPV6的配置,新增一行(这里我用的IPV4,开放所有IP) host all all 0.0.0.0/0 md5 说明: 该配置为允许所有IP访问,下面有对应的一些配置示例提供参考 32 -> 192.168.1.1/32 表示必须是来自这个IP地址的访问才合法:

  • PostgreSQL 启动失败的解决方案

    环境 Red Hat CloudForms 4.x 问题 postgresql 启动失败,并导致evmserverd崩溃. [----] I, [2016-11-29T03:12:31.816753 #1201:e4f994] INFO -- : MIQ(PostgresAdmin.runcmd_with_logging) Running command... service rh-postgresql94-postgresql start [----] E, [2016-11-29T03:12

  • 浅谈Postgresql默认端口5432你所不知道的一点

    关于Postgresql端口5432的定义: 5432端口,已经在IANA(The Internet Assigned Numbers Authority,互联网数字分配机构)注册, 并把该端口唯一分配给Postgres. 这意味着,一台安装了linux OS的服务器,哪怕没有安装过postgresql数据库,也会有这个预留端口. 查看这个预留端口的方法如下: new@newdb-> cat /etc/services |grep 5432 postgres 5432/tcp postgresq

  • 使用postgresql 模拟批量数据插入的案例

    创建表: CREATE TABLE t_test( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL ); 模拟批量插入: insert into t_test SELECT generate_series(1,5000000) as key,repeat( chr(int4(random()*26)+65),4), (random()*(6^2))::

  • postgresql初始化之initdb的使用详解

    initdb 官网 initdb创建了一个新的PostgreSQL数据库集群.数据库集群是由单个服务器实例管理的数据库集合. 创建数据库集群包括数据库所在的目录.生成共享目录表(属于整个集群而不是任何特定数据库的表)以及创建template1和postgres数据库.稍后创建新数据库时,将复制template1数据库中的所有内容(因此,template1中安装的任何内容都会自动复制到以后创建的每个数据库中.),postgres数据库是供用户.实例程序和第三方应用程序使用的默认数据库. 尽管ini

  • 对layui初始化列表的CheckBox属性详解

    通常layui前端页面完全按照layui官网的例子写所有的页面初始化都没有问题,但是那只是静态页面.当加入后台去动态加载页面的时候有写样式在初始化加载样式的时候始终加载不上. 前端js拼接列表代码: 在这种情况下,你会发现初始化的checkbox属性只能用一下.当你点击下一页或者是搜索查询的时候你的这个列表的checkbox样式是不生效的.这个时候你就需要在js那边引用一个重新初始化的方法了:form.render();但当你用这个的时候,你会发现列表初始化回显checkbox不生效.这个时候你

  • PostgreSQL使用MySQL外表的步骤详解(mysql_fdw)

    浅谈 postgres不知不觉已经升到了版本13,记得两年前还是版本10,当然这中间一直期望着哪天能在项目中使用postgresql,现在已实现哈-: 顺带说一下:使用postgresql的原因是它的生态完整,还有一个很重要的点儿是速度快这个在第10版的时 这么说也许还为时过早, 但是在13这一版本下一点儿也不为过,真的太快了,我简单的用500w的数据做聚合,在不建立索引(主键除外)的情况下 执行一个聚合操作,postgres 的速度是mysql的8倍,真的太快了-:好了,这一章节我就聊一聊我实

  • 数据库初始化及数据库服务端操作详解

    目录 为什么要学习数据库? 数据库的好处: 数据库的概念: SQL语言的介绍 SQL的优点 数据库存储数据的原理 MySQL服务端的操作 1.服务端的登陆和退出 2.MYSQL常见命令 为什么要学习数据库? 数据库的好处: 实现持久化数据到本地 使用完整的管理系统统一管理,易于查询 数据库的概念: SQL语言的介绍 SQL的优点 1.不是某个特定数据库供应商专有的语言,几乎所有DBMS都支持SQL 2.简单易学 3.虽然简单,但实际上是一种强有力的语言,灵活使用其他语言元素,可以进行非常复杂和高

  • 应用启动数据初始化接口CommandLineRunner和Application详解

    目录 应用启动数据初始化接口CommandLineRunner和Application详解 1 运行时机 2 实现接口 3 执行顺序 4 设置启动参数 5 运行效果 ApplicationRunner和CommandLineRunner用法区别 ApplicationRunner CommandLineRunner 应用启动数据初始化接口CommandLineRunner和Application详解 在SpringBoot项目中创建组件类实现CommandLineRunner或Applicati

  • Java postgresql数组字段类型处理方法详解

    在实际开发中遇到postgresql中定义的数组字段,下面解决两个问题,如何定义数组字段的默认值为空格数组,以及如何再java实体类中直接使用数组对象接受数据或把数据存入数据库. 1.在postgresql中定义数组对象及默认值 以字符串你数组为例: 比如一个字段用于存储多张图片的url,可以使用一下sql定义 pictures _varchar NOT NUll default ARRAY[]::character varying[] 2.实体类存入数组到数据库并接受数据库的数组数据 直接定义

  • PostgreSQL中的日期/时间函数详解

    目录 零.前言 一.获取当前时间 二.时间的加减 三.格式化函数 3.1时间转字符串 3.2字符串转日期 3.3字符串转时间 3.4Unix时间戳转时间 四.一些重要函数 4.1时间间隔 4.2时间截取 五.时间的转换 六.收! 零.前言 公司里有一台阿里云RDS数据库用了PPAS(Postgres PlusTM Advanced Server),在处理日期/时间时遇到一些问题,花了点时间整理如下. 一.获取当前时间 select now() select current_timestamp s

  • CentOS7 PostgreSQL安装、配置、使用详解

    CentOS7 PostgreSQL安装 Install 安装 使用yum安装 yum install http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-redhat94-9.4-1.noarch.rpm yum install postgresql94-server postgresql94-contrib 设置开机启动 systemctl enable postgresql-9.4.service systemctl start

  • PostgreSQL教程(二):模式Schema详解

    一个数据库包含一个或多个命名的模式,模式又包含表.模式还包含其它命名的对象,包括数据类型.函数,以及操作符.同一个对象名可以在不同的模式里使用而不会导致冲突: 比如,schema1和myschema都可以包含叫做mytable的表.和数据库不同,模式不是严格分离的:一个用户可以访问他所连接的数据库中的任意模式中的对象,只要他有权限. 我们需要模式有以下几个主要原因: 1). 允许多个用户使用一个数据库而不会干扰其它用户.     2). 把数据库对象组织成逻辑组,让它们更便于管理.     3)

  • PostgreSQL教程(一):数据表详解

    一.表的定义: 对于任何一种关系型数据库而言,表都是数据存储的最核心.最基础的对象单元.现在就让我们从这里起步吧.     1. 创建表:   复制代码 代码如下: CREATE TABLE products (         product_no integer,         name text,         price numeric     );     2. 删除表:   复制代码 代码如下: DROP TABLE products;     3. 创建带有缺省值的表:   复

随机推荐