PostgreSQL 教程
本教程为个人定制使用,详细教程请进入PostgreSQL 教程 | 菜鸟教程
PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。
PostgreSQL 开发者把它念作 post-gress-Q-L。
PostgreSQL 的 Slogan 是"世界上最先进的开源关系型数据库"。
参考内容:PostgreSQL 10.1 手册
什么是数据库?
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
ORDBMS(对象关系数据库系统)是面向对象技术与传统的关系数据库相结合的产物,查询处理是 ORDBMS 的重要组成部分,它的性能优劣将直接影响到DBMS 的性能。
ORDBMS在原来关系数据库的基础上,增加了一些新的特性。
RDBMS 是关系数据库管理系统,是建立实体之间的联系,最后得到的是关系表。
OODBMS 面向对象数据库管理系统,将所有实体都看成对象,并将这些对象类进行封装,对象之间的通信通过消息 OODBMS 对象关系数据库在实质上还是关系数据库 。
ORDBMS 术语
在我们开始学习 PostgreSQL 数据库前,让我们先了解下 ORDBMS 的一些术语:
- 数据库: 数据库是一些关联表的集合。
- 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
- 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
- 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
- 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
- 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
- 外键:外键用于关联两个表。
- 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
- 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
- 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
PostgreSQL 特征
-
函数:通过函数,可以在数据库服务器端执行指令程序。
-
索引:用户可以自定义索引方法,或使用内置的 B 树,哈希表与 GiST 索引。
-
触发器:触发器是由SQL语句查询所触发的事件。如:一个INSERT语句可能触发一个检查数据完整性的触发器。触发器通常由INSERT或UPDATE语句触发。 多版本并发控制:PostgreSQL使用多版本并发控制(MVCC,Multiversion concurrency control)系统进行并发控制,该系统向每个用户提供了一个数据库的"快照",用户在事务内所作的每个修改,对于其他的用户都不可见,直到该事务成功提交。
-
规则:规则(RULE)允许一个查询能被重写,通常用来实现对视图(VIEW)的操作,如插入(INSERT)、更新(UPDATE)、删除(DELETE)。
-
数据类型:包括文本、任意精度的数值数组、JSON 数据、枚举类型、XML 数据等。
-
全文检索:通过 Tsearch2 或 OpenFTS,8.3版本中内嵌 Tsearch2。
-
NoSQL:JSON,JSONB,XML,HStore 原生支持,至 NoSQL 数据库的外部数据包装器。
-
数据仓库:能平滑迁移至同属 PostgreSQL 生态的 GreenPlum,DeepGreen,HAWK 等,使用 FDW 进行 ETL。
一、Linux上安装PostgreSQL
打开 PostgreSQL官网,点击菜单栏上的 Download ,可以看到这里包含了很多平台的安装包,包括 Linux、Windows、Mac OS等 。
Linux 我们可以看到支持 Ubuntu 和 Red Hat 等各个平台,点击具体的平台链接,即可查看安装方法:
1、Ubuntu 安装 PostgreSQL
Ubuntu 可以使用 apt-get 安装 PostgreSQL:
sudo apt-get update
sudo apt-get install postgresql postgresql-client
安装完毕后,系统会创建一个数据库超级用户 postgres,密码为空。
# sudo -i -u postgres
这时使用以下命令进入 postgres,输出以下信息,说明安装成功:
~$ psql
psql (9.5.17)
Type "help" for help.
postgres=#
输入以下命令退出 PostgreSQL 提示符:
\q
PostgreSQL 安装完成后默认是已经启动的,但是也可以通过下面的方式来手动启动服务。
sudo /etc/init.d/postgresql start # 开启
sudo /etc/init.d/postgresql stop # 关闭
sudo /etc/init.d/postgresql restart # 重启
2、申威龙芯麒麟服务器部署 PostgreSQL
终端中 @ 前后的含义,本指南用hostname代指主机名
@ 前面的为当前用户的用户名
@ 后面的为计算机的主机名
本指南用dbname代指数据库名称
本指南中数据库目录所在位置/var/lib/pgsql/data为环境变量所配置,并非不可改变,根据实际情况选择在不同的的位置新建data文件夹
2.1、删除数据库并重新搭建有以下两种方式
2.1.1、删除并新建数据库目录所在文件夹
[root@hostname ~]# su - postgres
[postgres@hostname ~]$ cd /var/lib/pgsql
[postgres@hostname pgsql]$ rm -rf /var/lib/pgsql/data #删除数据库目录所在文件夹
[postgres@hostname pgsql]$ initdb -D /var/lib/pgsql/data #新建数据库目录所在文件夹
或者执行./1_postgres_db_install.sh
2.1.2、删除并新建dbname数据库
[root@casic ~]# su - postgres
[postgres@hostname ~]$ pgsql -h localhost -d postgres
postgres=# drop database dbname; #删除名为dbname的数据库
postgres=# exit;
[postgres@hostname ~]$ cd /home/postgres/initData #该地址为研发提供的initData文件夹所在
[postgres@hostname initData]$ ./2_postgres_db_init.sh;
[postgres@hostname initData]$ pgsql -h localhost -d dbname < /home/postgres/initData/updata/updata_all.sql;
若在执行/home/postgres/目录下文件报错提示权限不足时,执行如下命令授权用户权限:
[root@hostname ~]# chown -R postgres::postgres /home/postgres
2.2、配置并启动数据库
新建完成后,当出现如下提示:“成功。您现在可以用下面的命令开启数据库服务器:”的信息时,执行如下命令启动数据库:
成功。您现在可以用下面的命令开启数据库服务器:
pg_ctl -D /var/lib/pgsql/data -l 日志文件 start
[postgres@hostname ~]$ cd /var/lib/pgsql/data
[postgres@hostname ~]$ vim pg_hba.conf
[postgres@hostname ~]$ vim postgresql.conf
[postgres@hostname ~]$ pg_ctl -D /var/lib/pgsql/data -l 日志文件 start
二、Mac OS 上安装 PostgreSQL
使用EnterpriseDB来下载安装,EnterpriseDB 是全球唯一一家提供基于 PostgreSQL 企业级产品与服务的厂商。
下载 postgresql–osx.dmg 文件,双击安装文件;
这时会要求你输入管理员密码,输入即可,之后弹出安装向导;
接下来就是一些基本的配置,比如:安装目录、扩展安装、数据库目录、用户密码、端口设置等,一般使用默认的就好,直接点 Next;最后,点击 Finish 即可(不用勾选)。
执行以下脚本启动 PostgreSQL。
以下几个选项你可以自己输入,或者用默认的,默认回车就行,密码的地方为刚才你在安装过程中设置的密码:
$ /Library/PostgreSQL/11/scripts/runpsql.sh;exit
Server [localhost]:
Database [postgres]:
Port [5432]:
Username [postgres]:
Password for user postgres:
psql (11.3)
Type "help" for help.
postgres=#
三、 PostgreSQL 语法
1、SQL Shell(psql)
默认情况下 PostgreSQL 安装完成后,自带了一个命令行工具 SQL Shell(psql)。
Linux 系统可以直接切换到 postgres 用户来开启命令行工具:
# sudo -i -u postgres
Windows 系统一般在它的安装目录下:
Program Files → PostgreSQL 11.3 → SQL Shell(psql)
Mac OS 我们直接搜索就可以了找到:
进入命令行工具,我们可以使用 \help 来查看各个命令的语法 :
postgres-# \help <command_name>
例如,我们查看下 select 语句的语法:
postgres=# \help SELECT
Command: SELECT
Description: retrieve rows from a table or view
Syntax:
[ WITH [ RECURSIVE ] with_query [, ...] ]
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
[ * | expression [ [ AS ] output_name ] [, ...] ]
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY grouping_element [, ...] ]
[ HAVING condition [, ...] ]
[ WINDOW window_name AS ( window_definition ) [, ...] ]
[ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
[ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
[ FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } [ OF table_name [, ...] ] [ NOWAIT | SKIP LOCKED ] [...] ]
from_item 可以是以下选项之一:
[ ONLY ] table_name [ * ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ]
2、SQL 语句
一个 SQL 语句通常包含了关键字、标识符(字段)、常量、特殊符号等,下面是一个简单的 SQL 语句:
SELECT id, name FROM runoob
SELECT | id, name | FROM | runoob | |
---|---|---|---|---|
符号类型 | 关键字 | 标识符(字段) | 关键字 | 标识符 |
描述 | 命令 | id 和 name 字段 | 语句,用于设置条件规则等 | 表名 |