2022-05-21 21:26:31
浏览数 (1)
一.准备
代码语言:javascript
复制
### 一.准备
<!--前提条件-->
要求OS上已经安装下述软件。如果没有,可以直接通过yum来安装。
##### 1 gmake或者make要求至少3.80版本以上
~~~bash
[root@Centos ~]# make -v
[root@Centos ~]# gmake -v
[root@Centos ~]# which make
/usr/bin/make
[root@Centos ~]# which gmake
/usr/bin/gmake
~~~
##### 2 C编译器
如果没有的话,可以直接安装一个最新的gcc即可
~~~bash
[root@Centos ~]# which gcc
/usr/bin/gcc
[root@Centos ~]# gcc -v
<!--查看包-->
[root@Centos ~]# rpm -qa|grep gcc*
<!--安装包-->
yum install gcc*
~~~
##### 3 tar软件包
~~~bash
[root@Centos ~]# which tar
/usr/bin/tar
[root@Centos ~]# tar --version
tar软件工具用于解压缩源码格式的安装压缩包文件。
tar -zxvf postgresql-13.2.tar.gz
~~~
##### 4 GNU readline library
该库文件默认启用。用于在psql命令行工具下,可以通过键盘的上下箭头调出历史命令以及编辑之前的命令。如果不需要此功能的话,可以在configure的时候,带上`--without-readline选项。`
~~~bash
[root@Centos ~]# rpm -qa|grep readline
[root@Centos ~]# yum install readline*
~~~
##### 5 zlib compression library
该库文件默认启用。如果不需要此功能的话,可以在configure的时候,带上–without-zlib`选项。`当然如果带上该选项则意味着,使用pg_dump/pg_restore对数据库进行备份/恢复的时候,不支持对归档的压缩。
~~~bash
[root@Centos ~]# rpm -qa|grep zlib*
~~~
二.源码安装
代码语言:javascript
复制### 二.源码安装
小技巧:(ctrl l 清屏)
假定将来要把数据库软件安装在/data/postgres/13.2/路径下,数据库的数据存放在/data/postgres/13.2/data路径下
#### 1.创建postgres用户
~~~bash
[root@Centos ~]# id postgres
id: postgres: no such user
[root@Centos ~]# groupadd postgres
[root@Centos ~]# useradd -g postgres postgres
[root@Centos ~]# 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.
~~~
#### 2.创建数据库软件安装目录
~~~bash
[root@Centos ~]# mkdir -p /data/postgres/13.2/
[root@Centos data]# chown -R postgres:postgres /data/
[root@Centos data]# su - postgres
~~~
#### 3.获取源码
到PostgreSQL[官方网站](https://www.postgresql.org/ftp/source/),获取源码格式的数据库安装文件。
~~~bash
[root@Centos ~]# su - postgres
[postgres@Centos ~]$ wget https://ftp.postgresql.org/pub/source/v13.2/postgresql-13.2.tar.gz
报错,加参数
[postgres@Centos ~]$ wget https://ftp.postgresql.org/pub/source/v13.2/postgresql-13.2.tar.gz --no-check-certificat
下载慢,ftp上传,root上传包,授权
[root@Centos ~]# chown -R postgres /home/postgres/postgresql-13.2.tar.gz
~~~
#### 4.解压源码
~~~bash
[postgres@Centos ~]$ tar -zxvf postgresql-13.2.tar.gz
[postgres@Centos ~]$ ll
total 26908
drwxrwxr-x. 6 postgres postgres 4096 Feb 9 2021 postgresql-13.2
-rw-r--r--. 1 postgres root 27548921 Dec 29 20:15 postgresql-13.2.tar.gz
[postgres@Centos ~]$ cd postgresql-13.2
[postgres@Centos postgresql-13.2]$ ll
total 744
-rw-r--r--. 1 postgres postgres 490 Feb 9 2021 aclocal.m4
drwxrwxr-x. 2 postgres postgres 4096 Feb 9 2021 config
-rwxr-xr-x. 1 postgres postgres 568656 Feb 9 2021 configure
-rw-r--r--. 1 postgres postgres 82388 Feb 9 2021 configure.in
drwxrwxr-x. 57 postgres postgres 4096 Feb 9 2021 contrib
-rw-r--r--. 1 postgres postgres 1192 Feb 9 2021 COPYRIGHT
drwxrwxr-x. 3 postgres postgres 87 Feb 9 2021 doc
-rw-r--r--. 1 postgres postgres 4278 Feb 9 2021 GNUmakefile.in
-rw-r--r--. 1 postgres postgres 277 Feb 9 2021 HISTORY
-rw-r--r--. 1 postgres postgres 63684 Feb 9 2021 INSTALL
-rw-r--r--. 1 postgres postgres 1665 Feb 9 2021 Makefile
-rw-r--r--. 1 postgres postgres 1213 Feb 9 2021 README
drwxrwxr-x. 16 postgres postgres 4096 Feb 9 2021 src
~~~
#### 5.执行configure
执行configure的命令行选项,–prefix参数,表示把PostgreSQL安装在哪个路径下?这里,我们就把它安装在前面第2步骤中配置的/data/postgres/13.2/路径下。默认情况下,不带该参数时,则会安装在/usr/local/pgsql路径下。
~~~bash
编译
[postgres@Centos postgresql-13.2]$ ./configure --prefix=/data/postgres/13.2/
~~~
#### 6.执行make world
这里,也可以简单执行make就可以build安装文件的,但是,make world的意思是指把PostgreSQL相关的文档,HTML,以及其它的一些模块都会一起编译进去。比如,在有的环境下遇到无法使用uuid或者使用不了gin index的原因,就是在编译的时候,没有包含这些对应的模块。处理这种的问题的方法也不复杂,只需要进到当时安装时的那个源文件路径下,重新执行make world,然后make install-world。
建议,在初始安装的时候,就直接用make world或等价的gmake world命令。
~~~bash
[postgres@Centos postgresql-13.2]$ gmake world && gmake install-world
~~~
#### 7.执行make install-world
#### 8.初始化数据库
~~~bash
初始化数据库
[postgres@Centos postgresql-13.2]$ /data/postgres/13.2/bin/initdb -d /data/postgres/13.2/data
中间过程省略。。。。。。。
initdb: warning: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
/data/postgres/13.2/bin/pg_ctl -D /data/postgres/13.2/data -l logfile start
~~~
~~~bash
初始化完多了data. 查看data大小(可以不做)
[root@Centos ~]# ll /data/postgres/13.2/
total 20
drwxrwxr-x. 2 postgres postgres 4096 Dec 29 20:37 bin
drwx------. 19 postgres postgres 4096 Dec 29 20:41 data
drwxrwxr-x. 6 postgres postgres 4096 Dec 29 20:37 include
drwxrwxr-x. 4 postgres postgres 4096 Dec 29 20:37 lib
drwxrwxr-x. 8 postgres postgres 4096 Dec 29 20:37 share
[root@Centos ~]# du -sh /data/postgres/13.2/data/
40M /data/postgres/13.2/data/
~~~
#### 9.启动数据库
~~~bash
启动数据库
[postgres@Centos postgresql-13.2]$ /data/postgres/13.2/bin/pg_ctl -D /data/postgres/13.2/data -l logfile start
[postgres@Centos postgresql-13.2]$ ps -ef|grep postgres
root 9074 8684 0 19:58 pts/1 00:00:00 su - postgres
postgres 9075 9074 0 19:58 pts/1 00:00:00 -bash
root 9464 9407 0 20:26 pts/1 00:00:00 su - postgres
postgres 9465 9464 0 20:26 pts/1 00:00:00 -bash
postgres 20555 1 0 20:54 ? 00:00:00 /data/postgres/13.2/bin/postgres -D /data/postgres/13.2/data
postgres 20557 20555 0 20:54 ? 00:00:00 postgres: checkpointer
postgres 20558 20555 0 20:54 ? 00:00:00 postgres: background writer
postgres 20559 20555 0 20:54 ? 00:00:00 postgres: walwriter
postgres 20560 20555 0 20:54 ? 00:00:00 postgres: autovacuum launcher
postgres 20561 20555 0 20:54 ? 00:00:00 postgres: stats collector
postgres 20562 20555 0 20:54 ? 00:00:00 postgres: logical replication launcher
postgres 20597 9465 0 20:57 pts/1 00:00:00 ps -ef
postgres 20598 9465 0 20:57 pts/1 00:00:00 grep --color=auto postgres
需配置环境变量,否则使用绝对路径
[postgres@Centos postgresql-13.2]$ psql
bash: psql: command not found...
[postgres@Centos postgresql-13.2]$ /data/postgres/13.2/bin/psql
psql (13.2)
Type "help" for help.
postgres=# show listen_addresses;
listen_addresses
------------------
localhost
(1 row)
postgres=# q
[postgres@Centos postgresql-13.2]$
~~~
#### 10.修改环境变量
~~~bash
[postgres@Centos ~]$ vi .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
#PATH=$PATH:$HOME/.local/bin:$HOME/bin
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$PATH:/data/postgres/13.2/bin ---添加路径
PGDATA=/data/postgres/13.2/data --添加
export PATH PGDATA
保存退出
[postgres@Centos ~]$ psql
bash: psql: command not found...
[postgres@Centos ~]$ source .bash_profile
[postgres@Centos ~]$ psql
psql (13.2)
Type "help" for help.
postgres=#
~~~
三.补充
代码语言:javascript
复制
#### 1.修改数据库参数
##### a.修改pg_hba.conf 文件
在/data/postgres/13.2/data/pg_hba.conf 文件,添加下面的一行
~~~bash
#IPV4 local connections:
host all 0.0.0.0/0 md5
~~~
对于使用IPV4的客户端,数据库服务器不做限制,可以用过任意用户访问所有数据库
##### b.修改postgresql.conf 文件
在/data/postgres/13.2/data/postgresql.conf 文件, 修改
~~~
# listen_addresses='localhost' 为 listen_addresses='*'
~~~
修改完需要重启
~~~bash
[postgres@Centos data]$ pg_ctl restart -m fast
~~~
#### 2.如何删除PostgreSQL数据库软件
postgres用户进入到前面解压的源码所在的路径/home/postgres/postgresql-13.2 ,通过执行 make uninstall 来卸载已经安装的数据库软件
~~~bash
[postgres@Centos data]$ cd /home/postgres/postgresql-13.2
[postgres@Centos postgresql-13.2]$ gmake uninstall
~~~
手工创建的路径不会删除
#### 3.如何重新编译安装PostgreSQL数据库软件
##### a.方式1 重新解压源码、编译、安装
第4步开始重新走一遍流程,即重新解压源码,用新解压出来的源码文件,再依次进行 configure ,make world , make install-world
##### b.清除之前的编译状态
就是把之前第5步执行configure之后的文件状态,恢复到configure之前的状态,然后再通过执行configure,make world, make install-world . 这个命令是 make distclean
~~~bash
[postgres@Centos data]$ cd /home/postgres/postgresql-13.2
[postgres@Centos postgresql-13.2]$ gmake distclean
~~~
四.启停PostgreSQL数据库
代码语言:javascript
复制### 四.启停PostgreSQL数据库
#### 1.查看数据库是否正常运行
~~~bash
[postgres@Centos ~]$ ps -ef|grep postgres
root 9074 8684 0 19:58 pts/1 00:00:00 su - postgres
postgres 9075 9074 0 19:58 pts/1 00:00:00 -bash
root 9464 9407 0 20:26 pts/1 00:00:00 su - postgres
postgres 9465 9464 0 20:26 pts/1 00:00:00 -bash
root 20884 20843 0 21:20 pts/1 00:00:00 su - postgres
postgres 20885 20884 0 21:20 pts/1 00:00:00 -bash
postgres 21313 1 0 21:57 ? 00:00:00 /data/postgres/13.2/bin/postgres -D /data/postgres/13.2/data
postgres 21315 21313 0 21:57 ? 00:00:00 postgres: checkpointer
postgres 21316 21313 0 21:57 ? 00:00:00 postgres: background writer
postgres 21317 21313 0 21:57 ? 00:00:00 postgres: walwriter
postgres 21318 21313 0 21:57 ? 00:00:00 postgres: autovacuum launcher
postgres 21319 21313 0 21:57 ? 00:00:00 postgres: stats collector
postgres 21320 21313 0 21:57 ? 00:00:00 postgres: logical replication launcher
postgres 21640 20885 0 22:29 pts/1 00:00:00 ps -ef
postgres 21641 20885 0 22:29 pts/1 00:00:00 grep --color=auto postgres
[postgres@Centos ~]$ pstree -p 21313
postgres(21313)─┬─postgres(21315)
├─postgres(21316)
├─postgres(21317)
├─postgres(21318)
├─postgres(21319)
└─postgres(21320)
~~~
#### 2.手工启动PostgreSQL数据库
~~~bash
[postgres@Centos ~]$ pg_ctl start -D /data/postgres/13.2/data -l /home/postgres/startup.log
~~~
#### 3.手工停止PostgreSQL数据库
~~~bash
[postgres@Centos ~]$ pg_ctl stop -m fast
~~~
-m fast 类似于oracle 中的 shutdown immediate
### 五.pg_ctl中的更多使用选项
~~~bash
[postgres@Centos ~]$ pg_ctl --help
~~~
[postgres@Centos ~]$ pg_ctl status
[postgres@Centos ~]$ pg_ctl reload
六 psql工具使用及数据库常用维护管理
代码语言:javascript
复制### 六 psql工具使用及数据库常用维护管理
#### 一 psql工具的使用
##### 1 用psql连接数据库
~~~bash
[postgres@Centos ~]$ psql -h localhost -p 5432 -d postgres -U postgres
psql (13.2)
Type "help" for help.
postgres=#
~~~
其中,
- psql是PostgreSQL软件安装家目录下的bin路径下的可执行程序;
- -h选项表示host,要连接数据库服务器名或者IP地址;如果要访问的数据库在远端,不在本地服务器上,则这里应该用那台机器的IP地址;如果是云服务器的话,则用云服务商提供的域名字符串即可;
- -p选项表示port,数据库运行在哪个端口上,默认是5432,这个可以在postgres.conf配置文件里修改,但是需要restart数据库才生效;
- -d选项表示database,我们要连接访问的数据库名;
- -U选项表示username,我们以哪个用户来访问数据库。
因此,上述命令表示的是以postgres用户连接监听运行在本地机器上的5432的名为postgres的数据库。命令行上,并没有要求输入数据库密码,为什么?因为我们的pg_hba.conf文件里配置了
~~~sql
postgres=# create table pg_test(id int,name varchar(10));
CREATE TABLE
postgres=# insert into pg_test values(1,'huangwei');
INSERT 0 1
postgres=#
~~~
#### 二 数据库常用维护管理命令
##### 1 查看数据库版本号:
~~~bash
postgres=# select version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 13.2 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
(1 row)
~~~
##### 2 查看所有数据库信息:
~~~
postgres=# l
~~~
##### 3 查看数据库启动时间信息:
~~~bash
postgres=# select pg_postmaster_start_time();
pg_postmaster_start_time
-------------------------------
2021-12-30 10:41:26.094734 08
(1 row)
~~~
##### 4 查看用户信息:
~~~bash
postgres=# du
List of roles
Role name | Attributes | Member of
----------- ------------------------------------------------------------ -----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
postgres=#
~~~
##### 5 显示所有的表:
~~~bash
postgres=# c postgres
You are now connected to database "postgres" as user "postgres".
postgres=# d
List of relations
Schema | Name | Type | Owner
-------- --------- ------- ----------
public | pg_test | table | postgres
(1 row)
postgres=#
~~~
##### 6 查看表大小:
~~~bash
postgres=# dt pg_test;
List of relations
Schema | Name | Type | Owner | Persistence | Size | Description
-------- --------- ------- ---------- ------------- ------------ -------------
public | pg_test | table | postgres | permanent | 8192 bytes |
(1 row)
postgres=#
~~~
##### 7 查看表结构:
~~~bash
postgres=# d pg_test;
Table "public.pg_test"
Column | Type | Collation | Nullable | Default
-------- ----------------------- ----------- ---------- ---------
id | integer | | |
name | character varying(10) | | |
~~~
##### 8 查看索引大小:
~~~bash
postgres=# create index idx_id_pg_test on pg_test(id);
CREATE INDEX
postgres=# di
List of relations
Schema | Name | Type | Owner | Table
-------- ---------------- ------- ---------- ---------
public | idx_id_pg_test | index | postgres | pg_test
(1 row)
postgres=# di idx_id_pg_test
List of relations
Schema | Name | Type | Owner | Table | Persistence | Size | Description
-------- ---------------- ------- ---------- --------- ------------- ------- -------------
public | idx_id_pg_test | index | postgres | pg_test | permanent | 16 kB |
(1 row)
postgres=#
~~~
##### 9 创建新用户:
~~~bash
postgres=# create user t_user login password 't_user';
CREATE ROLE
postgres=#
~~~
创建1个新用户t_user,具有login访问数据库的权限,密码跟用户名相同。执行该命令的用户,必须得有create user的权限。
##### 10 创建和使用数据库:
~~~bash
postgres=# create database testdb owner t_user;
CREATE DATABASE
postgres=# c testdb t_user
You are now connected to database "testdb" as user "t_user".
testdb=> create table test_table(id int);
CREATE TABLE
testdb=>
~~~
创建名为testdb的数据库,其owner是上面创建的用户t_user。然后,以t_user来访问testdb数据库,并且创建了一张表。执行该命令的用户,必须得有create database的权限。
##### 11 查看视图、函数、表空间
分别是dv,df,db
~~~bash
testdb=> db
List of tablespaces
Name | Owner | Location
------------ ---------- ----------
pg_default | postgres |
pg_global | postgres |
(2 rows)
testdb=> df
List of functions
Schema | Name | Result data type | Argument data types | Type
-------- ------ ------------------ --------------------- ------
(0 rows)
testdb=>
~~~