在CentOS上安装并测试PostgreSQL9.5

由于使用的应用程序需要PostgreSQL,所以进行了安装。只是版本不同,几乎与以下文章相同。在CentOS 7上安装最新版的PostgreSQL。

CentOS的版本

$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

安装PostgreSQL

在本文中,我提供以下的一个中文翻译版本:
安装PostgreSQL。

下载 PostgreSQL 的 RPM 软件包。

$ wget yum.postgresql.org/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-2.noarch.rpm

从这里开始以管理员身份执行,安装RPM包。

$ su
# rpm -ivh pgdg-centos95-9.5-2.noarch.rpm

使用Yum安装软件包。

# yum -y install postgresql95-server postgresql95-devel postgresql95-contrib

进行PostgreSQL初始化

# systemctl start postgresql-9.5
Job for postgresql-9.5.service failed because the control process exited with error code. See "systemctl status postgresql-9.5.service" and "journalctl -xe" for details.

由於出錯,請按照指示進行確認。
然後,要求創建PostgreSQL數據庫叢集。
有關initdb的信息可以在這個頁面上找到。

# systemctl status postgresql-9.5.service
● postgresql-9.5.service - PostgreSQL 9.5 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-9.5.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since 土 2016-01-09 15:42:19 JST; 24s ago
  Process: 14696 ExecStartPre=/usr/pgsql-9.5/bin/postgresql95-check-db-dir ${PGDATA} (code=exited, status=1/FAILURE)

 1月 09 15:42:19 local systemd[1]: Starting PostgreSQL 9.5 database server...
 1月 09 15:42:19 local systemd[1]: postgresql-9.5.service: control process exited, code=exited status=1
 1月 09 15:42:19 local systemd[1]: Failed to start PostgreSQL 9.5 database server.
 1月 09 15:42:19 local systemd[1]: Unit postgresql-9.5.service entered failed state.
 1月 09 15:42:19 local systemd[1]: postgresql-9.5.service failed.
# /usr/pgsql-9.5/bin/postgresql95-setup initdb
Initializing database ... OK

重新启动,并自动设置启动

# systemctl start postgresql-9.5
# systemctl enable postgresql-9.5

关于systemctl命令的内容已经在这篇文章中写明了。(需要登录才能阅读完整内容)Red Hat Enterprise Linux 7已经发布了。

确认连接

# su - postgres
最終ログイン: 2016/01/09 (土) 17:11:00 JST日時 pts/0
-bash-4.2$ psql
psql (9.5.0)
"help" でヘルプを表示します.

postgres-# \q
-bash-4.2$ exit
ログアウト

初始设置

更改PostgreSQL的配置文件。

postgresql.conf 文件

# vi /var/lib/pgsql/9.5/data/postgresql.conf
# 59行目
# listen_addresses = 'localhost' 

# 419行目
log_line_prefix = '<%m>'

只需要一种选择:如需更改,请按下etc后在vi中使用:59或/listen_addresses跳转到所需行。

# 他のホストからのアクセスを受け取る
listen_addresses = '*'

# ログの受け取り形式
# 420行目以降にログの出力形式の一覧がコメントアウトされて載っている
# 今回は '日時 ユーザ データベース' の形式
log_line_prefix = '<%t %u %d>'

pg_hba.conf的翻译:
“pg_hba.conf”是PostgreSQL的配置文件。

# vi /var/lib/pgsql/9.5/data/pg_hba.conf
# 80行目
# "local" is for Unix domain socket connections only
local   all             all                                     peer

以下是改变的方式。

请注意,这是机器生成的翻译,可能不完全准确。

# DB名とユーザ名が一致しなくても認証できるようにする
# "local" is for Unix domain socket connections only
local   all             all                                     md5

重启系统

# systemctl restart postgresql-9.5

用户设置

如果通过超级用户无法设置密码,请参看2017年1月11日追加的对策。

# su - postgres
最終ログイン: 2016/01/09 (土) 18:07:04 JST日時 pts/0
-bash-4.2$ psql
psql (9.5.0)
"help" でヘルプを表示します.

postgres=# \du
                                               ロール一覧
 ロール名 |                                       属性                                       | メンバー
----------+----------------------------------------------------------------------------------+----------
 postgres | スーパーユーザ, ロールを作成できる, DBを作成できる, レプリケーション, Bypass RLS | {}

postgres=# \password postgres
新しいパスワード:
もう一度入力してください:
postgres=# \q

如果无法设置postgres用户的密码

处理方法1

使用下面的命令来设置密码

# passwd postgres
ユーザー postgres のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:

请确认您是否能够登录

# psql -U postgres
ユーザ postgres のパスワード:

处理2

如果无法通过上述方法更改密码,则可以在不进行密码验证的情况下使PostgreSQL可用,然后使用SQL设置密码。

# vi /var/lib/pgsql/9.5/data/pg_hba.conf
# "local" is for Unix domain socket connections only
local   all             all                                     ident

重启系统

# systemctl restart postgresql-9.5

使用SQL更改密码。

# su - postgres
最終ログイン: 2017/01/11 (水) 13:41:15 JST日時 pts/0
-bash-4.2$ psql
psql (9.5.5)
Type "help" for help.

postgres=# ALTER USER postgres PASSWORD 'new_password';
ALTER ROLE
postgres=# \q
-bash-4.2$ exit
logout

根据pg_hba.conf的配置恢复原始设置。

# vi /var/lib/pgsql/9.5/data/pg_hba.conf
# "local" is for Unix domain socket connections only
local   all             all                                     md5

重启系统

# systemctl restart postgresql-9.5

请确认是否能够登录

# psql -U postgres
ユーザ postgres のパスワード:

进行表格创建和赋予访问权限的测试

创建测试用户

创建一个名为piyo的用户。

-bash-4.2$ createuser -P piyo
新しいロールのためのパスワード:
もう一度入力してください:
-bash-4.2$ psql
psql (9.5.0)
"help" でヘルプを表示します.

postgres=# \du
                                               ロール一覧
 ロール名 |                                       属性                                       | メンバー
----------+----------------------------------------------------------------------------------+----------
 postgres | スーパーユーザ, ロールを作成できる, DBを作成できる, レプリケーション, Bypass RLS | {}
 piyo     |                                                                                  | {}

postgres=#\q

创建数据库和表

创建DB

查看数据库列表

-bash-4.2$ psql
psql (9.5.0)
"help" でヘルプを表示します.

postgres=# \dp
                            アクセス権
 スキーマ | 名前 | 型 | アクセス権 | Column privileges | Policies
----------+------+----+------------+-------------------+----------
(0 行)

确认版本

postgres=# select version();
                                                 version
---------------------------------------------------------------------------------------------------------
 PostgreSQL 9.5.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4), 64-bit
(1 行)

创建一个名为hoge的数据库。

postgres=# create database hoge;
CREATE DATABASE
postgres=# \l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 hoge      | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres          +
           |          |                  |             |                   | postgres=CTc/postgres
(4 行)

创建表格

刚刚创建的DB连接到hoge,创建一个名为fuga的表。

postgres=# \connect hoge
データベース "fuga" にユーザ"postgres"として接続しました。
hoge=# CREATE TABLE fuga
hoge-# (id int, nick_name character varying(5), full_name text);
CREATE TABLE
hoge=# \dt
          リレーションの一覧
 スキーマ |  名前 |    型    |  所有者
----------+------+----------+----------
 public   | fuga | テーブル | postgres
(1 行)

hoge=# \d fuga
 テーブル "public.fuga"
     列     |         型           | 修飾語
------------+----------------------+--------
 id         | integer              |
 nick_name  | character varying(5) |
 full_name  | text                 |

hoge=#\q

授予权限

hoge=# GRANT SELECT, INSERT, UPDATE, DELETE ON fuga TO piyo;
GRANT                                                                               | {}

qgis=# \dp
                                                アクセス権
 スキーマ | 名前 |    型    |        アクセス権         | Column privileges | Policies
----------+-------------------------+----------+---------------------------+-------------------+----------
 public   | fuga | テーブル | postgres=arwdDxt/postgres+|                   |
          |      |          | piyo=arwd/postgres        |                   |
(1 行)

从创建的用户访问并执行SQL。

访问数据库

$ psql postgres piyo
ユーザ piyo のパスワード:
psql (9.5.0)
"help" でヘルプを表示します.

postgres=> \connect hoge
データベース "hoge" にユーザ"piyo"として接続しました。

选择命令

hoge=> select * from fuga;
 id | nick_name | full_name
----+-----------+-----------
(0 行)

插入指令

hoge=> INSERT INTO  fuga (id, nick_name, full_name) VALUES (1, 'NOBU', 'ODA NOBUNAGA');
INSERT 0 1
hoge=> select * from fuga;
 id | nick_name | full_name
----+-----------+--------------
  1 |      NOBU | ODA NOBUNAGA
(1 行)

更新指令

hoge=> UPDATE fuga SET nick_name='NAGA';
UPDATE 1
hoge=> select * from fuga;
 id | nick_name | full_name
----+-----------+--------------
  1 |      NAGA | ODA NOBUNAGA
(1 行)

删除指令

hoge=> DELETE FROM fuga WHERE id=1;
DELETE 1
hoge=> select * from fuga;
 id | nick_name | full_name
----+-----------+-----------
(0 行)

请提供更多细节

在CentOS 7上安装最新版本的PostgreSQL
在CentOS7.0(Vagrant)上安装了PostgreSQL 9.4
Red Hat Enterprise Linux 7已经到来
PostgreSQL用户管理
pg_hba.conf文件
initdb
ubuntu – Postgresql:用户“postgres”的密码身份验证失败- Stack Overflow

广告
将在 10 秒后关闭
bannerAds