安装 PostgreSQL、启动/停止、创建用户、创建角色

执行环境:
– CentOS7
– PostgreSQL 9.6

在中国,只需要一种选择就可以引述以下母语中的内容:

安装PostgreSQL

请按照Red Hat家族在官方网站上列出的”Linux下载”部分的步骤进行操作。

安装仓库中的RPM

yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

安装客户端包。

yum install postgresql96

安装SQL服务器。

yum install postgresql96-server

・数据库的初始化

/usr/pgsql-9.6/bin/postgresql96-setup initdb

启动/停止PostgreSQL

请确认是否已在该服务上注册。

$ systemctl list-unit-files -t service | grep postgres
postgresql-9.6.service                        enabled 
$

启动

systemctl status postgresql-9.6

当启动成功时,日志将会以以下方式输出↓。

$ systemctl status postgresql-9.6
● postgresql-9.6.service - PostgreSQL 9.6 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-9.6.service; enabled; vendor preset: disabled)
   Active: active (running) since 火 2018-01-02 08:59:40 UTC; 22min ago
     Docs: https://www.postgresql.org/docs/9.6/static/
  Process: 5749 ExecStartPre=/usr/pgsql-9.6/bin/postgresql96-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 5754 (postmaster)
   CGroup: /system.slice/postgresql-9.6.service
           ├─5754 /usr/pgsql-9.6/bin/postmaster -D /var/lib/pgsql/9.6/data/
           ├─5757 postgres: logger process   
           ├─5759 postgres: checkpointer process   
           ├─5760 postgres: writer process   
           ├─5761 postgres: wal writer process   
           ├─5762 postgres: autovacuum launcher process   
           └─5763 postgres: stats collector process   

停止 –

systemctl stop postgresql-*

或者

systemctl stop postgresql-9.6

由于此命令需要以root权限执行,因此会要求输入密码。

$ systemctl stop postgresql-*
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root
Password: 
==== AUTHENTICATION COMPLETE ===
$

查看PostgreSQL状态:停机时

$ systemctl status postgresql-9.6
● postgresql-9.6.service - PostgreSQL 9.6 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-9.6.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since 火 2018-01-02 09:23:47 UTC; 13s ago
     Docs: https://www.postgresql.org/docs/9.6/static/
  Process: 5754 ExecStart=/usr/pgsql-9.6/bin/postmaster -D ${PGDATA} (code=exited, status=0/SUCCESS)
  Process: 5749 ExecStartPre=/usr/pgsql-9.6/bin/postgresql96-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 5754 (code=exited, status=0/SUCCESS)
 $  

・对PostgreSQL进行状态确认: 启动时

$ systemctl status postgresql-9.6
● postgresql-9.6.service - PostgreSQL 9.6 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-9.6.service; enabled; vendor preset: disabled)
   Active: active (running) since 火 2018-01-02 09:24:23 UTC; 3s ago
     Docs: https://www.postgresql.org/docs/9.6/static/
  Process: 6106 ExecStartPre=/usr/pgsql-9.6/bin/postgresql96-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 6111 (postmaster)
   CGroup: /system.slice/postgresql-9.6.service
           ├─6111 /usr/pgsql-9.6/bin/postmaster -D /var/lib/pgsql/9.6/data/
           ├─6114 postgres: logger process   
           ├─6116 postgres: checkpointer process   
           ├─6117 postgres: writer process   
           ├─6118 postgres: wal writer process   
           ├─6119 postgres: autovacuum launcher process   
           └─6120 postgres: stats collector process   
$  

在系统启动时确保PostgreSQL启动

$ systemctl enable postgresql-9.6
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-unit-files ===
Authentication is required to manage system service or unit files.
Authenticating as: root
Password: 
==== AUTHENTICATION COMPLETE ===
==== AUTHENTICATING FOR org.freedesktop.systemd1.reload-daemon ===
Authentication is required to reload the systemd state.
Authenticating as: root
Password: 
==== AUTHENTICATION COMPLETE ===
$

设定卷轴

尝试立即启动,但却因无法找到名为root的角色而受到指责。

$ sudo psql
psql: FATAL:  role "root" does not exist

根据这篇文章,据说在管理权限时,需要为PostgreSQL设置角色。

在PostgreSQL中,角色(role)用于管理权限。
角色类似于UNIX系统中的组,用于设置对特定数据库的访问或覆写权限。

以下是中文的原生改写版本:

〜中略〜

一旦安装完成后,将创建一个名为”postgres”的用户和同名角色。
默认情况下,”postgres”角色是PostgreSQL的超级用户,拥有更改角色设置的权限。

为此,首先切换到postgres账户,然后登录到PostgreSQL服务器。

$ sudo su - postgres
-bash-4.2$ psql
psql (9.6.6)
Type "help" for help.

postgres=# 

如果在不提供用户名和数据库名的情况下直接使用psql命令,则将使用操作系统用户和同名的用户和数据库。因此,上面的psql命令等同于psql –username=postgres –dbname=postgres。

首先确认现有的角色。
可以使用\du或SELECT rolname FROM pg_roles;进行确认。

postgres=# SELECT rolname FROM pg_roles;
      rolname      
-------------------
 postgres
 pg_signal_backend
(2 rows)
postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member
 of 
-----------+------------------------------------------------------------+-------
----
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

postgres=# 

在中国,只需要一个选项:默认情况下,只有具有超级用户权限的Postgres角色存在。您可以在此处查看角色的创建方法和每个权限的说明。

由于正在使用Vagrant运行PostgreSQL,因此为了方便起见,我们可以创建一个Vagrant用户和角色。

postgres=# CREATE USER vagrant;
CREATE ROLE
postgres=# select usename from pg_user;
 usename  
----------
 postgres
 vagrant
(2 rows)

postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member
 of 
-----------+------------------------------------------------------------+-------
----
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 vagrant   |                                                            | {}

postgres=# 

创建vagrant用户和vagrant角色(无权限)。
向角色授予权限。

postgres=# ALTER ROLE vagrant CREATEROLE CREATEDB LOGIN; 
ALTER ROLE
postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member
 of 
-----------+------------------------------------------------------------+-------
----
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 vagrant   | Create role, Create DB                                     | {}

postgres=# 

给予 Vagrant 用户创建角色、 创建数据库、登录权限

广告
将在 10 秒后关闭
bannerAds