0%
PostgreSQL分析#002#apt安装指南

使用apt安装PostgreSQL是Ubuntu上最为简便的方式,但安装的版本却不一定是最新版本。比如当前PostgreSQL最新版本为16.1,而Ubuntu的仓库中为14.2。如果对版本没有严格的要求,我们最好使用apt来帮忙安装,如果确实需要最新版本,请参考后续博文,教大家如何使用最新版本源代码编译安装。

安装PostgreSQL

安装服务端使用下面的命令:

1
$ sudo apt install postgresql

安装客户端使用下面的命令:

1
$ sudo apt install postgresql-client

安装成功之后,系统会帮我们自动启动PostgreSQL的服务端程序,如下图所示:

验证PostgreSQL

成功安装PostgreSQL之后,系统帮我们自动创建:

  • 一个名为postgres的数据库
  • 一个名为postgres的数据库用户
  • 一个名为postgres的Linux系统用户

我们可以由当前Linux用户切换为postgres之后,在本机通过unix socket直接登录数据库,登录方法和展示如下:

1
2
3
$ sudo su - postgres
$
$ psql

使用上述命令,我们登录了PostgreSQL服务端,然后使用 \c 命令,系统提示我们,当前使用postgres账号连接了postgres数据库(上图红色框的提示内容)。

使用PostgreSQL

下面我们通过一个示例,简单介绍使用PostgreSQL的方法。

示例:

  • 0x00:新建一个数据库用户 user_mancode
  • 0x01:新建一个数据库 db_mancode
  • 0x02:基于 db_mancode 对 user_mancode 授权
  • 0x03:通过网络使用 user_mancode 登录PostgreSQL服务端
  • 0x04:新建一个数据表 t_map
  • 0x05:插入数据到 t_map
  • 0x06:从 t_map 检索数据

0x00:新建一个数据库用户 user_mancode

1
CREATE USER user_mancode WITH PASSWORD '123456';

0x01:新建一个数据库 db_mancode

1
CREATE DATABASE db_mancode OWNER user_mancode;

0x02:基于 db_mancode 对 user_mancode 授权

1
GRANT ALL PRIVILEGES ON DATABASE db_mancode TO user_mancode;

0x03:通过网络使用 user_mancode 登录PostgreSQL服务端

1
$ psql -U user_mancode -d db_mancode -h 127.0.0.1 -p 5432

登录PostgreSQL服务时,会要求我们输入密码,这个密码就是创建user_mancode时设置的密码:123456。

0x04:新建一个数据表 t_map

1
CREATE TABLE t_map (name VARCHAR(20), level VARCHAR(20));

0x05:插入数据到 t_map

1
2
3
INSERT INTO t_map(name, level) VALUES('user_a', 'level_10');
INSERT INTO t_map(name, level) VALUES('user_b', 'level_12');
INSERT INTO t_map(name, level) VALUES('user_c', 'level_17');

0x06:从 t_map 检索数据

1
SELECT * FROM t_map;

关于PostgreSQL软件包的介绍

前面我们使用$ sudo apt install postgresqlsudo apt install postgresql-client,分别安装了PostgreSQL的服务端和客户端。
下面我们再看下apt系统安装的背后,帮我们自动安装了哪些依赖的软件包?

1
$ dpkg --list | grep postgresql

结果如下所示:

mancode@manos:~$ dpkg --list | grep postgresql
ii  postgresql                14+238         all     object-relational SQL database (supported version)
ii  postgresql-14             14.2-1ubuntu1  amd64   The World's Most Advanced Open Source Relational Database
ii  postgresql-client         14+238         all     front-end programs for PostgreSQL (supported version)
ii  postgresql-client-14      14.2-1ubuntu1  amd64   front-end programs for PostgreSQL 14
ii  postgresql-client-common  238            all     manager for multiple PostgreSQL client versions
ii  postgresql-common         238            all     PostgreSQL database-cluster manager
mancode@manos:~$

两条安装命令,一共安装了六个软件包,通过分析,它们之间的依赖关系如下图所示:

我们简单看下,每个软件包的作用如何。

首先,我们看下 Package: postgresqlPackage: postgresql-client

通过它们的包结构,我们知道其实这两个软件包中并没有什么实质内容,它们是个名义包,实际的安装内容是根据它们两个的依赖来实现的。

接着,通过上述依赖分析,我们重点看下 Package: postgresql-14

mancode@manos:/var/lib/dpkg/info$ cat postgresql-14.list 
/usr/lib/postgresql/14/bin
/usr/lib/postgresql/14/bin/initdb
/usr/lib/postgresql/14/bin/oid2name
/usr/lib/postgresql/14/bin/pg_archivecleanup
/usr/lib/postgresql/14/bin/pg_checksums
/usr/lib/postgresql/14/bin/pg_controldata
/usr/lib/postgresql/14/bin/pg_ctl
/usr/lib/postgresql/14/bin/pg_resetwal
/usr/lib/postgresql/14/bin/pg_rewind
/usr/lib/postgresql/14/bin/pg_test_fsync
/usr/lib/postgresql/14/bin/pg_test_timing
/usr/lib/postgresql/14/bin/pg_upgrade
/usr/lib/postgresql/14/bin/pg_waldump
/usr/lib/postgresql/14/bin/pgbench
/usr/lib/postgresql/14/bin/postgres
/usr/lib/postgresql/14/bin/vacuumlo
/usr/lib/postgresql/14/lib
/usr/lib/postgresql/14/lib/_int.so
/usr/lib/postgresql/14/lib/adminpack.so
/usr/lib/postgresql/14/lib/amcheck.so
/usr/lib/postgresql/14/lib/auth_delay.so
/usr/lib/postgresql/14/lib/auto_explain.so
/usr/lib/postgresql/14/lib/autoinc.so
/usr/share/postgresql/14/pg_hba.conf.sample
/usr/share/postgresql/14/pg_ident.conf.sample
/usr/share/postgresql/14/pg_service.conf.sample
/usr/share/postgresql/14/postgres.bki
/usr/share/postgresql/14/postgresql.conf.sample
mancode@manos:/var/lib/dpkg/info$

我们节选了部分安装内容,可见该包才是真实的服务端程序包,主要包含了服务端所需要的可执行程序和动态库,以及配置文件模板。

然后,通过上述依赖分析,我们重点看下 Package: postgresql-client-14

mancode@manos:/var/lib/dpkg/info$ cat postgresql-client-14.list 
/usr/lib/postgresql/14/bin/clusterdb
/usr/lib/postgresql/14/bin/createdb
/usr/lib/postgresql/14/bin/createuser
/usr/lib/postgresql/14/bin/dropdb
/usr/lib/postgresql/14/bin/dropuser
/usr/lib/postgresql/14/bin/pg_amcheck
/usr/lib/postgresql/14/bin/pg_basebackup
/usr/lib/postgresql/14/bin/pg_config
/usr/lib/postgresql/14/bin/pg_dump
/usr/lib/postgresql/14/bin/pg_dumpall
/usr/lib/postgresql/14/bin/pg_isready
/usr/lib/postgresql/14/bin/pg_receivewal
/usr/lib/postgresql/14/bin/pg_recvlogical
/usr/lib/postgresql/14/bin/pg_restore
/usr/lib/postgresql/14/bin/pg_verifybackup
/usr/lib/postgresql/14/bin/psql
/usr/lib/postgresql/14/bin/reindexdb
/usr/lib/postgresql/14/bin/vacuumdb
mancode@manos:/var/lib/dpkg/info$

我们节选了部分安装内容,可见该包才是真实的客户端程序包,主要包含了客户端所需要的可执行程序和动态库。

最后,我们看下 Package: postgres-common

mancode@manos:/var/lib/dpkg/info$ cat postgresql-common.list 
/lib/systemd
/lib/systemd/system
/lib/systemd/system/pg_basebackup@.service
/lib/systemd/system/pg_basebackup@.timer
/lib/systemd/system/pg_compresswal@.service
/lib/systemd/system/pg_compresswal@.timer
/lib/systemd/system/pg_dump@.service
/lib/systemd/system/pg_dump@.timer
/lib/systemd/system/pg_receivewal@.service
/lib/systemd/system/postgresql.service
/lib/systemd/system/postgresql@.service
/lib/systemd/system-generators
/lib/systemd/system-generators/postgresql-generator

我们节选了部分安装内容,可见该包包含了由Systemd负责管理PostgreSQL启停的Unit文件。