如何在Fedora 34上安装和配置Postgres 14?

译文
数据库 其他数据库
Postgresql是一种开源对象关系数据库系统,经过30多年的积极开发,在可靠性、功能稳健性和性能方面已赢得了良好的声誉。Postgres这个免费的开源关系数据库管理系统强调可扩展性和SQL合规。

[[433409]]

【51CTO.com快译】Postgresql是一种开源对象关系数据库系统,经过30多年的积极开发,在可靠性、功能稳健性和性能方面已赢得了良好的声誉。Postgres这个免费的开源关系数据库管理系统强调可扩展性和SQL合规。

它最初名为POSTGRES,指其起源是加州大学伯克利分校开发的Ingres数据库的后续版。PostgreSQL用作许多Web、移动、地理空间和分析等应用的主数据存储或数据仓库。PostgreSQL可以在单单一个产品中存储结构化数据和非结构化数据。

本文介绍在Fedora 34中安装Postgresql 14。

先决条件

要继续进行,确保您具备以下条件:

1. 更新后的Fedora 34服务器

2. 对服务器的root访问权限或拥有root访问权的用户

3. 从服务器访问互联网

4. 对Linux终端有基本了解

1. 确保服务器是最新的

在继续之前,确保我们的服务器有最新的软件包。使用该命令:

  1. $ sudo dnf -y update 
  2. Last metadata expiration check: 2:55:24 ago on Tue 26 Oct 2021 12:05:29 PM UTC. 
  3. Dependencies resolved. 
  4. Nothing to do. 
  5. Complete! 

2. 安装和启动Postgres Server

fedora dnf postgres模块含有Postgres 14安装版,但不是默认的。不妨使用该命令在Fedora上检查Postges模块:

  1. $ sudo dnf module list postgresql 
  2. Last metadata expiration check: 2:56:45 ago on Tue 26 Oct 2021 12:05:29 PM UTC. 
  3. Fedora Modular 34 - x86_64 
  4. Name                                                              Stream                                                        Profiles                                                                 Summary 
  5. postgresql                                                        9.6                                                           client, server [d]                                                       PostgreSQL module 
  6. postgresql                                                        10                                                            client, server [d]                                                       PostgreSQL module 
  7. postgresql                                                        11                                                            client, server [d]                                                       PostgreSQL module 
  8. postgresql                                                        12                                                            client, server                                                           PostgreSQL module 
  9. postgresql                                                        13                                                            client, server                                                           PostgreSQL module 
  10. Fedora Modular 34 - x86_64 - Updates 
  11. Name                                                              Stream                                                        Profiles                                                                 Summary 
  12. postgresql                                                        9.6                                                           client, server [d]                                                       PostgreSQL module 
  13. postgresql                                                        10                                                            client, server [d]                                                       PostgreSQL module 
  14. postgresql                                                        11                                                            client, server [d]                                                       PostgreSQL module 
  15. postgresql                                                        12                                                            client, server                                                           PostgreSQL module 
  16. postgresql                                                        13                                                            client, server                                                           PostgreSQL module 
  17. postgresql                                                        14                                                            client, server                                                           PostgreSQL module 
  18. Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled 

这意味着要使用它,就得启用它。先重置postgres模块,那样我们就没有默认版。

  1. sudo dnf module reset postgresql 

然后用该命令启用postgres 14:

  1. $ sudo dnf module enable postgresql:14 
  2. Last metadata expiration check: 3:03:33 ago on Tue 26 Oct 2021 12:05:29 PM UTC. 
  3. Dependencies resolved. 
  4. ================================================================================================================================================================================================================================================================================ 
  5.  Package                                                           Architecture                                                     Version                                                             Repository                                                         Size 
  6. ======================================================================================================================================================================================================================================================================== 
  7. Enabling module streams: 
  8.  postgresql                                                                                                                         14 
  9.  
  10. Transaction Summary 
  11. ======================================================================================================================================================================================================================================================================== 
  12.  
  13. Is this ok [y/N]: y 
  14. Complete! 

现在不妨安装Postgresql 14和Contrib软件包,后者为PostgreSQL数据库系统提供了几个额外的功能:

  1. sudo dnf install -y postgresql-server postgresql-contrib 

一旦安装完成,用以下命令初始化PostgreSQL数据库:

  1. $ sudo postgresql-setup initdb 
  2. WARNING: using obsoleted argument syntax, try --help 
  3. WARNING: arguments transformed to: postgresql-setup --initdb --unit postgresql 
  4.  * Initializing database in '/var/lib/pgsql/data' 
  5.  * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log 

现在启动服务:

  1. sudo systemctl start postgresql 

然后启用该服务,以便服务器重启后它启动:

  1. $ sudo systemctl enable postgresql 
  2. Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service. 

确认Postgres 14在运行:

  1. $ sudo systemctl status postgresql 
  2. ● postgresql.service - PostgreSQL database server 
  3.      Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; vendor preset: disabled) 
  4.      Active: active (running) since Tue 2021-10-26 15:18:53 UTC; 46s ago 
  5.     Process: 17645 ExecStartPre=/usr/libexec/postgresql-check-db-dir postgresql (code=exited, status=0/SUCCESS) 
  6.    Main PID: 17647 (postmaster) 
  7.       Tasks: 8 (limit: 4603) 
  8.      Memory: 15.7M 
  9.         CPU: 47ms 
  10.      CGroup: /system.slice/postgresql.service 
  11.              ├─17647 /usr/bin/postmaster -D /var/lib/pgsql/data 
  12.              ├─17648 postgres: logger 
  13.              ├─17650 postgres: checkpointer 
  14.              ├─17651 postgres: background writer 
  15.              ├─17652 postgres: walwriter 
  16.              ├─17653 postgres: autovacuum launcher 
  17.              ├─17654 postgres: stats collector 
  18.              └─17655 postgres: logical replication launcher 
  19.  
  20. Oct 26 15:18:52 ip-10-2-40-182.us-west-2.compute.internal systemd[1]: Starting PostgreSQL database server... 
  21. Oct 26 15:18:52 ip-10-2-40-182.us-west-2.compute.internal postmaster[17647]: 2021-10-26 15:18:52.998 UTC [17647] LOG:  redirecting log output to logging collector process 
  22. Oct 26 15:18:52 ip-10-2-40-182.us-west-2.compute.internal postmaster[17647]: 2021-10-26 15:18:52.998 UTC [17647] HINT:  Future log output will appear in directory "log"
  23. Oct 26 15:18:53 ip-10-2-40-182.us-west-2.compute.internal systemd[1]: Started PostgreSQL database server. 

Active: active (running)显示该服务已启动并运行中。

下一步,不妨通过连接至PostgreSQL数据库服务器、打印输出版本,确认安装已成功。 sudo -u postgres psql -c "SELECT version();"

输出:

  1. $ sudo -u postgres psql -c "SELECT version();" 
  2. could not change directory to "/home/fedora": Permission denied 
  3.                                                    version 
  4. -------------------------------------------------------------------------------------------------------------- 
  5.  PostgreSQL 14.0 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 11.2.1 20210728 (Red Hat 11.2.1-1), 64-bit 
  6. (1 row) 

3. PostgreSQL角色和数据库验证方法

PostgreSQL使用名为roles的概念来处理客户身份验证和授权。默认情况下,Postgres被设置为使用ident authentication,这意味着它将Postgres角色与匹配的Unix/Linux系统帐户相关联。如果Postgres中存在角色,有相同名称的Unix/Linux用户名就能以该角色登录。

安装过程创建了一个名为postgres的用户帐户,该帐户与默认的postgres角色相关联。为了使用PostgreSQL,您可以登录到该帐户。

PostgreSQL支持多种验证方法。最常用的方法有:

  • Trust——只要满足pg_hba.conf中定义的条件,角色可以在没有密码的情况下进行连接。
  • Password——角色可以通过提供密码进行连接。密码可以存储为scram-sha-256、md5和password (clear-text)。
  • Ident——仅在TCP/IP连接上受支持。它通过获取客户端的操作系统用户名来工作,有可选的用户名映射。
  • Peer——与Ident一样,但仅在本地连接上受支持。

4.连接到postgres数据库

(1)通过切换到postres用户

通过在终端中输入以下内容,切换到服务器上的postgres帐户:

  1. sudo -i -u postgres 

现在您可以立即访问Postgres提示符,只需输入:

  1. $ psql 
  2. psql (14.0) 
  3. Type "help" for help. 
  4.  
  5. postgres=# 

您将因此登录到PostgreSQL提示符,可以立即与数据库管理系统进行交互。

(2)通过以postgres用户的身份来运行命令

使用该方法,以postgres用户的身份直接运行命令,使用sudo:

  1. sudo -u postgres psql 

输出:

  1. $ sudo -u postgres psql 
  2. psql (14.0) 
  3. Type "help" for help. 
  4.  
  5. postgres=# 

5. 配置postgres 14实例以便远程访问

为此,我们将改动postgres配置文件。我们需要打开文件,并调整配置。Postgresql 14的主配置文件位于该路径:/var/lib/pgsql/14/data/pg_hba.conf。

不妨将peer识别改为trust(信任):

  1. sed -i '/^local/s/peer/trust/' /var/lib/pgsql/data/pg_hba.conf 

将ident识别改为md5,允许密码登录。

  1. sed -i '/^host/s/ident/md5/' /var/lib/pgsql/data/pg_hba.conf 

添加block,允许从所有地方访问:

将该内容添加到文件/var/lib/pgsql/data/pg_hba.conf

  1. host    all             all             0.0.0.0/0                md5 

确保PostgreSQL在监听*

将这一行添加到这里的配置文件/var/lib/pgsql/data/postgresql.conf

  1. listen_addresses='*' 

启用并重启postgresql服务器,重新加载配置:

  1. sudo systemctl restart postgresql 
  2. sudo systemctl enable postgresql 

6. 用户管理

创建超级用户

由于一切已到位,不妨创建超级用户。

以postres角色连接到数据库:

  1. $ sudo -u postgres psql 
  2. psql (14.0) 
  3. Type "help" for help. 
  4.  
  5. postgres=# 

创建名称为root的超级用户:

  1. CREATE ROLE root WITH LOGIN SUPERUSER CREATEDB CREATEROLE PASSWORD 'passwordhere'

输出:

  1. postgres=# CREATE ROLE root WITH LOGIN SUPERUSER CREATEDB CREATEROLE PASSWORD 'passwordhere'
  2. CREATE ROLE 
  3. postgres=# \du 
  4.                                    List of roles 
  5.  Role name |                         Attributes                         | Member of 
  6. -----------+------------------------------------------------------------+----------- 
  7.  postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {} 
  8.  root      | Superuser, Create role, Create DB                          | {} 
  9.  
  10. postgres=# 

管理应用程序用户

以此创建数据库、创建用户,并向该用户授予访问该数据库的所有权限:

  1. create database app_db_name; 
  2. create user app_user with encrypted password 'dbpassword'
  3. grant all privileges on database app_db_name to app_user; 

在此查看用户和权限管理方面的完整指南。

从远程主机连接到实例

使用该命令从本地机连接到postgres实例:

  1. psql 'postgres://<username>:<password>@<host>:<port>/<db>?sslmode=disable' 
  2.  
  3. like 
  4. psql 'postgres://root:passwordhere@192.160.1.20:5432/postgres?sslmode=disable' 

结语

至此我们已在Fedora 34服务器上安装了Postgresql 14,做一些基本的配置,然后做基本的用户管理。

原文标题:How to Install and Configure Postgres 14 on Fedora 34

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

责任编辑:华轩 来源: 51CTO
相关推荐

2023-11-26 16:23:16

FedoraVSCodium

2021-11-28 06:33:24

Discord消息收发应用 Linux

2017-04-11 13:20:06

CentOSRHELFedora

2021-08-18 11:19:25

FedoraLinuxJava

2020-12-28 06:44:45

FedoraLinux RPM文件

2019-10-21 13:28:38

UbuntuPostgreSQL命令

2020-03-02 18:16:12

FedoraLinuxMongoDB

2021-07-25 10:34:17

FedoraPodmanLinux

2020-04-08 12:20:25

UbuntuLinuxOracle Java

2020-03-18 14:40:14

Ubuntu 18.0RedisLinux

2022-12-27 08:51:31

WebDebian 11

2015-08-04 13:29:06

Fedoralinux

2016-01-06 14:00:20

Ubuntu 14Ubuntu 15Apache Solr

2017-04-24 18:10:27

DrupalCentOSFedora

2020-11-25 09:47:11

FedoraGoogle Chro浏览器

2021-11-29 14:38:45

FedoraLinuxBrave浏览器

2018-05-14 08:36:06

JavaFedoraOpenJDK

2018-06-11 09:55:09

LinuxFedorazsh

2020-11-24 13:55:20

FedoraVirtualBoxLinux

2017-03-21 15:51:57

LinuxCentOS 7MariaDB 10
点赞
收藏

51CTO技术栈公众号