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

pg数据库和mysql区别

区别一

PostgreSQL (通常称为 PG) 和 MySQL 都是广泛使用的关系型数据库管理系统 (RDBMS)。虽然它们都是用于存储和管理数据的关系数据库,但它们在一些方面有很大的区别,如下所述:

  1. 数据类型:PostgreSQL 支持更多的数据类型,如范围类型、网络地址类型、JSON 和 XML 数据类型等,而 MySQL 则不支持这些类型。

  2. 扩展性:PostgreSQL 具有很高的扩展性,可以使用自定义数据类型、函数和操作符来扩展其功能。而 MySQL 的扩展性较差,需要使用插件或存储过程来实现类似的功能。

  3. ACID 兼容性:PostgreSQL 是完全 ACID 兼容的数据库,而 MySQL 只在特定的存储引擎 (如 InnoDB) 中支持 ACID。

  4. 多版本并发控制 (MVCC):PostgreSQL 使用 MVCC 来提供高级事务隔离级别,这意味着多个事务可以同时读取和写入数据库,而不会相互干扰。MySQL 也支持 MVCC,但其实现方式不同。

  5. 存储引擎:MySQL 支持多个存储引擎,包括 MyISAM 和 InnoDB 等。每种存储引擎都有自己的特点和优缺点。PostgreSQL 仅支持单个存储引擎。

  6. SQL 标准兼容性:PostgreSQL 更加符合 SQL 标准,而 MySQL 在某些方面采用了自己的实现方式。

  7. 性能:在一些特定的使用场景下,MySQL 的性能可能更好。但在复杂的查询和高并发的情况下,PostgreSQL 可能表现更好。

总之,PG 和 MySQL 都是出色的关系型数据库管理系统,具有不同的特点和优劣。选择哪个取决于具体的需求和使用场景。

区别二

  1. 简介
    PostgreSQL
    PostgreSQL是一个开源的关系型数据库管理系统,以其高度的可扩展性、ACID兼容性(支持原子性、一致性、隔离性和持久性)以及丰富的功能集而闻名。它支持多种操作系统,包括Linux、Windows、Mac OS等,而且具有强大的社区支持。

MySQL
MySQL也是一个开源的关系型数据库管理系统,其特点在于速度快、易于使用以及广泛的社区支持。它最初是由瑞典的开发者创建的,后来被Sun Microsystems收购,现在隶属于Oracle。

  1. 适用场景
    PostgreSQL
    复杂查询和事务处理:PostgreSQL在处理复杂查询和大量事务时表现出色,适用于需要高度数据完整性和一致性的应用程序,如金融系统或企业级应用。
    地理信息系统(GIS):PostGIS是一个用于地理空间对象的开源空间数据库扩展,使得PostgreSQL成为处理地理信息的首选。
    大数据和数据仓库:PostgreSQL的分区表、并行查询和流复制等功能,使其成为处理大数据和数据仓库方面的强力工具。
    MySQL
    Web应用程序:由于其高性能和易用性,MySQL是许多Web应用程序的首选数据库,特别是在需要处理大量读操作的情况下。
    小型企业应用:对于规模相对较小的企业应用程序,MySQL提供了一个稳定、经济高效的解决方案。
    快速开发和迭代:MySQL具有较低的学习曲线,因此适用于快速开发和迭代的项目。
  2. 性能比较
    PostgreSQL
    复杂查询和事务:PostgreSQL在处理复杂查询和高并发事务时表现出色,这得益于其MVCC(多版本并发控制)实现。
    扩展性:具有良好的扩展性,可以通过添加额外的节点来提高性能。
    MySQL
    读取性能:MySQL在处理大量读操作时表现优异,尤其是在使用索引时。
    写入性能:MySQL的写入性能也很好,但在某些情况下可能会受到锁的影响。
  3. 数据模型和功能
    PostgreSQL
    复杂数据类型:支持诸如数组、JSON、XML等复杂数据类型,使其适用于处理半结构化数据。
    触发器和存储过程:提供了强大的触发器和存储过程功能,使得可以在数据库层面实现复杂的业务逻辑。
    MySQL
    简单而高效的索引:MySQL提供了简单但高效的索引机制,可以很好地支持大量的读操作。
    存储引擎:MySQL支持多种存储引擎,例如InnoDB、MyISAM等,可以根据应用程序的需求选择最合适的引擎。
  4. 安全性
    PostgreSQL
    高级安全性功能:PostgreSQL提供了诸如行级安全、列级安全等高级安全功能,可以帮助您更好地保护数据。
    SSL支持:提供了SSL支持,确保数据在传输过程中的安全性。
    MySQL
    基本安全功能:MySQL也提供了基本的安全功能,但相对于PostgreSQL来说可能略显简单。
    SSL支持:和PostgreSQL一样,MySQL也支持SSL。
  5. 总结和选择指南
    在选择适合您项目的数据库时,需要考虑以下几点:

数据模型和功能需求:如果您的应用需要复杂的数据模型和强大的功能集,PostgreSQL可能是更好的选择。
性能需求:根据应用程序的读写比例和事务处理需求,选择合适的数据库以保证性能。
安全性需求:如果数据安全对您的应用至关重要,您可能会更倾向于选择PostgreSQL。
开发团队熟悉度:考虑开发团队的经验和熟悉度,以便选择一个他们能够高效利用的数据库。

函数区别

文章目录
一、格式区别
二、符号区别
三、自增区别
四、函数区别
五、数据类型转化(针对于PostgreSQL)

首先PostgreSQL有一个模式的概念。
一、格式区别
和Oracle一样,PostgreSQL也是严格区分大小写。
1
二、符号区别
和Oracle一样PostgreSQL中," " 双引号是区分库名,关键字等,而MySQL则是反单引号(tab键上方的键),pg查询时字符类型的字段必须使用单引号,而MySQL带有优化器(不是必须)。
1
三、自增区别
MySQL中使用auto_increment ,在需要的列指定自增,而pg中需要设置自增序列。

(1)使用SQL语句
①创建表时

CREATE table infisa_template_config(id serial );

②表已存在

<--设置序列从1开始,自增1-->
CREATE SEQUENCE user_id_seq START WITH 1  
INCREMENT BY 1  NO MINVALUE  NO MAXVALUE  CACHE 1;
<--设置序列-->
ALTER table user ALTER column id SET DEFAULT nextval('user_id_seq');

(2)使用可视化工具
连接navicat15(或者使用DBeaver)

点击序列

可以通过可视化界面新建序列

注:同步数据的话,推荐通过sql方式新建序列。

四、函数区别
(1)时间转化

①时间转字符串:MySQL: date_format(a.tag_create_date,%Y-%m-%d %H:%i:%s’)PostgreSQL: to_char(a.tag_create_date,‘yyyy-mm-dd HH:MM:SS’)②字符串转时间:MySQL: date_format(a.tag_create_date,%Y-%m-%d %H:%i:%s’)PostgreSQL: to_date(a.tag_create_date,‘yyyy-mm-dd HH:MM:SS’)

(2) IFNULL()函数

MySQL: IFNULL(a.idm,‘’)PostgreSQL: COALESCE(a.id,‘’)

(3) sysdate()函数

MySQL: SELECT sysdate()PostgreSQL: SELECT now()

(4) find_in_set()函数(允许在逗号分隔的字符串列表中查找指定字符串的位置)

MySQL: SELECT t.dept_id FROM sys_dept t WHERE find_in_set(‘100’, ancestors)PostgreSQL: SELECT t.dept_id FROM sys_dept t WHERE ‘100’ = ANY (string_to_array(ancestors, ‘,’))

(5)group_concat()函数

MySQL: select a.name,group_concat(distinct city)from user_city a group by a.name;PostgreSQL: select a.name,array_to_string(array_agg(distinct a.city),‘,’)from user_city a group by a.name;

(6)LIMIT

MySQL: select id,name from hospital.ods_user_basic limit 10,2;PostgreSQL: select id,name from hospital.ods_user_basic limit 10 offset 2;

(7)DISTINCT

MYSQL: select DISTINCT b.id from hospital.ods_user_basic as bPostgreSQL: select DISTINCT ON (b.id) b.* from hospital.ods_user_basic as b(注:pg中祛重+排序 ,使用distinct on (列1) order by 列1 )

(8)MyBatis-Plus整合MySQL、PostgreSQL,LIKE使用
MySQL:

<select id="checkReportPage" resultMap="reportResultMap">SELECT*FROMinfisa_medical_reportWHERE is_deleted=0 AND status = 1 AND name LIKE concat('%',#{handleTask.name},'%')
</select>

PostgreSQL:

<select id="checkReportPage" resultMap="reportResultMap">SELECT*FROMinfisa_medical_reportWHERE is_deleted=0 AND status = 1 AND name like concat('%',#{handleTask.name}::varchar,'%')
</select>

(注:pg必须指定模糊查询列的数据类型,否则会报错)

五、数据类型转化(针对于PostgreSQL)
MySQL、Oracle等都是默认对数据类型进行了隐式的转换,在其他数据库varchar等字符串类型和数字可以进行自动的隐式转换,但是PG确没有这么处理,官方文档中也有针对pg的数据转换方式。

解决办法:
①强转(在查询字段上指定数据类型)

a.a1 = b.b1::int8 或者 a.a1::varchar = b.b1

②隐式类型转化(创建类型转换)

–注:创建cast需要有pg_cast系统表的权限
–注:当创建类型转换使用自动隐式转换的话如果出现多个匹配的转换此时pg会因为不知道选择哪一个去处理类型转换而报错,
–如果出现多个隐式自动转换都匹配此时还是需要手动添加转换以达到效果,或者删除多余的类型转换
CREATE CAST (INTEGER AS VARCHAR) WITH INOUT AS IMPLICIT;
CREATE CAST (VARCHAR AS INTEGER) WITH INOUT AS IMPLICIT;
CREATE CAST (BIGINT AS VARCHAR) WITH INOUT AS IMPLICIT;
CREATE CAST (VARCHAR AS BIGINT) WITH INOUT AS IMPLICIT;

附:
③查询当前类型转化:

–这个查询是当前所有的CAST,具体字段的定义同样可以参阅PG数据库官方文档里的描述
select
(select typname from pg_type where oid = t.castsource) as “castsource”,
(select typname from pg_type where oid = t.casttarget) as “casttarget”,
castcontext,
castmethod
from pg_cast as t

④删除类型转化:

DROP CAST (varchar as bigint); DROP CAST (bigint as varchar);

相关文章:

pg数据库和mysql区别

区别一 PostgreSQL (通常称为 PG) 和 MySQL 都是广泛使用的关系型数据库管理系统 (RDBMS)。虽然它们都是用于存储和管理数据的关系数据库&#xff0c;但它们在一些方面有很大的区别&#xff0c;如下所述&#xff1a; 数据类型&#xff1a;PostgreSQL 支持更多的数据类型&#…...

Jetpack Compose 动画正式开始学习

1. 简单值动画 //将一个Color简单值 从一个值 变化到另一个 另一个简单值 就用 animateColorAsStateval backgroundColor by animateColorAsState(if (tabPage TabPage.Home) Purple100 else Green300) 动画其实就是 一个状态不停发生改变导致 组件不断重组产生的过程 2.…...

iOS 17.4报错: libopencore-amrnb.a[arm64]

iOS 17.4报错&#xff1a; libopencore-amrnb.a[arm64] iOS 17.4 模拟器运行报错解决方案 iOS 17.4 模拟器运行报错 Building for ‘iOS-simulator’, but linking in object file (/XXX/lib/libopencore-amrnb.a[arm64]2) built for ‘iOS’ 解决方案 在Podfile里添加如下设…...

鼓楼夜市管理wpf+sqlserver

鼓楼夜市管理系统wpfsqlserver 下载地址:鼓楼夜市管理系统wpfsqlserver 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于C#wpf架构和sql server数据库 功能模块&#xff1a; 登录注册 鼓楼夜市管理系统主界面所有店铺信…...

【五、接口自动化测试】5分钟掌握python + requests接口测试

你好啊&#xff01;我是山茶&#xff0c;一个持续探索AI 测试的程序员&#xff01; 在做接口测试时&#xff0c;在python中内置了HTTP库 urllib&#xff0c;可以用于发送http请求。基于urllib二次封装的三方库Requests&#xff0c;相较于urllib更佳简介易用。所以&#xff0c;…...

双边市场的基本理论

双边市场由两个不同类型的用户组成&#xff0c;通过一个中介机构或平台进行交易&#xff0c;其中一边用户的决策会影响另一边用户的结果。这种影响被称为间接网络外部性&#xff0c;它导致了平台在吸引和平衡两边用户时面临的挑战。 平台定价在双边市场中成为核心问题&#xf…...

R统计学2 - 数据分析入门问题21-40

往期R统计学文章&#xff1a; R统计学1 - 基础操作入门问题1-20 21. 如何对矩阵按行 (列) 作计算&#xff1f; 使用函数 apply() vec 1:20 # 转换为矩阵 mat matrix (vec , ncol4) # [,1] [,2] [,3] [,4] # [1,] 1 6 11 16 # [2,] 2 7 12 17 # [3,] …...

蓝桥杯2023年-买瓜(dfs,类型转换同样耗时)

题目描述 小蓝正在一个瓜摊上买瓜。瓜摊上共有 n 个瓜&#xff0c;每个瓜的重量为 Ai 。 小蓝刀功了得&#xff0c;他可以把任何瓜劈成完全等重的两份&#xff0c;不过每个瓜只能劈一刀。 小蓝希望买到的瓜的重量的和恰好为 m 。 请问小蓝至少要劈多少个瓜才能买到重量恰好…...

生成式人工智能服务安全基本要求实务解析

本文尝试明晰《基本要求》的出台背景与实践定位&#xff0c;梳理《基本要求》所涉的各类安全要求&#xff0c;以便为相关企业遵循执行《基本要求》提供抓手。 引言 自2022年初以来&#xff0c;我国陆续发布算法推荐、深度合成与生成式人工智能服务相关的规范文件&#xff0c;…...

nginx详解,配置http,https,负载均衡,反向代理,SMTP 代理步骤说明

Nginx 是一款高性能的开源 Web 服务器,同时也可以用作反向代理服务器、负载均衡器、HTTP 缓存、HTTPS 中继、以及作为邮件代理服务器等。以下是 Nginx 可以实现的一些常见用途: 静态内容服务: Nginx 可以用来提供静态内容,比如 HTML、CSS、JavaScript 文件等。 动态内容服务…...

ARTS Week 20

Algorithm 本周的算法题为 1222. 可以攻击国王的皇后 在一个 下标从 0 开始 的 8 x 8 棋盘上&#xff0c;可能有多个黑皇后和一个白国王。 给你一个二维整数数组 queens&#xff0c;其中 queens[i] [xQueeni, yQueeni] 表示第 i 个黑皇后在棋盘上的位置。还给你一个长度为 2 的…...

python如何读取文件

这里的文件是txt文件&#xff0c;office文件不支持。 假如有一个pi_digits的txt文件&#xff0c;里面的内容是“3.1415926” 如果要读取这个文件的内容&#xff0c;需要调取pathlib模块&#xff0c;并把路径告知python。同时python文件必须要和目标读取文件在一个文件夹里。 …...

InnoDB和MyISAM存储引擎

InnoDB mysql默认存储引擎 支持事务&#xff0c;行级锁&#xff08;并发量大&#xff09;&#xff0c;外键约束&#xff0c;容量大&#xff0c;支持缓存&#xff0c;支撑主键自增&#xff0c; 全文检索&#xff0c;不存储表的总行数&#xff0c;需要sql逐行统计 MyISAM 不…...

DataGrip 2023:让数据库开发变得更简单、更高效 mac/win

JetBrains DataGrip 2023是一款功能强大的数据库IDE&#xff0c;专为数据库开发和管理而设计。通过DataGrip&#xff0c;您可以连接到各种关系型数据库管理系统(RDBMS)&#xff0c;并使用其提供的一组工具来查询、管理、编辑和开发数据库。 DataGrip 2023软件获取 DataGrip 2…...

突破编程_C++_设计模式(命令模式)

1 命令模式的基本概念 C 命令模式是一种设计模式&#xff0c;它允许将请求封装为一个对象&#xff0c;从而可以用不同的请求对客户进行参数化&#xff1b;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。命令模式的主要目的是将请求封装为对象&#xff0c;从而可…...

LeetCode102题:二叉树的层序遍历(python3)

代码思路&#xff1a;使用队列先进先出的特性&#xff0c;queue[]不为空进入for循环&#xff0c;tmp存储每层的节点&#xff0c;将结果添加至res[]中。 python中使用collections中的双端队列deque()&#xff0c;其popleft()方法可达到O(1)时间复杂度。 class Solution:def lev…...

linux服务器保存git账号密码命令

1.保存git账号密码 git config --global credential.helper store 2.查看git账号密码 cd回车 ls -a cat .git-credentials 步骤: 先输入 git config --global credential.helper store 然后进入代码目录&#xff0c;git pull 会提示输入git账号、密码&#xff0c;因为我们提前输…...

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的田间杂草检测系统(深度学习模型+UI界面+Python代码+训练数据集)

摘要&#xff1a;开发用于田间杂草识别的系统对提高农业运营效率和提升作物产出至关重要。本篇文章详尽阐述了如何应用深度学习技术开发一个用于田间杂草识别的系统&#xff0c;并附上了完备的代码实现。该系统基于先进的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5…...

java Lambda表达式如何支持静态方法引用

java Lambda表达式如何支持静态方法引用 在Java中&#xff0c;Lambda表达式支持静态方法引用&#xff0c;允许你直接使用静态方法作为Lambda表达式的实现。静态方法引用使用类名和方法名来引用静态方法。 下面是一个简单的示例&#xff0c;展示了如何在Lambda表达式中使用静态…...

SpringMVC04、Controller 及 RestFul

4、Controller 及 RestFul 4.1、控制器Controller 控制器复杂提供访问应用程序的行为&#xff0c;通常通过接口定义或注解定义两种方法实现。控制器负责解析用户的请求并将其转换为一个模型。在Spring MVC中一个控制器类可以包含多个方法在Spring MVC中&#xff0c;对于Contr…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...