安装 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 用户创建角色、 创建数据库、登录权限