在中文中,也可以这样表达:建立一个PostgreSQL服务器

建立环境

IaaS:AWS EC2
操作系统:RHEL-7.6_HVM_GA-20190128-x86_64-0-Hourly2-GP2(社区 AMI)
数据库:PostgreSQL 11.5

有关构建策略

在安装PostgreSQL时,有多种方法可供选择,例如使用yum命令或从源代码进行安装。
本次我们将选择从源代码进行安装,因为这样可以更方便地选择版本。

安装所需的服务器构建软件包。

如果从源代码进行安装,则需要安装C编译器和GNU Readline库等。如果未安装,将在后续执行configure脚本时出错。

安装GCC

如果没有C编译器,将安装gcc。

$ sudo yum install gcc -y

安装readline-devel

如果缺少readline库,需要安装readline-devel。

$ sudo yum install readline-devel -y

安装zlib-devel

如果没有zlib库,则安装zlib-devel。

$ sudo yum install zlib-devel -y

4. 安装systemd-devel(可选)

如果你想在Systemd的单位文件中使用Type=notify,需要安装systemd-devel。如果在后续的配置脚本中添加了“–with-libxml”选项,则会需要它。

sudo yum install systemd-devel -y

安装libxml2-devel(可选)。

如果无法使用libxml版本2.6.23或更高版本,则需要安装libxml2-devel。如果在后续执行的configure脚本中添加了“–with-libxml”选项,则需要安装。

$ sudo yum install libxml2-devel -y

创建用于管理PostgreSQL的用户

由于不能以root用户身份执行数据库群集的新创建(initdb)操作,因此需要创建专用用户。

创建用户

将用户切换为root。使用useradd命令添加用户,并使用passwd命令指定用户密码。

$ sudo su -
# useradd postgres
# passwd postgres
Changing password for user postgres.
New password: 
BAD PASSWORD: The password contains the user name in some form
Retype new password: 
passwd: all authentication tokens updated successfully.

给予sudo执行权限。

将创建的postgres用户配置为可以使用root权限执行(sudo)。

# visudo
以下を追記する
postgres ALL=(ALL)      NOPASSWD: ALL

从现在开始,继续切换到postgres用户执行操作。

将用户从root切换回到postgres用户。

# exit 
$ su - postgres
パスワード:

获取tar文件

请确认要安装的版本的tar文件的URL。

您可以在以下链接中下载各个版本的tar压缩文件。
您可以使用浏览器的开发者工具等方法,获取您想要安装的版本的tar文件的链接并事先保存好。

以下是可以下載 tar 檔案的網站:
https://www.postgresql.org/ftp/source/
如果您想要在 GUI 環境的 Linux 或 Windows 環境中進行安裝,您可以直接從這個網站進行安裝即可。
由於這次我們是在 CUI 的 Linux 環境中直接下載,所以只需要確認 tar 檔案的 URL 即可。

2. 下载tar文件

使用curl命令下载tar文件。

$ curl -OL https://ftp.postgresql.org/pub/source/v11.5/postgresql-11.5.tar.gz

安装

1.解压和放置tar文件。

解压缩tar文件,并将其放置在安装目录的层次结构中。

$ tar xzvf postgresql-11.5.tar.gz
$ sudo mv postgresql-11.5 /usr/local/pgsql

更改安装目录的所有者

PostgreSQL无法以root用户运行,而需要使用任意用户来运行。
因此,必须进行足够的权限设置,以便服务器可以访问和读写initdb创建的文件和目录。
在这种情况下,我们将把目录的所有者设置为作为服务器进程所有者的postgres。

$ sudo chown -R postgres:postgres /usr/local/pgsql

执行配置脚本和编译

执行configure脚本,然后使用make命令进行编译。
但是,如果从源代码安装软件,必须先确保软件已安装。
如果未安装,则会在”sudo ./configure”时报错,因此需要先安装所需软件。

本次使用Systemd启动和停止PostgreSQL数据库。
在Systemd的单元文件中,我们想要将Type设置为notify,因此需要添加”–with-systemd”选项。

$ cd /usr/local/pgsql
$ sudo ./configure --with-systemd
$ make world
$ make check

安装

使用 make 命令进行安装。

$ make install-world

确认安装的执行结果。

如果在“/usr/local/pgsql”中创建了名为“bin”、“include”、“lib”和“share”的目录,则表示安装成功。

$ ls -la /usr/local/pgsql
・
・
drwxrwxr-x.  2 postgres postgres   4096 Feb  7 04:24 bin
・
・
drwxrwxr-x.  6 postgres postgres   4096 Feb  7 04:24 include
・
・
drwxrwxr-x.  4 postgres postgres   4096 Feb  7 04:24 lib
・
・
drwxrwxr-x.  8 postgres postgres   4096 Feb  7 04:24 share

设定环境变量。

将与PostgreSQL相关的命令、手册、共享库和数据库的数据分别设置为环境变量。
* 为了谨慎起见,请使用cp命令备份修复前的状态。

$ cd /home/postgres/
$ sudo cp -p .bash_profile .bash_profile_bkYYYYMMDD

$ vi .bash_profile
#以下を追記
##YYYY/MM/DD add
export PATH=/usr/local/pgsql/bin:$PATH
export MANPATH=/usr/local/pgsql/man:$MANPATH
export LD_LIBRARY_PATH=/usr/local/pgsql/lib
export PGDATA=/usr/local/pgsql/data

修改.bash_profile文件后,使用source命令来更新环境变量的加载。

source $HOME/.bash_profile

确认设置

使用psql命令来确认PostgreSQL的版本。

$ psql --version
psql (PostgreSQL) 11.5

使用 which 命令可以确认 psql 命令执行的程序是否为我们这次安装的版本。

which psql
/usr/local/pgsql/bin/psql

我会确认各种路径是否已经反映了 PostgreSQL 的配置。

$ env | grep PATH
MANPATH=/usr/local/pgsql/man:
LD_LIBRARY_PATH=/usr/local/pgsql/lib
PATH=/usr/local/pgsql/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/postgres/.local/bin:/home/postgres/bin:/home/postgres/.local/bin:/home/postgres/bin

我要确认PGDATA的设置是否已经生效。

$ env | grep PGDATA
PGDATA=/usr/local/pgsql/data

创建数据库集群

创建一个名为”data”的目录。

创建用于存储数据库集群数据的目录。
※如果该目录已存在,则将其进行初始化。

$ mkdir /usr/local/pgsql/data
$ rmdir /usr/local/pgsql/data/* 

创建数据库集群

本次操作将使用initdb指定字符编码和区域设置。
字符编码为UTF-8,区域设置将遵循Linux环境的配置,选项为”–encoding=UTF8 –no-locale”。
※ 在PostgreSQL中,服务器和客户端都需要指定字符编码,但服务器端不支持SJIS。

$ initdb --encoding=UTF8 --no-locale
・
・
Success. You can now start the database server using:

    pg_ctl -D /usr/local/pgsql/data -l logfile start

在执行initdb后,确认每个文件都在”data”目录中被生成。

ls -la /usr/local/pgsql/data
total 52
drwx------. 19 postgres postgres  4096 Jan 17 03:43 .
drwxr-xr-x.  7 postgres postgres    68 Jan 17 03:31 ..
drwx------.  5 postgres postgres    41 Jan 17 03:43 base
drwx------.  2 postgres postgres  4096 Jan 17 03:43 global
drwx------.  2 postgres postgres     6 Jan 17 03:43 pg_commit_ts
・
・
・

更改設定值 zhí)

1.PostgreSQL的配置文件

为了能够从外部连接到PostgreSQL,我们需要设置listen_addresses。然而,如果指定为“localhost”,则只能通过localhost进行连接,不能通过IP地址进行连接;相反,如果指定为私有IP地址,则只能通过IP地址进行连接,不能通过localhost进行连接。因此,为了能够同时通过两种方式连接,这次我们将设置为“*”。

$ cd /usr/local/pgsql/data/
$ sudo cp -p postgresql.conf postgresql.conf.bkYYYYMMDD
$ vi postgresql.conf

listen_addresses = '*'

2.pg_hba.conf的概述被修改了。

设置连接的客户端信息。
通过此设置,您可以控制连接到PostgreSQL的客户端的连接可行性。

$ cd /usr/local/pgsql/data/
$ sudo cp -p pg_hba.conf pg_hba.conf.bkYYYYMMDD
$ vi pg_hba.conf

在「replication privilege」下,设置连接到PostgreSQL的终端的信息。

只接受任何IP

host  all  all  0.0.0.0/0    trust

为了启动和停止PostgreSQL,需要配置Systemd。

可以使用”pg_ctl start -w”,”pg_ctl stop”等命令来简单地启动和停止PostgreSQL,但是如果要在服务器启动时自动启动PostgreSQL,需要设置为使用Systemd进行管理。

创建单位定义文件。

为了管理PostgreSQL,创建一个单位文件。

$ sudo vi /etc/systemd/system/postgresql.service

[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)

[Service]
Type=notify
User=postgres
ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0

[Install]
WantedBy=multi-user.target

2. 设置在启动时自动启动PostgreSQL服务器。

$ sudo systemctl enable postgresql

3.使用 Systemd 进行停止和启动

使用systemctl命令进行启动。

$ sudo systemctl start postgresql

请确认状态,如果状态为active (running),则表示OK。

$ sudo systemctl status postgresql
● postgresql.service - PostgreSQL database server
   Loaded: loaded (/etc/systemd/system/postgresql.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2021-02-13 03:05:59 UTC; 8s ago
     Docs: man:postgres(1)
 Main PID: 18818 (postgres)
   CGroup: /system.slice/postgresql.service
           ├─18818 /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
           ├─18820 postgres: checkpointer   
           ├─18821 postgres: background writer   
           ├─18822 postgres: walwriter   
           ├─18823 postgres: autovacuum launcher   
           ├─18824 postgres: stats collector   
           └─18825 postgres: logical replication launcher 

当您想要停止时,请使用”stop”命令进行停止。

$ sudo systemctl stop postgresql

如果更改了单位文件的内容,在操作之前请重新加载配置文件。

$ sudo systemctl daemon-reload

创建数据库

将在应用程序中创建可用的数据库。
这次以示例为例:
数据库名:db_sample
角色(用户):sampleuser
模式名:sampleschema。

创建数据库

使用psql命令连接到PostgreSQL并创建一个数据库。

$ psql
postgres=# CREATE DATABASE db_sample;
CREATE DATABASE

2.制作卷心菜

使用c语言选择数据库,并创建角色。

postgres=# \c db_sample
db_sample=# CREATE ROLE sampleuser WITH LOGIN PASSWORD 'sample';

3. 创建模式

将创建的角色作为所有者创建模式。

db_sample=# CREATE SCHEMA sampleschema AUTHORIZATION sampleuser;

将默认模式设置为“ロール”。

当使用sampleuser连接到PostgreSQL时,需要指定默认模式为sampleschema。

db_sample=# ALTER ROLE sampleuser SET search_path = "sampleschema";

用创建的角色进行连接确认

如果使用创建的角色重新连接,并且指定的模式朝向当前模式,那就可以了。

db_sample=# \q
$ psql -h localhost -U sampleuser -d db_sample
db_sample=> SELECT current_schema();
 current_schema 
----------------
 sampleschema
(1 row)

最后

服务器构建所需的工作已经完成。接下来让我们创建必要的表格和数据,例如create table。

文献引用

广告
将在 10 秒后关闭
bannerAds