pg数据库和mysql区别

这篇具有很好参考价值的文章主要介绍了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 b

PostgreSQL: 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
   *
   FROM
   infisa_medical_report
   WHERE is_deleted=0 AND status = 1 AND name LIKE concat('%',#{handleTask.name},'%')
</select>

PostgreSQL:

<select id="checkReportPage" resultMap="reportResultMap">
   SELECT
   *
   FROM
   infisa_medical_report
   WHERE 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

④删除类型转化:文章来源地址https://www.toymoban.com/news/detail-838901.html

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

到了这里,关于pg数据库和mysql区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用docker部署pg数据库

    使用 Docker 部署 PostgreSQL 数据库是一种常见的做法,它提供了方便、可移植和可重复的方式来运行数据库。下面是一个简单的示例,用于在 Docker 中部署 PostgreSQL 数据库: 首先,确保您已经安装了 Docker 并正确配置了 Docker 环境。 打开终端或命令提示符,并执行以下命令来下载

    2024年02月10日
    浏览(47)
  • Flink CDC实时同步PG数据库

    JDK:1.8 Flink:1.16.2 Scala:2.11 Hadoop:3.1.3 github地址:https://github.com/rockets0421/FlinkCDC-PG.git  1、更改配置文件postgresql.conf # 更改wal日志方式为logical wal_level = logical # minimal, replica, or logical # 更改solts最大数量(默认值为10),flink-cdc默认一张表占用一个slots max_replication_slots = 20 # m

    2024年02月13日
    浏览(63)
  • 【PostgreSQL】连接pg数据库Schema切换

    由于PostgreSQL数据库模式(schema)存在多个,原先的表单是默认采用public但是查询表和字段时候有查询所有未进行过滤,导致数据库连接失败、查表字段也为空(空即查询服务端异常错误) 数据库连接配置 添加参数补充 ?currentSchema=dwd 譬如: username=root;password=XXXX;url=jdbc:postg

    2024年02月11日
    浏览(50)
  • openGauss数据库pg_xlog爆满问题解决

    最近有一个之前搭的环境登不上了,好久没用想拿来测试的时候发现启动不了。启动时报错: [Errno 28] No space left on device query也不行了,提示没有空间了。 查询磁盘使用情况 df -h ,果然100% 这个环境当时安装的是主备,看了下备库的服务器,发现不知道啥时候已经被删库了,

    2024年02月02日
    浏览(51)
  • PG数据库实现bool自动转smallint的方式

    语法: DROP FUNCTION IF EXISTS your_schema_name.function_name(arg_type1, arg_type2) CASCADE RESTRICT; 实例: DROP FUNCTION IF EXISTS platformyw.boolean_to_smallint(bool) CASCADE RESTRICT; 语法: SELECT * FROM information_schema.routines WHERE routine_catalog={you_catalog_name} and routine_schema={you_schema_name} and routine_name ={you_func_name} and

    2024年02月01日
    浏览(50)
  • 使用pg_prewarm缓存PostgreSQL数据库表

    pg_prewarm 直接利用系统缓存的代码,对操作系统发出异步prefetch请求,在应用中,尤其在OLAP的情况下,对于大表的分析等等是非常耗费查询的时间的,而即使我们使用select table的方式,这张表也并不可能将所有的数据都装载到内存中,而pg_prewarm的功能就是完成一个张表全部进入

    2024年02月14日
    浏览(44)
  • 达蒙数据库:本地编码:PG_GBK, 导入文件编码:PG_UTF8错误解决

    在windows使用达梦管理工具导入.dmp文件时出现该错误 问题解决: 1、找到DM数据库的安装路径的bin 目录下 cmd 进入终端 2、输入命令行 使用dimp工具进行导入,最后需要加上FULL=Y是表示整个表格导入,但是中间可能会出现报错

    2024年02月06日
    浏览(65)
  • PG-DBA培训04:PostgreSQL数据类型与数据库设计规范

    一、风哥PG-DBA培训04:PostgreSQL数据类型与数据库设计规范 本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQL数据库SQL开发与应用实战阶段之PostgreSQL数据类型与数据库设计规范,学完本课程可以掌握PostgreSQL SQL语句基础讲解,PostgreSQL SQL语言基础知识,安

    2024年02月11日
    浏览(56)
  • 【MySQL】数据库中这么多数据类型你真的了解吗?一文看懂不同数据类型有何区别

    创建表t1,将name列数据类型设置为要tinyint 插入属性值:由于这里是tinyint类型,取值范围是【-128–127】,当插入这个范围内的数据显示成功,范围之外失败 使用tinyint unsigned类型创建表t2 无符号类型取值范围【0,255】,这点与C/C++一样 2.1.1 小结 MySQL对于数据类型不合法行为采

    2024年02月13日
    浏览(40)
  • SQL Server、MySQL和Oracle数据库分页查询的区别与联系

    摘要:本文将通过一个现实例子,详细解释SQL Server、MySQL和Oracle这三种常见关系型数据库在分页查询方面的区别与联系。我们将提供具体场景下的SQL语句示例,并解释每个数据库的分页查询用法以及优化方法,帮助读者更好地选择适合自己需求的分页查询方式。 假设我们有一

    2024年02月11日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包