pgsql 迁移到mysql所遇到的坑

最近由于工作的原因,需要将一个开源项目的数据库从pgsql迁移到mysql, 特此记录下所要注意的点, 后续不断更新

  1. MySQL timestamp 类型没有with time zone
  2. pgsql 创建索引的时候没有索引名称,使用下述命令 create index xxxx
  3. MySQL并不支持创建 type Enum create type xxx Enum('', '', '')
  4. pgsql 可以使用一些特殊的名称创建 table name 以及 column name, 但是mysql 不行(i.e. key(column), value(column), Lock(table)
  5. 通过with xxx创建临时表, 在mysql中无法在里面使用insert 语句,反之 pgsql可以
  6. 在使用golang, 访问两者的数据库的时候.
  • MySQL 使用作为占位符,缺点是无法复用,并且无法作为identifiers(i.e.select ? from xxx
  • pgsql 使用$1,$2作为placeholder, 可以在语句中多出复用, 并且可以作为 identifiers 作用于select 后面

ps: pgsql可以使用如下方式在插入中查询当前要插入的值是否已经存在,并返回新插入的值 or 已存在的数据的id返回(MySQL 并不支持)

		WITH new_namespace AS (
			INSERT INTO Namespace(name, version_format)
			SELECT CAST($1 AS VARCHAR), CAST($2 AS VARCHAR)
			WHERE NOT EXISTS (SELECT name FROM Namespace WHERE name = $1)
			RETURNING id
		)
		SELECT id FROM Namespace WHERE name = $1
		UNION
		SELECT id FROM new_namespace
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值