PostgreSQL安装的后续工作

你已经在机器上安装了postgres,并且想要开始使用它。怎么使用呢?

 

要理解的关键点是,安装后期要做什么是有依赖的:

·依赖于操作系统。比如,windows或linux

·依赖于操作系统的分支。比如,debian或redhat

·依赖于是由软件包还是源码安装

让我们从所有安装都通用的最基本步骤开始,并在此基础上进一步细分。

 

一个成功安装的postgres,不管版本是什么,都有以下特点:

1.有一个新创建的数据集群

2.有一个被编辑的配置文件pg_hba.conf

3.有一个被编辑的配置文件件postgresql.conf 还有其他配置文件,但我们将从上面这些开始。

为了便于讨论,我们进一步假设你已经启动了集群,并且主机上正在运行postgres。下面是一个示例,在运行工具(如netstat)时会看到报告网络连接的信息:

$netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address   Foreign Address  State     PID/Program name
tcp     0      0    127.0.0.1:5432  0.0.0.0:*        LISTEN     27929/postgres

首先要看的是“Local Address”。注意它说的是127.0.0.1:5432。这意味着服务器当前正在侦听本地主机上的端口5432。但是你需要0.0.0.0:5432,否则无法接受远程连接。使用编辑器,打开文件pg_hba.conf并查看“默认”规则。请注意,配置文件可以位于多个位置,我们将在后面介绍。

注意:将地址(CIDR)设置为0.0.0.0仅用于连接目的。这不是你应该在生产机器上执行的操作。知道一切正常后,应将其限制为尽可能少的允许的连接。

每行的实际“rules”可以从一种Postgres安装类型变化到另一种类型。好消息是RedHat/Centos看起来很相似,并且所有Debian/Ubuntu都拥有自己相似的样式。相关设置位于文件的底部,而上述所有其他内容均为注释文档。

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 peer
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

查看第一行,其中TYPE是“ local”。只要你可以通过UNIX DOMAIN SOCKETS本地登录,并且以sudo作为超级用户登录,则默认为postgres,则无需密码即可访问服务。

METHOD应该是peer,但是如果它使用其他内容(例如md5),则需要更改字符串。或者,如果对主机上的其他用户帐户特别信任,则可以使用METHOD为trust方式,以允许所有本地登录的UNIX帐户自由访问。

# ATTENTION:
# the service must be reloaded for any edits to pg_hba.conf to take effect
#
$sudo su - postgres
$psql -c "select 'hello world' as greetings"
greetings
-------------
hello world

看第二行,可以看到TYPE是IPV4。除非知道密码,否则此规则以及TYPE IPv6的规则都会阻止localhost登录。

$psql -h localhost -c "select 'hello world' as greetings"
Password for user postgres:

因此,让我们为通过UNIX DOMAIN SOCKETS登录的postgres用户分配密码来解决此问题,因为我们已经允许METHOD为peer的登录:

--
-- example invocation, change the password to something real
--
ALTER ROLE postgres WITH PASSWORD 'mypassword';

编辑pg_hba.conf需要重新加载配置。

既然本地主机已经可以连接,那么在此示例中,我们使用的是IP v4套接字,我们现在可以继续处理远程连接。

你将需要添加另一个规则,该规则应放在localhost规则之后:

host all all 0.0.0.0/0 md5

也可以为ipv6添加一条规则:

host all all ::0/0 md5

提示:演示的示例规则允许每个人连接到主机。要注意CIDR是加强网络安全的关键。

你的系统应该有个独一无二的配置文件。以下是pg_hba.conf开始的样子:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             0.0.0.0/0               md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
host    all             all             ::0/0                   md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

  

你已经为超级用户添加了密码并更新了配置文件pg_hba.conf,现在该访问另一个配置文件postgresql.conf了。

找到该文件并编辑运行时参数listen_addresses。默认设置禁止远程连接。将值重置为网卡的IP地址或仅使用通配符将使其可访问。

提示:作为postgres,在psql会话中执行以下命令以找到您的配置文件。

登录查看配置文件有哪些:

select distinct sourcefile from pg_settings;

可以将postgres服务绑定到多个IP地址,使用逗号分隔的列表,有些人可能觉得这个很神奇:

 listen_addresses = '*'
#listen_addresses = 'localhost' # what IP address(es) to listen on;
                                # comma-separated list of addresses;
                                # defaults to 'localhost'; use '*' for all
                                # (change requires restart)

另一种更新运行时参数的方法也可以使用SQL语句完成:

postgres=# ALTER SYSTEM SET listen_addresses = '*';
ALTER SYSTEM

  

最后一步,重新启动服务。

·Redhat发行版要求在管理数据集群之前必须手动创建它们。
·PostgreSQL Debian发行版(包括Ubuntu)会自动创建并启动数据集群。

使用systemd的:

·redhat/centos:

/usr/pgsql-11/bin/postgresql-12-setup initdb
systemctl start|stop postgresql-12

·debian/ubuntu:

systemctl restart postgresql

为了管理PostgreSQL服务,Debian派生的Linux发行版包含了一系列命令行工具:

# example CLI
#
pg_ctlcluster<br />Usage: /usr/bin/pg_ctlcluster <version> <cluster> <action> [-- <pg_ctl options>]

  

# restarting postgres version 12 on a Debian derived distribution
pg_ctlcluster 12 main restart

成功重启服务后,你应该会得到类似于以下内容的结果:

Active Internet connections (only servers)
Proto Recv-Q Send-Q  Local Address    Foreign Address  State   PID/Program name
tcp     0      0      0.0.0.0:5432    0.0.0.0:*        LISTEN  27929/postgres

最后,可以测试远程连接了。

#
# THE REMOTE LOGIN
#
psql 'host=myhost user=postgres password=mypassword' -c "select 'hello world' as greeetings "

原文地址:https://www.percona.com/blog/2020/09/29/postgresql-configuration-changes-you-need-to-make-post-installation/

总结一下,就是修改配置文件pg_hba.conf,postgres.conf和执行initdb进行初始化。翻译完了,感觉好啰嗦!

原文地址:https://www.cnblogs.com/abclife/p/13810089.html