当前位置: 首页 > news >正文

进击的PostgreSQL

目录

前言

一、什么是PostgreSQL

1.PostgreSQL的定义

2.PostgreSQL功能和特性

2.1数据类型

2.2数据完整性

2.3并发性、性能

2.4可靠性、灾难恢复

2.5安全

2.6扩展

2.7国际化、文本搜索

二、部署PostgreSQL

1.下载与安装

2.配置数据库

3.配置远程访问

4.修改配置文件

5.常用命令

5.1数据库

5.2数据表 

5.3数据库备份与还原


前言

PostgreSQL,通常简称为Postgres,是一款强大且开源的关系型数据库管理系统(RDBMS),它在数据存储和处理方面提供了广泛的功能和灵活性。

一、什么是PostgreSQL

1.PostgreSQL的定义

PostgreSQL 是一款开源的、免费的关系型数据库管理系统。它具有以下特点:

  • 高度可扩展: PostgreSQL 允许在不同规模的应用程序中灵活扩展,从小型网站到大型企业级系统都可以使用。
  • 支持复杂数据类型: 除了常见的数据类型外,PostgreSQL 还支持 JSON、数组、范围、几何图形、全文搜索等多种复杂数据类型。
  • ACID 兼容: 它严格遵循 ACID(原子性、一致性、隔离性、持久性)属性,确保数据的完整性和一致性。
  • 丰富的扩展支持: PostgreSQL 提供了丰富的扩展支持,允许开发人员自定义和添加功能,以满足各种需求。
  • 高级优化器: 它具有强大的查询优化器,能够自动优化查询以提高性能。

 官网:PostgreSQL: The world's most advanced open source database

2.PostgreSQL功能和特性

  • 多版本并发控制(MVCC) PostgreSQL 使用多版本并发控制来管理事务,这意味着它可以支持高并发访问,每个事务都可以看到一致的快照数据。
  • 外键支持 PostgreSQL 提供了完整的外键支持,可以维护表之间的关联关系,并确保数据的完整性。
  • 复杂查询 PostgreSQL 支持复杂查询,包括联接、子查询、窗口函数等,使您能够灵活地查询和分析数据。
  • 全文搜索 它内置了全文搜索功能,允许您执行高效的文本搜索和分析。
  • 复制和高可用性 PostgreSQL 提供了复制和高可用性解决方案,包括流复制、逻辑复制和自动故障转移。

2.1数据类型

  • 基元:整数、数字、字符串、布尔值
  • 结构化:日期/时间、数组、范围/多范围、UUID
  • 文档:JSON/JSONB、XML、KEY-VALUE (HSTORE)
  • 几何:点、线、圆、多边形
  • 自定义:复合、自定义类型

2.2数据完整性

  • 唯一,不为空
  • 主键
  • 外键
  • 排除约束
  • 显式锁、咨询锁

2.3并发性、性能

  • 索引:B 树、多列、表达式、部分索引
  • 高级索引:GiST,SP-Gist,KNN Gist,GIN,BRIN,覆盖索引,布隆过滤器
  • 复杂的查询规划器/优化器,仅索引扫描,多列统计信息
  • 事务,嵌套事务(通过保存点)
  • 多版本并发控制 (MVCC)
  • 并行化读取查询和构建 B 树索引
  • 表分区
  • SQL 标准中定义的所有事务隔离级别,包括可序列化
  • 表达式的实时 (JIT) 编译

2.4可靠性、灾难恢复

  • 预写日志记录 (WAL)
  • 复制:异步、同步、逻辑
  • 时间点恢复 (PITR),活动备用
  • 表空间

2.5安全

  • 身份验证:GSSAPI、SSPI、LDAP、SCRAM-SHA-256、证书等
  • 强大的门禁系统
  • 列级和行级安全性
  • 使用证书和其他方法进行多重身份验证

2.6扩展

存储函数和过程
过程语言:PL/pgSQL、Perl、Python 和 Tcl。还有其他语言可以通过扩展使用,例如Java,JavaScript(V8),R,Lua和Rust。
SQL/JSON 路径表达式
外部数据包装器:使用标准 SQL 接口连接到其他数据库或流
可定制的表存储界面
许多提供附加功能的扩展模块,包括 PostGIS

2.7国际化、文本搜索

  • 支持国际字符集,例如通过 ICU 排序规则
  • 不区分大小写和不区分重音的排序规则
  • 全文搜索

二、部署PostgreSQL

1.下载与安装

// 下载
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
// 安装
yum install -y postgresql15-server
// 初始化数据库
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
// 设置开机启动
sudo systemctl enable postgresql-15安装完成后会默认创建账户postgresql,默认数据库postgres  存储数据库的基础信息
[root@localhost ~]#tail -n1 /etc/passwd
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
[root@localhost ~]#grep postgres /etc/shadow
postgres:!!:19801::::::

2.配置数据库

[root@localhost ~]#su postgres
#切换到postgres用户
bash-4.2$ 
bash-4.2$ 
bash-4.2$ 
bash-4.2$ 
bash-4.2$ psql
#切换SQL模式
could not change directory to "/root"
psql (9.2.24, server 15.6)
WARNING: psql version 9.2, server version 15.0.Some psql features might not work.
Type "help" for help.postgres=# alter user postgres with password 'postgres123';
#修改密码
ALTER ROLE
postgres=# create user test with password 'test';
#创建test用户
CREATE ROLE
postgres=# \q
#退出SQL模式
bash-4.2$ exit
#退出postgres用户
[root@localhost ~]#

3.配置远程访问

将5432端口添加到防火墙列表

// 打开防火墙端口
sudo firewall-cmd --add-port=5432/tcp --permanent
// 刷新防火墙
sudo firewall-cmd --reload
[root@localhost ~]#systemctl start firewalld
[root@localhost ~]#sudo firewall-cmd --add-port=5432/tcp --permanent
success
[root@localhost ~]#sudo firewall-cmd --reload
success

4.修改配置文件

修改监听地址为任意地址,即修改postgresql.conf文件

// 打开配置文件
vi /var/lib/pgsql/15/data/postgresql.conf
// 打开监听注释,监听地址改为*
listen_addresses = '*'
// 保存退出 esc
:wq
[root@localhost ~]#vim /var/lib/pgsql/
15/            .bash_history  .bash_profile  .psql_history  
[root@localhost ~]#vim /var/lib/pgsql/15/data/postgresql.conf 
[root@localhost ~]#sed -n '60p' /var/lib/pgsql/15/data/postgresql.conf 
listen_addresses = '*'		# what IP address(es) to listen on;

5.常用命令

5.1数据库

// 切换到postgres用户
su postgres
// 创建数据库 mydb
create database mydb;
// 查看所有数据库
\l
// 切换到mydb数据库
\c mydb
// 删除
drop database mydb;
[root@localhost ~]#su postgres
bash-4.2$ psql
could not change directory to "/root"
psql (9.2.24, server 15.6)
WARNING: psql version 9.2, server version 15.0.Some psql features might not work.
Type "help" for help.postgres=# create database mydb;
CREATE DATABASE
postgres=# \lList of databasesName    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privil
eges   
-----------+----------+----------+-------------+-------------+----------------
-------mydb      | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | postgres  | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | template0 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres    +|          |          |             |             | postgres=CTc/po
stgrestemplate1 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres    +|          |          |             |             | postgres=CTc/po
stgres
(4 rows)postgres=# create database mydb;
错误:  数据库 "mydb" 已经存在
postgres=# \c mydb
psql (9.2.24, server 15.6)
WARNING: psql version 9.2, server version 15.0.Some psql features might not work.
You are now connected to database "mydb" as user "postgres".
mydb=# drop database mydb;
错误:  无法删除当前使用的数据库
mydb=# \q
bash-4.2$ psql
could not change directory to "/root"
psql (9.2.24, server 15.6)
WARNING: psql version 9.2, server version 15.0.Some psql features might not work.
Type "help" for help.postgres=# drop database mydb;
DROP DATABASE
postgres=# \c mydb;
连接到套接字"/run/postgresql/.s.PGSQL.5432"上的服务器失败:致命错误:  数据库 "mydb" 不存在
Previous connection kept
postgres=# \q
bash-4.2$ exit

5.2数据表 

// 创建表
create table business_order(id serial primary key,order_no varchar(255),sku_name varchar(255));
// 插入数据
insert into business_order(order_no,sku_name)values('20221126000001','iphone14 plus');
// 查看表内容
select * from business_order;
// 查看表结构
\d business_order
// 查看所有表,序列等
\d
[root@localhost ~]#su postgres
bash-4.2$ psql
could not change directory to "/root"
psql (9.2.24, server 15.6)
WARNING: psql version 9.2, server version 15.0.Some psql features might not work.
Type "help" for help.postgres=# create table business_order(id serial primary key,order_no varchar(255),sku_name varchar(255));
CREATE TABLE
postgres=# insert into business_order(order_no,sku_name)values('20240319000001','Huawei p60');
INSERT 0 1
postgres=# select * from business_order;id |    order_no    |  sku_name  
----+----------------+------------1 | 20240319000001 | Huawei p60
(1 row)postgres=# \d business_order
错误:  字段 c.relhasoids 不存在
第1行..., c.relhasindex, c.relhasrules, c.relhastriggers, c.relhasoi...^
postgres=# \d business_order;
错误:  字段 c.relhasoids 不存在
第1行..., c.relhasindex, c.relhasrules, c.relhastriggers, c.relhasoi...^
postgres=# \dList of relationsSchema |         Name          |   Type   |  Owner   
--------+-----------------------+----------+----------public | business_order        | table    | postgrespublic | business_order_id_seq | sequence | postgres
(2 rows)postgres=# \q
bash-4.2$ exit

5.3数据库备份与还原

实际工作中会对数据库进行备份和还原,备份主要有三种格式

  • .bak 即压缩的二进制
  • .sql 即明文存储
  • .tar 即tarball压缩格式

数据库备份分单数据库备份,使用 pg_dump 命令;所有数据库备份,使用 pg_dumpall 命令。

// 切换到postgres用户
su postgres
// 单数据库备份-导出到当前目录
pg_dump mydb > mydb.bak
// 所有数据库备份,
pg_dumpall > backup.bak
// 整个数据库备份到指定位置
pg_dump -f /tmp/mydb.bak mydb
// 备份postgres数据库中business_order表
pg_dump -U postgres -f /tmp/mydb.sql -t business_order postgres
// 数据库恢复-直接恢复,注意先新增空数据库
psql -f /tmp/mydb.bak mydb
// 数据库恢复
pg_restore -U postgres -d business_order /temp/mydb.bak
// 查看目录
ls -l
[root@localhost ~]#su postgres
bash-4.2$ psql
could not change directory to "/root"
psql (9.2.24, server 15.6)
WARNING: psql version 9.2, server version 15.0.Some psql features might not work.
Type "help" for help.postgres=# pg_dump mydb > mydb.bak
postgres-# pg_dumpall > backup.bak
postgres-# pg_dump -f /tmp/mydb.bak mydb
postgres-# pg_dump -U postgres -f /tmp/mydb.sql -t business_order postgres
postgres-# psql -f /tmp/mydb.bak mydb
postgres-# pg_restore -U postgres -d business_order /temp/mydb.bak
postgres-# ls -l
postgres-# ll
postgres-# \q
bash-4.2$ exit

异常处理:Navicat连接报错

错误代码:authentication method 10 not supported
处理方案:在 pg_hba.conf 文件中可将新增的 0.0.0.0/0 的模式改为 trust

相关文章:

进击的PostgreSQL

目录 前言 一、什么是PostgreSQL 1.PostgreSQL的定义 2.PostgreSQL功能和特性 2.1数据类型 2.2数据完整性 2.3并发性、性能 2.4可靠性、灾难恢复 2.5安全 2.6扩展 2.7国际化、文本搜索 二、部署PostgreSQL 1.下载与安装 2.配置数据库 3.配置远程访问 4.修改配置…...

本地gitlab-runner的创建与注册

引言 之前通过一些方式在本地创建runner,时而会出现一些未知的坑,所以写下本文记录runner可以无坑创建的方式。 以下注册runner到相应仓库的前提是已经在本地安装了gitlab-runner 具体安装方式见官网 本地gitlab-runner安装常用的指令 查看gitlab r…...

《UE5_C++多人TPS完整教程》学习笔记28 ——《P29 Mixamo 动画(Mixamo Animations)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P29 Mixamo动画(Mixamo Animations)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者…...

剑指offer力扣题集

剑指offer Krahets前辈整理的题解,这个博客为了方便自己刷题和复习,加油! 01. 数组中重复的数字 力扣链接 02. 二维数组中的查找 力扣链接 03. 替换空格 力扣链接 04. 从尾到头打印链表 力扣链接 05. 重建二叉树 力扣链接好难 -_-…...

【商业|数据科学主题会议推荐】2024年商业分析与数据科学国际学术会议(ICBADS 2024)

【商业|数据科学主题会议推荐】2024年商业分析与数据科学国际学术会议(ICBADS 2024) 征稿主题 (以下主题包括但不限于) 多媒体决策 决策理论与决策科学 数字市场设计与运营 降维 电子商务 道德决策 财务分析 群体决策与软件 医疗保…...

爬虫技术实战案例解析

目录 前言 案例背景 案例实现 案例总结 结语 前言 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊爬虫技术实战案例解析,希望大家能觉得实用! 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!&#x1…...

Git 使用笔记

基本操作: 初始化 (git init) 使用背景和作用: 在本地建立一个文件夹后,基于这个文件夹进行git 操作,赋予git操作本文件夹的权限 。查看当前文件夹状态(git status) 每次打开文件夹…...

python -- 语法与变量

你好, 我是木木, 目前正在做两件事   1. 沉淀自己的专业知识   2. 探索了解各种副业项目,同时将探索过程进行分享,帮助自己以及更多朋友找到副业, 做好副业 文末有惊喜 语法的简要说明 每种语言都有自己的语法,不管是自然语言(…...

24计算机考研调剂 | 太原科技大学

2024年太原科技大学 力学专业 接收研究生调剂通告 考研调剂招生信息 招生专业: 080100(力学) 01先进材料变形行为及力学性能 02 计算力学及其应用 03结构动力学与无损检测 04复合材料断裂理论与结构设计 补充内容 调剂考生基本要求 &…...

Leetcode 204. 计数质数 java题解

https://leetcode.cn/problems/count-primes/description/ 法一 class Solution {public int countPrimes(int n) {int count0;for(int i2;i<n;i){//判断i是否质数boolean ftrue;for(int j1;j*j<i;j){//因子if(j!1&&j!i&&(i%j0)){ffalse;break;}}if(f){…...

机器学习——终身学习

终身学习 AI不断学习新的任务&#xff0c;最终进化成天网控制人类终身学习&#xff08;LLL&#xff09;&#xff0c;持续学习&#xff0c;永不停止的学习&#xff0c;增量学习 用线上收集的资料不断的训练模型 问题就是对之前的任务进行遗忘&#xff0c;在之前的任务上表现不好…...

一次完整的 HTTP 请求所经历的步骤

1&#xff1a; DNS 解析(通过访问的域名找出其 IP 地址&#xff0c;递归搜索)。 2&#xff1a; HTTP 请求&#xff0c;当输入一个请求时&#xff0c;建立一个 Socket 连接发起 TCP的 3 次握手。如果是 HTTPS 请求&#xff0c;会略微有不同。 3&#xff1a; 客户端向服务器发…...

OpenGL学习笔记【1】——简介

一、OpenGL概念 OpenGL (Open Graphics Library&#xff0c;译名&#xff1a;开放式图形库开放式图形库) 是一种用于渲染 2D 和 3D 图形的跨语言、跨平台的编程接口(API)。 二、OpenGL跨语言 OpenGL 是一个 C 语言库&#xff0c;因此理解 C 语言&#xff08;或 C&#xff09;的…...

C语言课后作业 20 题+考研上机应用题

题目 1: 计算圆的面积 描述&#xff1a; 输入圆的半径&#xff0c;计算并输出圆的面积。 题目 2: 判断一个年份是否为闰年 描述&#xff1a; 输入一个年份&#xff0c;判断并输出该年份是否为闰年。 题目 3: 计算并输出斐波那契数列的前10个数 描述&#xff1a; 输出斐波那…...

macOS上基于httpd-dav搭建WebDav服务

文章目录 配置 Apache httpd修改 ServerName启动验证 httpd 服务启用 Dav 扩展服务配置 配置 httpd 扩展 Dav 服务设置共享目录文件夹配置 DavLockDB 目录创建 WebDAV 访客用户 httpd-dav.conf 主要改动部分BasicDigest共享多个目录 授予 httpd 完全磁盘访问权限验证更新配置重…...

Java-设计模式-单例模式

单例模式 从单例加载的时机区分&#xff0c;有懒汉模式/饥饿模式。 从实现方式区分有双重检查模式&#xff0c;内部类模式/Enum模式/Map模式等。在《Effective Java》中&#xff0c;作者提出利用Enum时实现单例模式的最佳实践。 内容概要 实现单例模式的几个关键点 利用Enu…...

图片html5提供的懒加载与vue-lazyload的区别

原生HTML lazy loading特性 <img src"/images/ocean.jpeg" alt"Ocean" loading"lazy"> loading"lazy" 是HTML5的一个原生特性&#xff0c;它允许浏览器延迟加载图片直至图片距离视口很近或者即将进入视口时。这是一种由浏览器…...

golang 根据某个特定字段对结构体的顺序进行排序

文章目录 方法一方法二方法三 在Go语言中&#xff0c;我们可以使用 sort.Slice() 函数对结构体进行排序。假设你有一个结构体&#xff0c;并且希望根据其中的某个字段进行排序&#xff0c;你可以使用自定义的排序函数。 方法一 下面是一个示例代码&#xff0c;假设有一个包含…...

React Router 参数使用详解

React Router 参数使用详解 React Router 是 React 中用于处理路由的常用库&#xff0c;它提供了丰富的功能来管理应用程序的导航和路由状态。在 React Router 中&#xff0c;我们经常需要使用不同类型的参数来处理路由信息&#xff0c;包括 params 参数、search 参数和 state…...

Vue中$set用法解析

当一个 Vue 实例被创建时&#xff0c;它向 Vue 的响应式系统中加入了其 data 对象中能找到的所有的属性。当这些属性的值发生改变时&#xff0c;视图将会产生“响应”&#xff0c;即匹配更新为新的值&#xff0c;但是遇到以下情况不会进行数据的双向绑定。 当你利用索引直接改…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

Kafka主题运维全指南:从基础配置到故障处理

#作者&#xff1a;张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1&#xff1a;主题删除失败。常见错误2&#xff1a;__consumer_offsets占用太多的磁盘。 主题日常管理 …...

渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用

阻止除自定义标签之外的所有标签 先输入一些标签测试&#xff0c;说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时&#xff08;如通过点击或键盘导航&…...