在CentOS上安装PostgreSQL后和启动前需要进行初始配置。


出版日期:2020年12月17日。



INFOMARTION > 在CentOS上安装PostgreSQL后和启动前需要进行初始配置。

概述。

这是在CentOS上安装和启动PostgreSQL所需的初始配置程序。 这些信息是基于使用CentOS7的假设。 关于安全的部分也包括在内。

推荐使用PostgreSQL,因为它是免费的,而且功能很强。 我听说PostgreSQL的函数过去很慢,但最近的函数有了改进,速度更快。

版本如下。

CentOS版本7.6 (1810)
PostgreSQL的版本9.2.24

目录

  1. 安装
  2. 设置细节
  3. 摘要

1. 安装

本节描述了安装PostgreSQL的过程。

1-1. 安装PostgreSQL

通过yum命令进行PostgreSQL的安装。 以根用户身份开展工作。

[username@hostname ~]$ su -
[root@hostname ~]# yum -y install postgresql-server

2. 设置细节

本节描述了启动PostgreSQL之前的配置。

2-1. 创建一个专门的PostgreSQL用户。

我想创建一个专门的用户来操作PostgreSQL(使用psql命令),但该用户已经被创建了。 我记得过去创建用户的时候,也许规范已经改变。

尝试用以下命令切换到一个用户。

[root@hostname ~]# su - postgres

由于有些人可能使用的是旧版本的PostgreSQL,应该提到的是,通过改变以下".bashrc "来设置环境变量的程序也不再需要了。

.bashrc


export PGHOME=/var/lib/pgsql
export PGDATA=/var/lib/pgsql/data
export PGHOST=localhost

postgres用户的默认PGDATA现在看来是'/var/lib/pgsql/data'。 它被描述为指向"/usr/lib/systemd/system/postgresql.service"。

2-2. PostgreSQL的数据准备

创建PostgreSQL数据。 编码是UNICODE。 目录"/var/lib/pgsql/data "是默认创建的,但没有创建的人也被要求创建一个文件夹。

-bash-4.2$ initdb --encoding=UNICODE

由于"/usr/lib/systemd/system/postgresql.service "中设置了 "PGDATA=/var/lib/pgsql/data","initdb --encoding=UNICODE "将在"/var/lib/pgsql/"下构建一个数据库。 data/",DB被建立在"/var/lib/pgsql/data/"。

2-3. 修改配置文件

允许 IP 地址访问 PostgreSQL。 设置系统,使其对非本地访问进行密码认证。

[root@hostname ~]# vi /var/lib/pgsql/data/postgresql.conf

修改'postgresql.conf'如下。

postgresql.conf【改变之前】


#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

#listen_addresses = 'localhost'         # what IP address(es) to listen on;

postgresql.conf【变化后】


#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*'         # what IP address(es) to listen on;

补充一点,因为这是安全的一个重要部分,如果你把这个设置放进去,你将能够从任何IP访问网站。 如果要访问的IP是固定的,请说明固定IP。

当从安装PostgreSQL的服务器以外的服务器登录时,这个设置是必要的,例如pgadmin。 如果你登录到服务器并运行psql命令,这个设置就没有必要。 (因为该连接来自他自己(localhost))

这是一个重要的安全设置,所以要尽可能地减少可以访问它的用户数量。

然后修改'pg_hba.conf'。

[root@hostname ~]# vi /var/lib/pgsql/data/pg_hba.conf

在文件的末尾添加以下信息。

pg_hba.conf


#来自外部的密码认证。
host    all             all             0.0.0.0/0            md5

通过包括这一设置,从外部连接时需要一个密码。 这些区域如果没有设置或设置不正确,会成为严重的安全漏洞,所以请以最谨慎的态度设置这些区域。

2-4. 引导性检查

现在预配置已经完成,检查PostgreSQL是否启动。 由于DB是以postgres用户的身份建立的,所以在开始之前切换到postgres用户。

[root@hostname ~]# su - postgres
-bash-4.2$ pg_ctl start

在PostgreSQL成功启动后,检查psql命令的工作是否没有问题。 以postgres用户身份运行psql命令。

-bash-4.2$ psql -l
                                         Database List
   Name    |  Owner   | Encoding         |  Collation Order   | Ctype(conversion operator) |      Access rights
-----------+----------+------------------+--------------------+----------------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8        | ja_JP.UTF-8                |
 template0 | postgres | UTF8             | ja_JP.UTF-8        | ja_JP.UTF-8                | =c/postgres          +
           |          |                  |                    |                            | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8        | ja_JP.UTF-8                | =c/postgres          +
           |          |                  |                    |                            | postgres=CTc/postgres
(3 lines)

如果返回上述结果是可以的。

2-5. 自动启动设置

虽然这不是强制性的,但每次重启服务器时都要启动PostgreSQL是很难的,所以配置成当服务器启动时PostgreSQL自动启动。 它也注册到了systemctl命令。 请注意,这个过程是针对CentOS7的,所以如果你使用的是CentOS7以外的系统,你将需要使用Service命令来处理这个问题。

检查'/usr/lib/systemd/system/postgresql.service'是否存在。 如果没有,使用以下程序创建 "postgresql.service"。 以根用户身份运行。

[root@hostname ~]# touch /etc/systemd/system/postgresql.service
[root@hostname ~]# vi /etc/systemd/system/postgresql.service

以下是提供的信息。

postgresql.service


[Unit]
#描述。
Description=PostgreSQL
#执行前和执行后的控制。
#Before=xxx.service
After=network.target

[Service]
#用户和组的指定
User=postgres
Group=postgres
#一旦激活,将状态设为已激活。
Type=oneshot
RemainAfterExit=yes
#启动、停止和重新加载。
Environment=PGDATA=/var/lib/pgsql/data
ExecStart=/usr/bin/pg_ctl start -D /var/lib/pgsql/data
ExecStop=/usr/bin/pg_ctl stop
ExecReload=/usr/bin/pg_ctl reload

[Install]
#运行级别3的同等设置。
WantedBy=multi-user.target

接下来,用systemctl命令注册。

[root@hostname ~]# systemctl enable postgresql
[root@hostname ~]# systemctl is-enabled postgresql
enabled
[root@hostname ~]# systemctl list-unit-files --type=service | grep postgresql
postgresql.service                                enabled
[root@hostname ~]# systemctl daemon-reload

2-6. 为PostgreSQL添加一个管理用户

创建一个在PostgreSQL应用程序中使用的用户,与从Linux操作PostgreSQL的用户分开。 这是用pgadmin等操作时的用户。 我想改变默认存在的postgres用户的密码并使用它。

以postgres用户身份运行以下命令。

-bash-4.2$ psql
postgres=# alter role postgres with password '(密码';
postgres=# \q

※在 "密码 "栏中输入你想设置的密码。

2-7. 防火墙的钻探

允许访问PostgreSQL端口,因为防火墙(CentOS6及以前的iptables)在CentOS7上默认只允许ssh访问。 还可以添加 "永久 "选项,使配置永久化。

[root@hostname ~]# firewall-cmd --permanent --zone=public --add-port=5432/tcp
[root@hostname ~]# firewall-cmd --reload
[root@hostname ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: 8080/tcp 5432/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

如果它显示 "端口:5432/tcp",那就可以了。

通过pgadmin访问。 你应该可以用刚才设置的密码以postgres用户的身份登录。

3. 摘要

我们已经描述了安装PostgreSQL时需要的初始配置。 最初建立PostgreSQL可能会很费劲,所以请参考本节。

谢谢你一直看到最后。




■INFORMATION

请点击这里,进入信息首页。


■PROFILE

请点击这里查看简介。


■联系方式。

有关文章的查询,请在此与我们联系。