在CentOS 7上安装PostgreSQL 11

环境

以下是安装PostgreSQL 11的CentOS 7备忘录。

    • CentOS 7.5(firewalldとSELinuxは無効化しています)

 

    Postgres 11.2

手順几乎相同,但适用于PostgreSQL12的步骤如下所示。

    CentOS 7.5にPostgreSQL12をインストールする

安装PostgreSQL的yum存储库。

安装适用于CentOS的PostgreSQL存储库包。
每个操作系统的存储库包URL列表已在以下网站中列出。

# yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
~省略~
Running transaction
  Installing : pgdg-redhat-repo-42.0-4.noarch                                                                                      1/1 
  Verifying  : pgdg-redhat-repo-42.0-4.noarch                                                                                      1/1 

Installed:
  pgdg-redhat-repo.noarch 0:42.0-4                                                                                                     

Complete!

安装PostgreSQL

安装PostgreSQL。

# yum -y install postgresql11-server postgresql11-contrib

~省略~
Running transaction
  Installing : postgresql11-libs-11.5-1PGDG.rhel7.x86_64                                                                                             1/6 
  Installing : libicu-50.2-3.el7.x86_64                                                                                                              2/6 
  Installing : postgresql11-11.5-1PGDG.rhel7.x86_64                                                                                                  3/6 
  Installing : libxslt-1.1.28-5.el7.x86_64                                                                                                           4/6 
  Installing : postgresql11-contrib-11.5-1PGDG.rhel7.x86_64                                                                                          5/6 
  Installing : postgresql11-server-11.5-1PGDG.rhel7.x86_64                                                                                           6/6 
  Verifying  : postgresql11-server-11.5-1PGDG.rhel7.x86_64                                                                                           1/6 
  Verifying  : libicu-50.2-3.el7.x86_64                                                                                                              2/6 
  Verifying  : postgresql11-contrib-11.5-1PGDG.rhel7.x86_64                                                                                          3/6 
  Verifying  : postgresql11-libs-11.5-1PGDG.rhel7.x86_64                                                                                             4/6 
  Verifying  : libxslt-1.1.28-5.el7.x86_64                                                                                                           5/6 
  Verifying  : postgresql11-11.5-1PGDG.rhel7.x86_64                                                                                                  6/6 

Installed:
  postgresql11-contrib.x86_64 0:11.5-1PGDG.rhel7                              postgresql11-server.x86_64 0:11.5-1PGDG.rhel7                             

Dependency Installed:
  libicu.x86_64 0:50.2-3.el7    libxslt.x86_64 0:1.1.28-5.el7    postgresql11.x86_64 0:11.5-1PGDG.rhel7    postgresql11-libs.x86_64 0:11.5-1PGDG.rhel7   

Complete!

PostgreSQL将安装在”/usr/pgsql-11/”目录下。

# ls -l /usr/pgsql-11/
total 12
drwxr-xr-x. 2 root root 4096 May  1 03:42 bin
drwxr-xr-x. 3 root root 4096 May  1 03:42 lib
drwxr-xr-x. 7 root root 4096 May  1 03:42 share

自动启动PostgreSQL

为了自动启动PostgreSQL,执行以下命令。

# systemctl enable postgresql-11.service

创建数据库集群

创建数据库集群。
正在以root用户身份执行。
数据库文件默认会创建在“/var/lib/pgsql/11/data/”,但现在将其改为在“/data/”目录下。
可以通过postgresql-11.service文件中的“PGDATA”环境变量指定。

$ vi /usr/lib/systemd/system/postgresql-11.service

変更前)
Environment=PGDATA=/var/lib/pgsql/11/data/
変更後)
Environment=PGDATA=/data/

$ systemctl daemon-reload

下面的命令将创建一个数据库集群。(尽管可以使用initdb命令创建,但这里我们使用了postgresql-11-setup)

# PGSETUP_INITDB_OPTIONS="-E UTF8 --no-locale" /usr/pgsql-11/bin/postgresql-11-setup initdb
Initializing database ... OK

确认生成在「/data/」下面。

# cat /data/PG_VERSION 
11

启动PostgreSQL

在启动之前,将PostgreSQL的bin目录添加到路径中。

# su - postgres

/var/lib/pgsql/.pgsql_profileにパスを追加します。

# vi /var/lib/pgsql/.pgsql_profile
PATH=/usr/pgsql-11/bin:$PATH
export PATH

PGDATAを修正します。

# vi /var/lib/pgsql/.bash_profile
#PGDATA=/var/lib/pgsql/11/data
PGDATA=/data

# source ~/.bash_profile

在中文中,PostgreSQL的启动可以通过使用命令「pg_ctl start」来实现。

$ pg_ctl start
waiting for server to start....2019-05-01 03:58:27.020 CEST [12912] LOG:  listening on IPv6 address "::1", port 5432
2019-05-01 03:58:27.020 CEST [12912] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2019-05-01 03:58:27.022 CEST [12912] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2019-05-01 03:58:27.025 CEST [12912] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2019-05-01 03:58:27.033 CEST [12912] LOG:  redirecting log output to logging collector process
2019-05-01 03:58:27.033 CEST [12912] HINT:  Future log output will appear in directory "log".
 done
server started

※ “systemctl start postgresql-11” 也可以

查询数据库

我将查看创建的数据库集群。
我将尝试显示版本和数据库列表。

-bash-4.2$ psql -V
psql (PostgreSQL) 11.2
-bash-4.2$ psql -l
                             List of databases
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges   
-----------+----------+----------+---------+-------+-----------------------
 postgres  | postgres | UTF8     | C       | C     | 
 template0 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 template1 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres

创建用户和数据库

创建一个名为“testuser”的用户和一个名为“testdb”的数据库。

$ createuser --login --pwprompt testuser
Enter password for new role: 
Enter it again:

$ createdb --owner=testuser testdb

允许来自外部的连接

由于默认情况下,PostgreSQL无法进行远程连接,所以需要进行设置更改。

# vi /data/postgresql.conf
※デフォルトでは「/var/lib/pgsql/11/data/postgresql.conf」

変更前)
#listen_addresses = 'localhost'
変更後)
listen_addresses = '*'

接下来要修改pg_hba.conf文件。

# vi /data/pg_hba.conf
※デフォルトでは「/var/lib/pgsql/11/data/pg_hba.conf」

# "local" is for Unix domain socket connections only
local   testdb          testuser                                md5
→ローカルからtestdbへtestuserでmd5接続できるように1行追加。
local   all             all                                     peer
# IPv4 local connections:
host    all             all             192.168.10.0/24         md5
→192.168.10.0/24から接続できるように1行追加。
host    all             all             127.0.0.1/32            ident

重新加载设置更改。

$ pg_ctl reload
※ もしくはsystemctl reload postgresql-11でもいいはず。

更改postgres用户的密码(可以选择不更改)。

$ psql
psql (11.5)
Type "help" for help.

postgres=# alter role postgres with password 'postgres';

我将确认从远程连接(A5: 已确认从SQL连接,但省略了说明)。

可以按以下方式执行从本地进行的连接确认。

$ psql testdb testuser
Password for user testuser: 
psql (11.2)
Type "help" for help.

testdb=> 

创建表

我将创建一个表格并输入一些数据。

testdb=> create table test (id int, value text);
CREATE TABLE
testdb=> insert into test (id, value) values (1, 'test text');
INSERT 0 1
testdb=> select * from test;
 id |   value   
----+-----------
  1 | test text
(1 row)

使用「\d」查看表格列表,使用「\du」查看角色列表。

testdb=> \d
        List of relations
 Schema | Name | Type  |  Owner   
--------+------+-------+----------
 public | test | table | testuser
(1 row)

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

其他设置更改

PostgreSQL似乎整体上设置了较小的各种参数值。
我只改变了共享缓冲区,从128MB增加到512MB(据说最好是总内存的20%至40%)。虽然还有许多其他参数也应该改变,但由于共享缓冲区和其他参数都依赖于系统,所以这次不做更改。

以下是更改共享缓冲区的方法。

# vi /data/postgresql.conf
※デフォルトでは「/var/lib/pgsql/11/data/postgresql.conf」

変更前)
shared_buffers = 128MB
変更後)
shared_buffers = 512MB

只需要重新启动PostgreSQL即可。

日志的设置

我已将日志设置更改如下。

$ vi /data/postgresql.conf

以下是变更前的内容。

log_filename = 'postgresql-%a.log'
log_rotation_size = 0
#log_min_duration_statement = -1
#log_checkpoints = off
#log_connections = off
#log_disconnections = off
#log_lock_waits = off

更改后如下所示。

log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_rotation_size = 1GB
log_min_duration_statement = 500ms
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0

使用pgbench进行基准测试。

在PostgreSQL中,标配了用于基准测试的pgbench工具。
首先,使用pgbench创建用于基准测试的表和数据。

$ pgbench -i testdb
dropping old tables...
NOTICE:  table "pgbench_accounts" does not exist, skipping
NOTICE:  table "pgbench_branches" does not exist, skipping
NOTICE:  table "pgbench_history" does not exist, skipping
NOTICE:  table "pgbench_tellers" does not exist, skipping
creating tables...
generating data...
100000 of 100000 tuples (100%) done (elapsed 0.12 s, remaining 0.00 s)
vacuuming...
creating primary keys...
done.

当数据准备好后,接下来会执行基准测试。

$ pgbench -c 10 -t 1000 testdb
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 1
query mode: simple
number of clients: 10
number of threads: 1
number of transactions per client: 1000
number of transactions actually processed: 10000/10000
latency average = 7.902 ms
tps = 1265.495967 (including connections establishing)
tps = 1265.842732 (excluding connections establishing)

“-c 10″表示客户端数为”10″,”-t 1000″表示每个客户端的交易数。

可以看到在运行基准测试后的缓存命中率如下。

select relname,
   round(heap_blks_hit * 100 / (heap_blks_hit+heap_blks_read), 2)
   as cache_hit_ratio from pg_statio_user_tables
     where heap_blks_read > 0 order by cache_hit_ratio;

     relname      | cache_hit_ratio 
------------------+-----------------
 test             |           60.00
 pgbench_accounts |           98.00
 pgbench_history  |           99.00
 pgbench_tellers  |           99.00
 pgbench_branches |           99.00

索引的缓存命中率如下。

select relname, indexrelname,
   round(idx_blks_hit * 100 / (idx_blks_hit + idx_blks_read), 2)
   as cache_hit_ratio from pg_statio_user_indexes
     where idx_blks_read > 0 order by cache_hit_ratio;

     relname      |     indexrelname      | cache_hit_ratio 
------------------+-----------------------+-----------------
 pgbench_tellers  | pgbench_tellers_pkey  |           96.00
 pgbench_branches | pgbench_branches_pkey |           99.00
 pgbench_accounts | pgbench_accounts_pkey |           99.00

请提供更具体的信息。

    • PostgreSQL 11 を CentOS 7 にインストールするには

 

    • PostgreSQL 11.2 Documentation

 

    pgbenchの使いこなし by Let’s Postgres
广告
将在 10 秒后关闭
bannerAds