openSUSE 安裝 PostgreSQL

環境:openSUSE Leap 42.2html

自從 Ubuntu 棄 Unity 轉 Gnome,我也就棄 Ubuntu 而轉 openSUSE 了。
Leap 的軟件版本是舊了一點(好比 Vim 還停留在 7.4),好處是穩定、優雅、省心。滾動發行版 Tumbleweed 目前還差那麼一口氣,試用以後以爲不夠穩定,並不適合平常使用。
openSUSE 的 KDE 桌面堪稱一絕,上班用 Windows、娛樂用 Mac、寫代碼用 Linux 的我,自認爲 openSUSE 的 KDE 是最好的桌面。linux

還在用 Ubuntu 的同窗,能夠參考 阮一峯 寫的 PostgreSQL 新手入門sql

安裝

安裝客戶端:數據庫

$ sudo zypper in postgresql

安裝服務器:bash

$ sudo zypper in postgresql-server

交互式客戶端程序是 psql,服務器程序是 postgres服務器

安裝完後,Linux 多了一個用戶 postgres,可是這個用戶沒有設置密碼,如今爲它設置密碼:工具

$ sudo passwd postgres
<提示輸入新的密碼>

下面切換到用戶 postgres,而後建立數據庫簇(Cluster)。post

(adam@linux) $ su postgres
<輸入剛剛設置的密碼>

(postgres@linux) $ initdb -D /var/lib/pgsql/data

數據庫簇是放置數據庫的位置,/var/lib/pgsql/data 是推薦的位置之一。編碼

啓動服務

必須先切換至 postgres 用戶:日誌

(adam@linux) $ su postgres

經過 pg_ctl 工具啓動服務:

(postgres@linux) $ pg_ctl start -D /var/lib/pgsql/data
正在啓動服務器進程
2017-06-25 10:11:14 CST   日誌:  日誌輸出重定向到日誌收集進程
2017-06-25 10:11:14 CST   提示:  後續的日誌輸出將出如今目錄 "pg_log" 中

pg_ctl 是一個用於初始化、啓動、中止或控制 PostgreSQL 服務器的工具。

看一下進程狀態:

$ ps aux | grep postgres
postgres  5765  0.0  0.2 213160 20404 pts/0    S    10:11   0:00 /usr/lib/postgresql94/bin/postgres -D /var/lib/pgsql/data
postgres  5768  0.0  0.0  68308  3112 ?        Ss   10:11   0:00 postgres: logger process
postgres  5770  0.0  0.0 213160  3628 ?        Ss   10:11   0:00 postgres: checkpointer process
postgres  5771  0.0  0.0 213160  5684 ?        Ss   10:11   0:00 postgres: writer process
postgres  5772  0.0  0.0 213160  3628 ?        Ss   10:11   0:00 postgres: wal writer process
postgres  5773  0.0  0.0 213560  6800 ?        Ss   10:11   0:00 postgres: autovacuum launcher process
postgres  5774  0.0  0.0  68304  4216 ?        Ss   10:11   0:00 postgres: stats collector process

經過 pg_ctl 查看狀態:

(postgres@linux) $ pg_ctl status -D /var/lib/pgsql/data
pg_ctl: 正在運行服務器進程(PID: 5765)
/usr/lib/postgresql94/bin/postgres "-D" "/var/lib/pgsql/data"

注意非 postgres 用戶下還是沒有權限查看狀態的:

(adam@linux) $ pg_ctl status -D /var/lib/pgsql/data
pg_ctl: 沒法訪問目錄 "/var/lib/pgsql/data": 權限不夠

爲了不每次都用 -D 選項指定數據庫簇的目錄,現添加環境變量 PGDATA
打開 .bashrc,添加以下兩行:

# PostgreSQL database cluster directory.
export PGDATA=/var/lib/pgsql/data

下次再用 pg_ctl 時就不需指定 -D 了。

(postgres@linux) $ pg_ctl status
pg_ctl: 正在運行服務器進程(PID: 5765)
/usr/lib/postgresql94/bin/postgres "-D" "/var/lib/pgsql/data"

角色(Role)

回到 Linux 普通用戶(好比 adam),用客戶端程序 psql 嘗試交互:

(adam@linux) $ psql template1
psql: 致命錯誤:  角色 "adam" 不存在

提示說角色不存在。
角色是 PostgreSQL 管理數據庫訪問權限的一個概念。

切回 postgres 用戶,列出全部角色。

(postgres@linux) $ psql template1
psql (9.4.9)
輸入 "help" 來獲取幫助信息.

template1=# SELECT rolname FROM pg_roles;
rolname
----------
postgres
(1 行記錄)

可見目前只有一個角色 postgres。
新建一個角色 adam

template1=# CREATE ROLE adam;
CREATE ROLE
template1=# SELECT  rolname FROM pg_roles;
rolname
----------
postgres
adam
(2 行記錄)

再次嘗試以用戶 adam 鏈接:

(adam@linux) $ psql template1

psql: 致命錯誤:  不容許角色"adam" 進行登陸

看來剛剛建立的角色 adam 沒有 LOGIN 到數據庫的權限。
從新建立角色:

template1=# DROP ROLE adam;
DROP ROLE
template1=# CREATE ROLE adam WITH LOGIN CREATEDB PASSWORD '654321';

隨後,便可以角色 adam 登陸了。

(adam@linux) $ psql -l
                                    資料庫列表
  名稱    |  擁有者  | 字元編碼 |  校對規則   |    Ctype    |       存取權限
-----------+----------+----------+-------------+-------------+-----------------------
postgres  | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |
template0 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +
          |          |          |             |             | postgres=CTc/postgres
template1 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +
          |          |          |             |             | postgres=CTc/postgres
(3 行記錄)

psql 經過 -U 指定角色,前面都沒有指定,缺省角色即 Linux 的用戶名,因此其實能夠指定角色:

(adam@linux) $ psql -l -Uadam

注意,數據庫角色名沒必要和 Linux 用戶名相同。

經過 -U 選項,能夠以任意角色登陸數據庫:

(adam@linux) $ psql -l -Upostgres

建立數據庫

(adam@linux) $ createdb mydb

(adam@linux) $ psql -l

  名稱    |  擁有者  | 字元編碼 |  校對規則   |    Ctype    |       存取權限
-----------+----------+----------+-------------+-------------+-----------------------
mydb      | adam     | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |
...

刪除數據庫:

(adam@linux) $ dropdb mydb

使用數據庫:

(adam@linux) $ psql mydb

固然,psql 只是使用數據的方式之一。

相關文章
相關標籤/搜索