使用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 | $ sudo su - postgres |
使用上述命令,我们登录了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 | INSERT INTO t_map(name, level) VALUES('user_a', 'level_10'); |
0x06:从 t_map 检索数据
1 | SELECT * FROM t_map; |
关于PostgreSQL软件包的介绍
前面我们使用$ sudo apt install postgresql
和sudo 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: postgresql 和 Package: 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文件。