zoukankan      html  css  js  c++  java
  • 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进行初始化。翻译完了,感觉好啰嗦!

  • 相关阅读:
    JDBC---bai
    下拉列表---demo---bai
    智能提示框---bai
    国际化---demo1---bai
    自定义数据校验(4)---demo3---bai
    数据校验(3)--demo2---bai
    json概述
    redis持久化
    MyBatis中动态SQL语句完成多条件查询
    Jedis连接redis的一些基本操作
  • 原文地址:https://www.cnblogs.com/abclife/p/13810089.html
Copyright © 2011-2022 走看看