猫史档案馆


【神奇代码岛】从SQLite升级到PostgreSQL

用户:幻想一笑而过幻想一笑而过查看:6 回复:9 评论:6 创建时间:2021-07-22T22:16:38


为什么要用PostgreSQL

使用SQLite数据库时, 有时因为人太多, 同一个游戏自动开了2服3服,多个服务器对同一个db文件写入引发了disk image malformed的问题, 造成了玩家群体存储时的3种情形:

虽然目前来说, 只有非常受欢迎的地图才会引发这个问题, 但越来越多玩家抱怨自己的游戏存档数据莫名丢失, 技术人员意识到SQLite的这个缺陷后, 决定使用设计上更可靠的PostgreSQL数据库 (简称pg) 替代它.

PostgreSQL与SQLite在我们使用时的差别

pg和SQLite的语法大致相近, 但还是有些差别:

  1. pg的字段名默认会强制转化成小写, 比如userKey会被当成userkey, 用到大写字母的名称要用""包住才行, 例如"userKey" . 建议所有字段名/表名, 无论大小写都用""包住
  2. 有时地图启动后, pg还未启动, 需要轮询等待pg到位
  3. pg有时因为各种原因短暂下线, sql会执行不成功(比如query timeout), 需要轮询执行sql语句确保语句在数据库到位后继续执行
  4. pg的INT整数字段有严格的位数限制, 超过上限将报错, 像1e+53这样的数值是存不进去的, 存进去之前先要把数值限制到有效数值范围(2147483喵7以下)
  5. pg的INT整数字段还有另一个限制, 就是不能输入带有小数点的数字, 比如3.14这样的数字存进去会报错, 需要用Math.floor()把数值转成整数3再存入
  6. pg里的字符串只能用’'包住, 不能用""包住, ""在pg只用于支持大写名称
  7. 如果用到BIGINT类型, 它返回的是字符串而非数字, 在读取时需要用parseInt()转换回js里的整数


回复

上一页1 页 / 共 1下一页
幻想一笑而过幻想一笑而过

【常见问题】
1.其他的地图能升级数据库吗?
答:暂时不能,需由官方操作内测升级的地图,才可用新的代码,没喵作过的地图无法使用新代码,所以教程不要传播出去哦~另外,大家近期新创作的地图依然是使用老版数据库
2.什么时候其他地图也能升级pg数据库?
答:这次大家手动升级后,后续将再观察一段时间,数据库稳定,将会正式发布新的数据库以及教程(会有通知),所以在此之前大家可先操作本次升级的地图,先学好代码格式
3.怎么查看自己的地图是否可以使用新的数据库代码?
答:升级后,编辑器的【设置】,这里的数据库引擎写的是pg的,也就意味着这个地图需要新的数据库代码,之前的旧数据库的代码需要改成新的才能发布审核

点赞0


评论


幻想一笑而过幻想一笑而过

点赞0


评论


KaNSFKaNSF

怎么升级数据库?

点赞0


评论


YDS尹子YDS尹子

??吉吉不是不允许公开的吗

点赞0


评论


async_functionasync_function

你咋公开了()

点赞0


评论


async_functionasync_function

对了()还记得你的帖子吗()30秒的那个好像一笑而过()

点赞0


评论


该账号已被封禁该账号已被封禁

吉不允许公开啊喵

点赞0


评论


高贵的木叶龙A35d高贵的木叶龙A35d

看的一脸懵逼(我到现在连SQLite都不会

 

点赞0


评论


ZCH编程小贝壳ZCH编程小贝壳

感觉pg比sql难(e xin)不少……

点赞0


评论