PostgreSQL数据库的部署与优化

一.PostgreSQL数据库

1.PostgreSQL数据库的概念

(1)PostgreSQL 是一种开源的面向对象的关系型数据库管理系统(RDBMS),是一种高度可扩展的、高性能的数据库服务器,可在 Windows、Linux、UNIX 和 macOS 等操作系统上运行。

(2)它支持 SQL 语言的完整标准和 ACID 事务,能够处理复杂的数据结构和查询,具有良好的扩展性和可编程性。

(3)PostgreSQL 提供了诸如完整的事务支持、多版本并发控制(MVCC)、复制服务、支持 SQL-92 标准的 SQL 解析器、批量插入和查询、可编程 SQL 等功能。

(4)它也是 MySQL 等其他开源数据库系统中没有的功能和特性,比如逻辑复制、表空间、分区表、外部表等。

(5)PostgreSQL 还提供了丰富的扩展 API 和插件机制,使得它可以应用于各种不同的场景和应用领域。

总:PostgreSQL 是一种功能强大、可靠稳定的数据库管理系统,它具有很多高级特性和强大的扩展性,被广泛应用于企业、大型组织和开发者社区中的各种数据存储和数据处理场景。

1.1 PostgreSQL 的核心概念

  1. 数据库对象:PostgreSQL 管理多种不同类型的数据库对象,包括数据库(database)、模式(schema)、表(table)、序列(sequence)、视图(view)、索引(index)和函数等等。每个数据库对象都可以由 SQL 语句或者客户端工具进行创建、修改和删除操作。
  2. 数据类型:PostgreSQL 支持多种标准SQL类型,例如:整数、浮点数、字符、日期/时间等,同时还支持一些非标准的数据类型,如数组、枚举、范围、JSON 等等。
  3. 查询语言:PostgreSQL 支持 SQL 标准,并且实现了 SQL-92、SQL-99、SQL-2003 等标准中的许多特性,同时具备非常强大的查询能力,能够完成复杂的数据查询任务。
  4. 事务和锁定:在 PostgreSQL 中,每个数据库连接都可以运行在独立的事务中,这些事务可以保证ACID属性。同时,PostgreSQL 还提供了多种锁保护机制,如行级锁、页级锁、表级锁等,以保证数据的隔离性和完整性。
  5. 安全性和权限控制:PostgreSQL 具有安全性高、子网安全性高、用户/角色管理等特性。可以通过 PostgreSQL 的权限管理机制来授予每个连接不同级别的权限,它的权限体系相对复杂,同时支持细粒度控制。
  6. 备份和恢复:PostgreSQL 提供了几种备份机制,以确保数据的可靠性和持久性。例如,通过二进制日志归档、基于时间点的恢复等技术,可以对数据进行备份和恢复,以保障数据的高可用和可靠性。

总:以上这些核心概念是使用 PostgreSQL 的必备知识,它们是 PostgreSQL 的基础架构和核心特性。

2.PostgreSQL特点

  1. 开源免费:PostgreSQL 是一款免费且开源的数据库,没有任何专利问题和额外的许可费用,这使得它成为开发者和企业的首选数据库。
  2. 可扩展性:PostgreSQL 具有很强的可扩展性和可定制性,用户可以通过编写存储过程、触发器、自定义数据类型等来实现个性化的功能和处理方式,同时还支持扩展API和插件机制。
  3. 功能丰富:PostgreSQL 支持标准 SQL 和许多非标准的数据类型,如数组、JSON、XML 等,同时实现了 SQL-92、SQL-99、SQL-2003 等多个标准,支持多种数据处理和查询任务,如分组、过滤、联合查询、窗口函数、递归查询、地理信息处理等等。
  4. 高性能:PostgreSQL 通过使用 MVCC、写前日志(Write-ahead logging,WAL)、自适应查询优化器等技术,能够提供高性能的数据访问速度和并发控制,同时支持多个索引和高效的数据处理能力。
  5. 可靠性和安全性:PostgreSQL 通过提供ACID事务的支持、异地备份和恢复等机制,能够保证数据的持久性和可靠性。同时,它通过自带的加密和用户和角色权限机制等方式,保证数据的安全性。
  6. 社区支持:PostgreSQL 拥有强大的社区支持,并且在活跃的开发和维护中,这使得它有许多开发者,可靠的资料和文档。

总之,PostgreSQL 是一款成熟的、功能强大的、安全可靠的数据库管理系统。通过使用 PostgreSQL,开发者和企业可以获得高性能、高可用和高度可扩展性的数据处理和存储能力。

3.PostgreSQL的作用

PostgreSQL 的作用主要是提供一个可靠、高性能、可扩展的关系型数据库管理系统,用于存储、管理和处理各种类型的数据。具体来说,PostgreSQL 可以实现以下主要功能和应用:

(1)数据存储和访问:PostgreSQL 可以实现关系型数据的存储和访问,支持多种标准 SQL 数据类型,如整数、浮点数、字符、日期/时间等,同时还支持非标准的数据类型,如数组、JSON 等。

(2)数据保护和可靠性:PostgreSQL 提供了各种数据保护机制,包括事务、MVCC、ACID 属性、WAL 日志归档、异地备份等,从而尽可能地确保数据的安全性和可靠性。

(3)数据处理和分析:PostgreSQL 的高级查询分析器和支持复杂查询的计算引擎,以及许多第三方扩展,可以帮助用户快速高效地对数据进行分析和查询,支持复杂的数据处理,如分组、过滤、联合查询、递归查询等。

(4)应用开发和支持:PostgreSQL 提供了丰富的编程接口和许多扩展和插件机制,提供了各种不同的开发工具,使得开发人员能够更方便地开发和管理 PostgreSQL 数据库和应用程序。

总:PostgreSQL 在数据存储、数据分析、数据处理、应用开发等各个方面都具有非常广泛的应用和重要作用,是一款非常出色的关系型数据库管理系统。

4.PostgreSQL的应用场景

PostgreSQL 的应用场景非常广泛,可以满足不同领域、不同规模的数据存储和数据处理需求。以下是一些常见的 PostgreSQL 应用场景:

  1. 企业级应用:PostgreSQL 通过提供事务支持、ACID 特性、高可靠性和可扩展性等功能,成为许多企业级应用程序的首选数据库,并已成为一些重要企业 IT 系统的背后支持。
  2. 大数据和数据仓库:PostgreSQL 提供了复杂的查询和分析支持,同时也容易扩展至支持分布式架构,成为处理大数据和构建数据仓库的有效工具。
  3. Web 应用程序:PostgreSQL 提供了丰富的编程接口和扩展,如 PL/pgSQL、pgAdmin 等工具,能够方便地服务于 Web 应用程序的需求。
  4. 地理信息系统(GIS):PostGIS 是一款基于 Postgres 的自由的、开源的 GIS 扩展,使用 PostGIS 扩展可以在 PostgreSQL 中轻松的进行空间数据存储和处理。
  5. 金融和保险:PostgreSQL 可以通过事务控制来保证金融和保险应用数据的一致性和正确性,因此被广泛应用于金融和保险等行业。

总:PostgreSQL 具有丰富的功能、高可靠性和可扩展性,是一个功能强大的开源数据库管理系统,能够满足许多不同应用场景和数据处理需求。

5.PostgreSQL、mysql、oracle的对比

PostgreSQL、MySQL、Oracle 是三款主流的关系型数据库管理系统,在不同的场景和应用需求下,这些数据库具有不同的特点和优势,下面是它们的对比分析:

(1)数据安全和可靠性:Oracle 是提供完善数据安全和可靠性的管理系统之一。在一些企业应用等严格要求数据安全性、数据可靠性和事务完整性的场景下, Oracle 更有竞争力。

(2)可扩展性和性能:PostgreSQL 提供高性能和高度可扩展性的架构,可以处理大量数据存储和处理需求,其分布式处理架构提供优秀的处理效率和可扩展性。PostgreSQL 也具有可编程性和灵活性。MySQL 虽然提供了可扩展性的良好支持,但相对于 PostgreSQL 和 Oracle,可能在性能、安全性以及可靠性方面有些差距。

(3)开源免费性:PostgreSQL、MySQL 是免费的开源数据库管理系统,没有专利问题和许可费用,Oracle 是一款商业的数据库管理系统,需要购买许可证。

(4)使用场景:Oracle 数据库在大型企业应用中应用较多,MySQL 则一般用于小型应用、Web 应用程序、商业系统和简单的数据管理需求,PostgreSQL 则更多的应用于数据分析和处理领域,而且在 GIS 空间数据处理和开发领域有很好的支持。

(5)开发接口:PostgreSQL 提供了丰富的编程接口和很多扩展机制,MySQL 也提供了许多编程接口和外部库连接的支持,Oracle 支持丰富的编程语言如 Java、C++、C# 等,并且提供较为完善的相关开发文档和开发支持友好。

总:PostgreSQL、MySQL、Oracle 在不同的场景中各有优劣。在选择数据库时,需要根据实际应用需求和预算等因素进行权衡决策。如果需要高安全性、高可靠性和高扩展性豪华奢侈品,Oracle 可能是最好的选择,如果需要高度可编程的数据库系统,可以选择 PostgreSQL,如果需要易用、性能高、成本低,那么 MySQL 则更适合。

二.Linux系统安装PostgresSQL(Centos7)

1.更新yun源

#在执行“yum upgrade”后如果有下载失败的,重新执行一遍“yum upgrade”
yum clean all
yum upgrade

2.安装PostgreSQL

2.1 安装rpm文件

yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

2.2 安装客户端

yum install postgresql11

2.3 安装服务器

yum install postgresql11-server

2.4 设置自启动postgresql服务

systemctl enable postgresql-11
 
systemctl start postgresql-11

3. 创建用户和数据

3.1 登录postgresql数据库

使用postgres用户登录(PostgresSQL安装后会自动创建postgres用户,无密码)

su - postgres
-bash-4.2$ 
#登录postgresql数据库,输入:psql
psql

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4pRwvEPg-1689498022797)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230716153232257.png)]

3.2 创建用户和数据库并授权

3.2.1 直接修改postgres密码(推荐使用)

(1)格式

#修改密码
alter user postgres with password 'xxx';

(2)示例

alter user postgres with password '000000';
ALTER ROLE

3.2.2 创建其他数据库

(1)格式

#创建用户
create user 用户名 with password 'xxx';  

(2)示例

create user test_user with password 'abc123';
#创建数据库
create database test_db owner test_user; 
#授权管理
grant all privileges on database test_db to test_user;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0U0x7zFi-1689498022798)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230716153906544.png)]

4.退出psql

退出psql(输入 \q 再按回车键即可)

在这里插入图片描述

三.PostgreSQL的相关命令

1.连接 PostgreSQL 数据库

(1)格式

psql -h hostname -d dbname -U username
  • -h hostname: 这是要连接的 PostgreSQL 服务器的主机名或 IP 地址。
  • -d dbname: 这是要连接的数据库的名称。
  • -U username: 这是用于连接数据库的用户名。

请将 hostname 替换为实际的主机名或 IP 地址,dbname 替换为实际的数据库名称,username 替换为实际的用户名。请注意,在这个示例中,没有提供密码参数 -p,所以你可能还需要提供密码以完成连接。

(2)示例

psql -h 192.168.198.12 -d test_db -U test_user

2.创建一个新的数据库:

(1)格式

CREATE DATABASE数据库名;

(2)示例

CREATE DATABASE txbb;

3.删除一个已经存在的数据库:

(1)格式

drop database 数据库名;

(2)示例

drop database txbb1;

4.展示创建的postgresgl数据库

\l

5.创建表

CREATE TABLE employees (id SERIAL PRIMARY KEY,name VARCHAR(100),age INT,salary NUMERIC(10, 2));

6.给表中添加列

ALTER TABLE employees ADD COLUMN salary NUMERIC(10, 2);

7.给表的列添加数据

UPDATE employees SET salary = '5000' WHERE id = 1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E2SiXgBh-1689498022799)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230716163421307.png)]

8.查看表中信息

select * from employees;

9.向表中插入信息

INSERT INTO employees (name, age, salary) 
VALUES ('John Doe', 28, 50000.00);

插入多条信息

INSERT INTO employees (name, age, salary) 
VALUES ('Jane Smith', 32, 60000.00),
       ('Bob Johnson', 45, 70000.00),
       ('Alice Williams', 27, 55000.00);

10.添加表的列

#添加了新列 ok,并为该列设置了默认值为 true。
ALTER TABLE employees ADD COLUMN ok BOOLEAN DEFAULT true;

11. 修改表的列

11.1 修改表列的数据类型

#将 employees 表中的 name 列的数据类型修改为 VARCHAR(150)。
ALTER TABLE employees
ALTER COLUMN name TYPE VARCHAR(150);

11.2 修改列的名称

#将 employees 表中的 age 列重命名为 employee_age。
ALTER TABLE employees
RENAME COLUMN age TO employee_age;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yplK1fvm-1689498022799)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230716161653326.png)]

11.3 添加约束

#将在 employees 表中为 employee_age 列添加一个约束条件,确保所有的年龄值大于等于18。
ALTER TABLE employees
ADD CONSTRAINT age_check CHECK (employee_age >= 18);

11.4 删除列

#将从 employees 表中删除 salary 列。
ALTER TABLE employees
DROP COLUMN salary;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hs8qTORk-1689498022799)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230716161859990.png)]

12.更新数据库表中已有的数据

12.1 更新特定行的数据

#将id为1的员工的工资更新为5000
UPDATE employees SET salary = 8000 WHERE id = 1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VOUpyn9s-1689498022800)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230716164030041.png)]

12.2 批量更新符合条件的行的数据:

#将选择 employee_age 小于 30 的员工,并将他们的 salary 更新为 5000
UPDATE employees SET salary = 5000 WHERE employee_age < 30;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v3NUUqcp-1689498022800)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230716164557297.png)]

12.3 更新多个列的数据

#将选择 employee_age 小于 30 的员工,并将他们的 salary 更新为 5000,ok 列更新为 false
UPDATE employees SET salary = 5000, ok = false WHERE employee_age < 30;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-We6l6J7x-1689498022800)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230716164819297.png)]

四.PostgreSQL的优化(什么情况下优化)

1.优化的作用

提升数据库的性能和响应时间

2.需要优化的情况及优化方式

(1)查询性能缓慢:如果查询的响应时间较长,可以通过优化查询来提高性能。这包括创建适当的索引、合理的查询设计和使用查询优化器来改进执行计划等。

(2)大规模数据处理:当处理大量数据时,如批量导入或删除数据,可以考虑使用并行处理、分区表或批处理操作来提高性能。

(3)内存管理:合理配置数据库的内存参数,如共享缓冲区(shared_buffers)和工作内存(work_mem),以优化内存使用和查询性能。

(4)硬件优化:根据数据库的负载和需求,选择合适的硬件配置,如磁盘、CPU 和内存等,以满足性能需求。

(5)查询日志和监视:使用查询日志和性能监视工具,识别慢查询和瓶颈,并根据结果进行优化。

(6)正确的索引使用:根据查询的特点和数据访问模式,创建适当的索引以提高查询性能。然而,过多或不必要的索引可能会导致性能下降,因此需要进行权衡和优化。

(7)规范化和反规范化:在设计数据库模式时,考虑表的规范化程度和反规范化的优化技巧,以提高查询性能。

(8)查询重写和重构:对于复杂或低效的查询,考虑优化查询语句的结构和逻辑,以减少开销并提高性能。

(9)并发控制:在高并发的环境中,使用适当的事务隔离级别和锁定策略,以避免并发问题和提高性能。

(work_mem),以优化内存使用和查询性能。

(4)硬件优化:根据数据库的负载和需求,选择合适的硬件配置,如磁盘、CPU 和内存等,以满足性能需求。

(5)查询日志和监视:使用查询日志和性能监视工具,识别慢查询和瓶颈,并根据结果进行优化。

(6)正确的索引使用:根据查询的特点和数据访问模式,创建适当的索引以提高查询性能。然而,过多或不必要的索引可能会导致性能下降,因此需要进行权衡和优化。

(7)规范化和反规范化:在设计数据库模式时,考虑表的规范化程度和反规范化的优化技巧,以提高查询性能。

(8)查询重写和重构:对于复杂或低效的查询,考虑优化查询语句的结构和逻辑,以减少开销并提高性能。

(9)并发控制:在高并发的环境中,使用适当的事务隔离级别和锁定策略,以避免并发问题和提高性能。

请注意,具体的优化策略会根据你的数据库架构、应用需求和数据特征而有所不同。优化是一个持续的过程,需要通过测试和监控来评估效果,并根据需要进行调整。

PostgreSQL相比较突出的优点:

  • 可扩展性和性能
  • 免费的开源数据库管理系统,没有专利问题和许可费用
  • 应用于数据分析和处理领域,而且在 GIS 空间数据处理和开发领域有很好的支持。
  • 提供了丰富的编程接口和很多扩展机制
  • 需要高度可编程的数据库系统,可以选择 PostgreSQL

mysql相比较突出的优点:

  • 免费的开源数据库管理系统,没有专利问题和许可费用
  • MySQL 则一般用于小型应用、Web 应用程序、商业系统和简单的数据管理需求
  • 提供了许多编程接口和外部库连接的支持
  • 需要易用、性能高、成本低,那么 MySQL 则更适合。

oracle相比较突出的优点:

  • 数据安全和可靠性
  • Oracle 数据库在大型企业应用中应用较多
  • 支持丰富的编程语言如 Java、C++、C# 等,并且提供较为完善的相关开发文档和开发支持友好。
  • 需要高安全性、高可靠性和高扩展性豪华奢侈品,Oracle 可能是最好的选择

猜你喜欢

转载自blog.csdn.net/Katie_ff/article/details/131752280
今日推荐