【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. 确保服务器是最新的
在继续之前,确保我们的服务器有最新的软件包。使用该命令:
- $ sudo dnf -y update
- Last metadata expiration check: 2:55:24 ago on Tue 26 Oct 2021 12:05:29 PM UTC.
- Dependencies resolved.
- Nothing to do.
- Complete!
2. 安装和启动Postgres Server
fedora dnf postgres模块含有Postgres 14安装版,但不是默认的。不妨使用该命令在Fedora上检查Postges模块:
- $ sudo dnf module list postgresql
- Last metadata expiration check: 2:56:45 ago on Tue 26 Oct 2021 12:05:29 PM UTC.
- Fedora Modular 34 - x86_64
- Name Stream Profiles Summary
- postgresql 9.6 client, server [d] PostgreSQL module
- postgresql 10 client, server [d] PostgreSQL module
- postgresql 11 client, server [d] PostgreSQL module
- postgresql 12 client, server PostgreSQL module
- postgresql 13 client, server PostgreSQL module
- Fedora Modular 34 - x86_64 - Updates
- Name Stream Profiles Summary
- postgresql 9.6 client, server [d] PostgreSQL module
- postgresql 10 client, server [d] PostgreSQL module
- postgresql 11 client, server [d] PostgreSQL module
- postgresql 12 client, server PostgreSQL module
- postgresql 13 client, server PostgreSQL module
- postgresql 14 client, server PostgreSQL module
- Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
这意味着要使用它,就得启用它。先重置postgres模块,那样我们就没有默认版。
- sudo dnf module reset postgresql
然后用该命令启用postgres 14:
- $ sudo dnf module enable postgresql:14
- Last metadata expiration check: 3:03:33 ago on Tue 26 Oct 2021 12:05:29 PM UTC.
- Dependencies resolved.
- ================================================================================================================================================================================================================================================================================
- Package Architecture Version Repository Size
- ========================================================================================================================================================================================================================================================================
- Enabling module streams:
- postgresql 14
- Transaction Summary
- ========================================================================================================================================================================================================================================================================
- Is this ok [y/N]: y
- Complete!
现在不妨安装Postgresql 14和Contrib软件包,后者为PostgreSQL数据库系统提供了几个额外的功能:
- sudo dnf install -y postgresql-server postgresql-contrib
一旦安装完成,用以下命令初始化PostgreSQL数据库:
- $ sudo postgresql-setup initdb
- WARNING: using obsoleted argument syntax, try --help
- WARNING: arguments transformed to: postgresql-setup --initdb --unit postgresql
- * Initializing database in '/var/lib/pgsql/data'
- * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
现在启动服务:
- sudo systemctl start postgresql
然后启用该服务,以便服务器重启后它启动:
- $ sudo systemctl enable postgresql
- Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service.
确认Postgres 14在运行:
- $ sudo systemctl status postgresql
- ● postgresql.service - PostgreSQL database server
- Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; vendor preset: disabled)
- Active: active (running) since Tue 2021-10-26 15:18:53 UTC; 46s ago
- Process: 17645 ExecStartPre=/usr/libexec/postgresql-check-db-dir postgresql (code=exited, status=0/SUCCESS)
- Main PID: 17647 (postmaster)
- Tasks: 8 (limit: 4603)
- Memory: 15.7M
- CPU: 47ms
- CGroup: /system.slice/postgresql.service
- ├─17647 /usr/bin/postmaster -D /var/lib/pgsql/data
- ├─17648 postgres: logger
- ├─17650 postgres: checkpointer
- ├─17651 postgres: background writer
- ├─17652 postgres: walwriter
- ├─17653 postgres: autovacuum launcher
- ├─17654 postgres: stats collector
- └─17655 postgres: logical replication launcher
- Oct 26 15:18:52 ip-10-2-40-182.us-west-2.compute.internal systemd[1]: Starting PostgreSQL database server...
- 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
- 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".
- 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();"
输出:
- $ sudo -u postgres psql -c "SELECT version();"
- could not change directory to "/home/fedora": Permission denied
- version
- --------------------------------------------------------------------------------------------------------------
- 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
- (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帐户:
- sudo -i -u postgres
现在您可以立即访问Postgres提示符,只需输入:
- $ psql
- psql (14.0)
- Type "help" for help.
- postgres=#
您将因此登录到PostgreSQL提示符,可以立即与数据库管理系统进行交互。
(2)通过以postgres用户的身份来运行命令
使用该方法,以postgres用户的身份直接运行命令,使用sudo:
- sudo -u postgres psql
输出:
- $ sudo -u postgres psql
- psql (14.0)
- Type "help" for help.
- postgres=#
5. 配置postgres 14实例以便远程访问
为此,我们将改动postgres配置文件。我们需要打开文件,并调整配置。Postgresql 14的主配置文件位于该路径:/var/lib/pgsql/14/data/pg_hba.conf。
不妨将peer识别改为trust(信任):
- sed -i '/^local/s/peer/trust/' /var/lib/pgsql/data/pg_hba.conf
将ident识别改为md5,允许密码登录。
- sed -i '/^host/s/ident/md5/' /var/lib/pgsql/data/pg_hba.conf
添加block,允许从所有地方访问:
将该内容添加到文件/var/lib/pgsql/data/pg_hba.conf
- host all all 0.0.0.0/0 md5
确保PostgreSQL在监听*
将这一行添加到这里的配置文件/var/lib/pgsql/data/postgresql.conf
- listen_addresses='*'
启用并重启postgresql服务器,重新加载配置:
- sudo systemctl restart postgresql
- sudo systemctl enable postgresql
6. 用户管理
创建超级用户
由于一切已到位,不妨创建超级用户。
以postres角色连接到数据库:
- $ sudo -u postgres psql
- psql (14.0)
- Type "help" for help.
- postgres=#
创建名称为root的超级用户:
- CREATE ROLE root WITH LOGIN SUPERUSER CREATEDB CREATEROLE PASSWORD 'passwordhere';
输出:
- postgres=# CREATE ROLE root WITH LOGIN SUPERUSER CREATEDB CREATEROLE PASSWORD 'passwordhere';
- CREATE ROLE
- postgres=# \du
- List of roles
- Role name | Attributes | Member of
- -----------+------------------------------------------------------------+-----------
- postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
- root | Superuser, Create role, Create DB | {}
- postgres=#
管理应用程序用户
以此创建数据库、创建用户,并向该用户授予访问该数据库的所有权限:
- create database app_db_name;
- create user app_user with encrypted password 'dbpassword';
- grant all privileges on database app_db_name to app_user;
可在此查看用户和权限管理方面的完整指南。
从远程主机连接到实例
使用该命令从本地机连接到postgres实例:
- psql 'postgres://<username>:<password>@<host>:<port>/<db>?sslmode=disable'
- # like
- 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】