数据库:PostgreSQL:基础功能使用介绍

在这里插入图片描述
作为传统开源数据库的坚定支持者,PostgreSQL在数据库领域中一直有不错的名声,在TOP DB index指数中也基本上是在第五的位置。由于考虑到Oracle、MySQL和SQL Server常年居于前三,加之Microsoft Access借助Office的背景也一直有不错的背景,第五的位置的争夺其实才是相对有看头的,PostgreSQL在这种情况之下,在MongoDB和Firebase的追赶下还能保住第五已经是很不错。这篇文章来介绍一下PostgreSQL的基础功能和使用介绍。


TOP DB index

从2020年8月份的TOP DB index的表现可以看到,前四名虽然暂时稳不可破,但是持续不停的下跌已经是目前的趋势,如没有特殊的事件或者技术出现,这个趋势应该会持续下去。前5名都是传统的关系型数据库,所以在这个整体下降的趋势背景之下,第5的PostgreSQL的稳定上升更显得尤为可贵。至于Firebase能够继续上升取代PostgreSQL的位置还只能是继续观望,但是作为传统的关系型数据库,PostgreSQL已经成为重要的选择项之一,或者说是MySQL与PostgreSQL二选一。
在这里插入图片描述


概要介绍

项目内容
官网postgresql.org
LicensePostgreSQL License
开源/闭源开源
推出时间1996/07/08
目前最新稳定版本12.4
代码仓库https://git.postgresql.org/gitweb/?p=postgresql.git
编写语言C
支持平台FreeBSD、 Linux、 macOS,、OpenBSD以及Windows

安装配置

PostgreSQl有多种安装方式,本文使用最为简单的容器化方式。

步骤1: docker pull

拉取官方镜像,官方镜像分普通版和alpine版,这里为了镜像尺寸小一点,选取拉取PostgreSQL 13的alpine版。

执行命令:docker pull postgres:12.4-alpine

liumiaocn:~ liumiao$ docker pull postgres:12.4-alpine
12.4-alpine: Pulling from library/postgres
...省略
Digest: sha256:b05c3311616d0d798225524e351423efa01dd3e5e6b56b2cca96a64d8fd4e746
Status: Downloaded newer image for postgres:12.4-alpine
docker.io/library/postgres:12.4-alpine
liumiaocn:~ liumiao$ docker images |grep 12.4-alpine
postgres                                                             12.4-alpine                     3781fe35c6b8        2 weeks ago         157MB
liumiaocn:~ liumiao$

启动镜像

执行如下命令,即可将步骤1中拉取的PostgreSQL 12.4版本的数据库服务启动起来。

执行命令:docker run --name postgres -v ${HOME}/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=liuiaocn -d postgres:12.4-alpine

上述命令启动了如下的数据库服务:

项目说明
PostgreSQL的版本为12.4
容器名称postgres
数据库密码liumiaocn
数据卷挂载目录data
liumiaocn:postgres liumiao$ docker run --name postgres -v ${HOME}/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=liuiaocn -d postgres:12.4-alpine
a06874369dbfeff4b4a6f63d1410c566cdfc411f410126746d68a6b0b4e927c2
liumiaocn:postgres liumiao$ docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS               NAMES
a06874369dbf        postgres:12.4-alpine   "docker-entrypoint.s…"   2 seconds ago       Up 1 second         5432/tcp            postgres
liumiaocn:postgres liumiao$ 

进入容器

liumiaocn:postgres liumiao$ docker exec -it postgres sh
/ # hostname
a06874369dbf
/ # which psql
/usr/local/bin/psql
/ # 

版本确认

可以通过内置的环境变量确认

/ # env |grep VERSION
PG_VERSION=12.4
/ #

也可以通过内置的psql确认客户端版本

/ # psql --version
psql (PostgreSQL) 12.4
/ # 

或者通过show命令确认(连接之后才能使用,注意提示符)

postgres=# show server_version_num;
 server_version_num 
--------------------
 120004
(1 row)

postgres=#

或者使用SELECT语句

postgres=# SELECT current_setting('server_version_num');
 current_setting 
-----------------
 120004
(1 row)

postgres=# 

或者使用select version()语句

postgres=# select version();
                                        version                                        
---------------------------------------------------------------------------------------
 PostgreSQL 12.4 on x86_64-pc-linux-musl, compiled by gcc (Alpine 9.3.0) 9.3.0, 64-bit
(1 row)

postgres=# 

连接数据库

上述方式生成的数据库,缺省的数据库用户名为postgres,可以使用-U选项进行连接

/ # psql -U postgres
psql (12.4)
Type "help" for help.

postgres=#

查询当前用户信息可以使用如下select语句

postgres=# select * from current_user;
 current_user 
--------------
 postgres
(1 row)

postgres=#

也可以使用简化语句select user

postgres=# select user;
   user   
----------
 postgres
(1 row)

postgres=# 

查看版权信息

postgres=# \copyright
PostgreSQL Database Management System
(formerly known as Postgres, then as Postgres95)

Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group

Portions Copyright (c) 1994, The Regents of the University of California

Permission to use, copy, modify, and distribute this software and its
documentation for any purpose, without fee, and without a written agreement
is hereby granted, provided that the above copyright notice and this
paragraph and the following two paragraphs appear in all copies.

IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO
PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

postgres=# 

查看已创建的数据库

/ # psql -U postgres
psql (12.4)
Type "help" for help.

postgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
(3 rows)

postgres=#

创建数据库

使用create database test创建名为test的数据库

postgres=# create database test;
CREATE DATABASE
postgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 test      | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
(4 rows)

postgres=# 

连接数据库

使用\c 数据库名 命令去连接所指定的数据库,比如\c test,将会连接刚刚创建的test数据库,在连接之后的操作比如创建表,在没有指明数据库名的情况下均对于当前所连接的数据库起作用。

postgres=# \c test
You are now connected to database "test" as user "postgres".
test=# 

基本操作

版本确认

虽然psql --version也可以确认版本,就像MySQL或者Oracle一样,在连接实例之后才能进行的确认方式,和MySQL的使用方式基本都一致。

test=# select version();
                                        version                                        
---------------------------------------------------------------------------------------
 PostgreSQL 12.4 on x86_64-pc-linux-musl, compiled by gcc (Alpine 9.3.0) 9.3.0, 64-bit
(1 row)

test=# 

字符串处理

MySQL中可以使用select "hello world"命令,在PostgreSQL可以使用类似如下命令(注意需要是单引号)

test=# select 'hello' || ' world';
  ?column?   
-------------
 hello world
(1 row)

test=# 

简单计算

类似Oracle里面的select from dual, 和mysql一样里面可以直接select

test=# select 3*7;
 ?column? 
----------
       21
(1 row)

test=#

总结

总结

淼叔 CSDN认证博客专家 神经网络 TensorFlow NLP
资深架构师,PMP、OCP、CSM、HPE University讲师,EXIN DevOps Professional与DevOps Master认证讲师,曾担任HPE GD China DevOps & Agile Leader,帮助企业级客户提供DevOps咨询培训以及实施指导。熟悉通信和金融领域,有超过十年金融外汇行业的架构设计、开发、维护经验,在十几年的IT从业生涯中拥有了软件开发设计领域接近全生命周期的经验和知识积累,著有企业级DevOps技术与工具实战。
已标记关键词 清除标记
<p> <span style="font-size:16px;">PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES,现在已经更名为PostgreSQL. PostgreSQL支持大部分SQL标准并且提供了许多其它现代特性:复杂查询、外键、触发器、视图、事务完整性等。</span> </p> <p> <span style="font-size:16px;"> </span> </p> <p> <a href="https://baike.baidu.com/item/PostgreSQL/530240"><span>PostgreSQL</span></a><span style="font-size:16px;"> 是一个免费的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和专有系统(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一种选择。</span> </p> <p> <span style="font-size:16px;"> </span> </p> <p> <span style="font-size:16px;">事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持</span><a href="https://baike.baidu.com/item/%E4%BA%8B%E5%8A%A1"><span>事务</span></a><span style="font-size:16px;">、</span><a href="https://baike.baidu.com/item/%E5%AD%90%E6%9F%A5%E8%AF%A2"><span>子查询</span></a><span style="font-size:16px;">、多版本并行控制系统(</span><a href="https://baike.baidu.com/item/MVCC"><span>MVCC</span></a><span style="font-size:16px;">)、</span><a href="https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%95%B4%E6%80%A7"><span>数据完整性</span></a><span style="font-size:16px;">检查等特性的唯一的一种自由软件的</span><a href="https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F"><span>数据库管理系统</span></a><span style="font-size:16px;">。 Inprise 的 InterBase 以及</span><a href="https://baike.baidu.com/item/SAP"><span>SAP</span></a><span style="font-size:16px;">等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL 的质量日益提高。</span> </p> <p> <span style="font-size:16px;">从技术角度来讲,PostgreSQL 采用的是比较经典的</span><a href="https://baike.baidu.com/item/C%2FS"><span>C/S</span></a><span style="font-size:16px;">(client/server)结构,也就是一个客户端对应一个服务器端</span><a href="https://baike.baidu.com/item/%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B"><span>守护进程</span></a><span style="font-size:16px;">的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编写,由</span><a href="https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E6%9C%8D%E5%8A%A1%E5%99%A8"><span>数据库服务器</span></a><span style="font-size:16px;">提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如</span><a href="https://baike.baidu.com/item/ODBC"><span>ODBC</span></a><span style="font-size:16px;">,</span><a href="https://baike.baidu.com/item/JDBC"><span>JDBC</span></a><span style="font-size:16px;">,</span><a href="https://baike.baidu.com/item/Python"><span>Python</span></a><span style="font-size:16px;">,</span><a href="https://baike.baidu.com/item/Perl"><span>Perl</span></a><span style="font-size:16px;">,</span><a href="https://baike.baidu.com/item/Tcl"><span>Tcl</span></a><span style="font-size:16px;">,</span><a href="https://baike.baidu.com/item/C%2FC%2B%2B"><span>C/C++</span></a><span style="font-size:16px;">,</span><a href="https://baike.baidu.com/item/ESQL"><span>ESQL</span></a><span style="font-size:16px;">等, 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。</span> </p> <p> <span style="font-size:16px;"> </span> </p> <p> <span style="font-size:16px;">本课程作为PostgreSQL数据库管理二,主要讲解以下内容:</span> </p> <p> <span style="font-size:16px;"><br /></span> </p> <p> <span style="font-size:16px;">1.<span>     </span>PostgreSQL中的子查询</span> </p> <p> <span style="font-size:16px;">2.<span>     </span>PostgreSQL公共表表达式</span> </p> <p> <span style="font-size:16px;">3.<span>     </span>PostgreSQL数据的修改</span> </p> <p> <span style="font-size:16px;">4.<span>     </span>PostgreSQL中的事务</span> </p> <p> <span style="font-size:16px;">5.<span>     </span>PostgreSQL数据导入和导出</span> </p> <p> <span style="font-size:16px;">6.<span>     </span>PostgreSQL数据库的管理</span> </p> <p> <span style="font-size:16px;"><span>7.     PostgreSQL表的管理</span></span> </p> <p> <span style="font-size:16px;"><br /></span> </p> <p> <span style="font-size:16px;"><img src="https://img-bss.csdn.net/201906140526408064.png" alt="" /><br /></span> </p> <p> <br /></p>
相关推荐
<p> PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES,现在已经更名为PostgreSQL. PostgreSQL支持大部分SQL标准并且提供了许多其它现代特性:复杂查询、外键、触发器、视图、事务完整性等。 </p> <p>   </p> <p> <a href="https://baike.baidu.com/item/PostgreSQL/530240">PostgreSQL</a> 是一个免费的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和专有系统(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一种选择。 </p> <p>   </p> <p> 事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持<a href="https://baike.baidu.com/item/%E4%BA%8B%E5%8A%A1">事务</a>、<a href="https://baike.baidu.com/item/%E5%AD%90%E6%9F%A5%E8%AF%A2">子查询</a>、多版本并行控制系统(<a href="https://baike.baidu.com/item/MVCC">MVCC</a>)、<a href="https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%AE%8C%E6%95%B4%E6%80%A7">数据完整性</a>检查等特性的唯一的一种自由软件的<a href="https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F">数据库管理系统</a>。 Inprise 的 InterBase 以及<a href="https://baike.baidu.com/item/SAP">SAP</a>等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL 的质量日益提高。 </p> <p> 从技术角度来讲,PostgreSQL 采用的是比较经典的<a href="https://baike.baidu.com/item/C%2FS">C/S</a>(client/server)结构,也就是一个客户端对应一个服务器端<a href="https://baike.baidu.com/item/%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B">守护进程</a>的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编写,由<a href="https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E6%9C%8D%E5%8A%A1%E5%99%A8">数据库服务器</a>提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如<a href="https://baike.baidu.com/item/ODBC">ODBC</a>,<a href="https://baike.baidu.com/item/JDBC">JDBC</a>,<a href="https://baike.baidu.com/item/Python">Python</a>,<a href="https://baike.baidu.com/item/Perl">Perl</a>,<a href="https://baike.baidu.com/item/Tcl">Tcl</a>,<a href="https://baike.baidu.com/item/C%2FC%2B%2B">C/C++</a>,<a href="https://baike.baidu.com/item/ESQL">ESQL</a>等, 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。 </p> <p>   </p> <p> <strong>本课程作为PostgreSQL数据库管理一,主要讲解以下内容:</strong> </p> <p> <strong><br /></strong> </p> <p> 1.<span style="font-size:9px;">     </span>PostgreSQL安装和环境准备 </p> <p> 2.<span style="font-size:9px;">     </span>PostgreSQL数据查询 </p> <p> 3.<span style="font-size:9px;">     </span>PostgreSQL 数据过滤 </p> <p> 4.<span style="font-size:9px;">     </span>PostgreSQL 多表的联接 </p> <p> 5.<span style="font-size:9px;">     </span>PostgreSQL数据的分组 </p> <p> 6.<span style="font-size:9px;">     </span>PostgreSQL合集的操作 </p> <p> 7.   PostgreSQL 合集的分组 </p> <p> <br /></p> <p> <img src="https://img-bss.csdn.net/201906140515361517.png" alt="" /></p> <p> <img src="https://img-bss.csdn.net/201906140514591642.png" alt="" /></p>
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页