在中文中,也可以这样表达:建立一个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。