盘点一下PostgreSQL和MySQL的区别点

这篇具有很好参考价值的文章主要介绍了盘点一下PostgreSQL和MySQL的区别点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上期有说,数据环境切换,由MySQL换成PostgreSQL。
那么为了大家以后少踩坑,简单总结了下我曾踩过的坑和需要注意的点。
首先PostgreSQL有一个模式的概念。
一、格式区别:

和Oracle一样,PostgreSQL也是严格区分大小写。

二、符号区别:

和Oracle一样PostgreSQL中," " 双引号是区分库名,关键字等,而MySQL则是反单引号(tab键上方的键),pg查询时字符类型的字段必须使用单引号,而MySQL带有优化器(不是必须)。

三、自增区别:

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)
盘点一下PostgreSQL和MySQL的区别点
点击序列
盘点一下PostgreSQL和MySQL的区别点
可以通过可视化界面新建序列
盘点一下PostgreSQL和MySQL的区别点
注:同步数据的话,推荐通过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

④删除类型转化:

DROP CAST (varchar as bigint); DROP CAST (bigint as varchar);文章来源地址https://www.toymoban.com/news/detail-453258.html

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

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

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

相关文章

  • Same Symbol | 哇咔咔!!!盘点一下表达矩阵中重复基因的处理方法!~

    医院天天叫我们填问卷,我真是不能理解。🫠 动不动就问我们对医院的福利满意吗,对自己的收入满意吗,觉不觉得工作负荷太重了???🙂 我们满不满意,觉不觉得累,医院心里没点数吗!?~~~🤒 不能再说了,再说我的号就要被河蟹掉了。🥸 今天的教程是相对比较基

    2024年02月06日
    浏览(33)
  • 前端做了快零年了,盘点一下我的前端技术栈(快乐抄袭^_^)

    刚刚看了这篇文章:前端做了快两年了,盘点一下我的前端技术栈 - 掘金 (juejin.cn) 很火的样子 我也来蹭个热点吧 原文这位博主是刚毕业,我是今年六月要毕业,正在找工作,大概各方面的见解要更差一些(毕竟是来蹭热点的) 前端: Vue、React、Nuxt、TS、小程序、UniAPP、原生

    2024年02月22日
    浏览(34)
  • 【数据库】PostgreSQL中的DISTINCT ON和DISTINCT的区别

    在数据库查询中,我们经常会遇到需要去除重复数据的情况。在PostgreSQL中,我们可以使用DISTINCT和DISTINCT ON来实现这个目标。那么,它们之间有什么区别呢?本文将详细介绍这两种方法的用法、区别以及适用场景。 DISTINCT是SQL中的一个,用于从查询结果中去除重复的行

    2024年02月03日
    浏览(43)
  • 超全mysql转换postgresql数据库方案

    写在前文: 近期由于公司业务产品发展需要,要求项目逐渐国产化:(1)项目国产操作系统部署;(2)数据库国产化;国产数据库最终选型为highgo(瀚高),该数据库基于pg开发,所以要求先将mysql适配到postgresql数据库; 1.1.1 镜像拉取 dockerhub官网选取自己想安装的版本(

    2024年02月06日
    浏览(63)
  • postgresql|数据库|MySQL数据库向postgresql数据库迁移的工具pgloader的部署和初步使用

    MySQL数据库和postgresql数据库之间的差异并不多,这里的差异指的是对SQL语言的支持两者并不大,但底层的东西差异是非常多的,例如,MySQL的innodb引擎概念,数据库用户管理,这些和postgresql相比是完全不同的(MySQL用户就是用户,没有角色,postgresql有用户,有角色,但差异不

    2024年02月14日
    浏览(81)
  • Navicat 连接远程数据库 Postgresql、MySQL

    不管什么数据库,只要用Navicat连接远程,下面的方法均奏效。 环境: 服务器:远程服务器 操作系统: : linux 数据库:PostgreSQL14 数据库客户端:Navicat 主要分为两步: 第一步:点击Navicat左上角的“连接”,选择Postgresql。先连接SSH服务器。  勾选“使用SSH通道”,在下面输

    2024年02月05日
    浏览(61)
  • 分享一下Postman连接MySQL数据库的操作步骤,从安装开始讲起

    我们有时候做Postman接口测试时,需要操作数据库,比如:查询、新增、更新、删除数据等。这时就需要连接数据库,以MySQL数据库为例子,根据自己的总结,分享一下Postman连接数据库,以及对数据库中数据的操作步骤。 Postman要连接MySQL数据库,需要先安装xMySQL,并启动xMyS

    2023年04月08日
    浏览(43)
  • Postgresql中的表结构和数据同步/数据传输到Mysql

    Postgresql中的某个表,需要连同表结构以及表数据同步一次到Mysql数据库中。 一种方式是在Postgresql中将表sql导出,然后修改sql文件语法,再导入到mysql中。 但是这种方式过于复杂,可以借助于Navicat等工具。 如果是使用Navicat进行结构同步和数据同步时,需要两边是同类型的数

    2024年02月13日
    浏览(44)
  • 利用pgloader工具将MySQL数据迁移至PostgreSQL数据库

    一、简介 pgloader是一款开源软件,可以将各种来源的数据加载到PostgreSQL数据库中,支持动态读取数据,使用 COPY 流式传输协议将数据加载到 PostgreSQL 数据库中,并使用单独的线程读取和写入数据,由于能够直接从源数据库加载数据。今天我们就借助pgloader这款工具实现将MySQL数

    2024年02月13日
    浏览(55)
  • 谈一谈SQLite、MySQL、PostgreSQL三大数据库

    每一份付出,必将有一份收货,就像这个小小的果实,时间到了,也就会开花结果… SQLite、MySQL 和 PostgreSQL 都是流行的关系型数据库管理系统(RDBMS),但它们在功能、适用场景和性能方面有一些不同。 SQLite : 轻量级 : SQLite 是一个嵌入式数据库,它不需要一个独立的数据库

    2024年02月05日
    浏览(60)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包