我们正在构建一个API,该API当前公开数据库主键以选择参数。我担心pg_dump(以及基于它的Heroku pgbackups)显然不备份主键。 (见Postgres pg_dump dumps database in a different order every time)
如果我需要升级我们的数据库或将其复制到暂存,我可以使用Heroku跟随者或分叉功能并保留主键。 (见https://devcenter.heroku.com/articles/heroku-postgres-follower-databases和https://devcenter.heroku.com/articles/heroku-postgres-fork)。但是,导出要在开发中使用的数据库会丢失排序(请参阅https://devcenter.heroku.com/articles/heroku-postgres-import-export)。
所以,如果我无法备份它们,Is it a bad idea to use a database table's ID as an external API identifier?
我是否应该考虑在每个参数表上创建一个UUID列并将其公开? (见http://www.codinghorror.com/blog/2007/03/primary-keys-ids-versus-guids.html)
我发现像/ v1 / products?category = 14,16& partner = 3& q = plaid这样的网址更容易让开发人员使用,但是我担心我会因为太难而把自己锁定在Heroku中迁移。
提前感谢您的建议。
答案 0 :(得分:2)
我担心pg_dump(以及基于它的Heroku pgbackups) 显然不备份主键。
不要担心。当然他们得到了备份。这不是链接项目所说的内容。
该项目表示无法保证行被转储的顺序。这并不意味着(id = 1,name =“fred”)将丢失(id = 1),只是它可能没有作为第一项列出(在备份文件中)。海报关心的唯一原因是因为他试图将备份文件作为文本进行比较。