这一变化使得许多开发者争相用其他免费服务来取代Heroku提供的服务。虽然CockroachDB不能取代Heroku的免费层所提供的一切,但希望取代Heroku提供的免费云Postgres数据库的开发者已经可以在CockroachDB serverless中获得一个很好的替代品,这是一个永远免费的云数据库,实际上比Heroku Postgres提供了一些主要优势。
为什么要转移到CockroachDB?
它有一个慷慨的免费层
Heroku Postgres的免费层,当它存在的时候,提供了一个免费的云Postgres实例,但它有相当多的限制。其中包括:最大存储限制为1GB,最大行数为10,000。
CockroachDB的无服务器层提供的服务要多得多,允许5GB的免费存储空间,并且没有行数限制。免费用户的最低性能保证为每秒100个请求单位,每月还有1000万个请求单位的 "爆发能力"--足以免费在生产中运行许多小型应用。
CockroachDB无服务器还提供更灵活的付费计划,以便在需要这种性能水平的时候使用。Herkou只提供预定义的订阅层级(其中只有一个层级的月费低于50美元),而CockroachDB无服务器允许用户为他们的集群设置一个自定义的月支出限额,并根据他们的使用情况,每个月支付最高(但绝不超过)的金额。
它很容易扩展
由于CockroachDB是一个云原生分布式数据库,它是为自动扩展而建立的,而Postgres从来没有这样做过。Heroku Postgres的扩展依赖于主动-被动配置,而CockroachDB是主动-被动的,无服务器数据库会根据使用情况和你预设的支出限额自动扩大和减少。
更多关于CockroachDB与Postgres的比较,请查看这篇博文,它深入挖掘了一些细节。
如何使用pg_dump从Heroku Postgres导出数据库
值得庆幸的是,从Heroku导出Postgres数据库并将其导入CockroachDB无服务器并不复杂。有很多方法可以做到这一点,但在这篇文章中,我们将重点介绍使用pg_dump 和psql ,许多Postgres用户可能已经熟悉这种方法。
注意,Heroku不建议将pg_dump用于导出大于20GB的数据库。如果你是Heroku的免费用户,这并不重要--Heroku的免费账户被限制在1GB的数据库存储空间。但是,如果你是付费用户,有一个更大的数据库,你应该遵循这些步骤,而不是下面的内容。
第一步:创建Heroku Postgres数据库的备份
第一步是通过运行下面的命令来创建数据库的备份,将example-app ,替换为我们计划导出的数据库的应用名称。
heroku pg:backups:capture --app example-app
第二步:下载备份
一旦我们创建了备份,我们就可以用download命令下载它。
heroku pg:backups:download --app example-app
这将下载一个.dump文件,我们将导入该文件以在CockroachDB serveless上设置我们的数据库。我们可以使用pg_restore ,快速将其转换为.sql文件(将下面的路径和文件名分别替换为.sql和.dump文件的理想和实际路径和文件名)。
pg_restore -f /path/file.sql /path/file.dump
如何使用psql将数据库导入到CockroachDB无服务器中?
第三步:创建一个CockroachDB云账户
注意:如果你已经有一个CockroachDB云账户,并且熟悉启动和访问免费无服务器集群的过程,你可以直接跳到第6步。
要开始,我们需要创建一个免费的CockroachDB云账户。有几个单点登录选项(谷歌、Github和微软)可供选择,我们也可以用电子邮件地址创建一个账户。
第四步:启动一个免费的无服务器集群
一旦账户创建完成,登录并导航到集群页面。我们将点击 "创建集群 "按钮,然后选择我们喜欢的选项,包括:
- 无服务器或专用 - 对于免费账户,我们将需要选择无服务器。
- 云提供商 - AWS或GCP,都是不错的选择
- 地区 - 我们建议选择地理上最接近的可用地区
- 支出限额--为了创建一个免费账户,我们将把这个设置为0美元。(注意,如果你设置了更高的支出限额,你仍然可以免费获得5GB的存储空间和2.5亿个请求单元(计算),你只需要为你在特定月份使用超过免费限额的部分付费。)
- 集群名称--将生成一个默认的名称,但如果需要,我们可以定制它。
一旦我们选择了我们的选项,我们将点击 "创建你的免费集群",并等待5-10秒来创建该集群。
第五步:获取连接字符串
一旦集群被创建,就会出现一个连接窗口,它将提示我们创建一个SQL用户名,为该用户生成一个密码--把它保存在安全的地方,我们很快就会需要它--然后提供各种选项来连接到数据库。
在本教程中,我们需要的是一般的连接字符串,它可以在连接窗口的 "选择语言/选项>一般连接字符串 "下找到。
它看起来像这样(但用户名、密码、数字等将是我们刚刚创建的集群所特有的)。
postgresql://username:password@free-tier11.gcp-us-east1.cockroachlabs.cloud:00000/defaultdb?sslmode=verify-full&options=--cluster%3Dcluster-name-0000
我们需要做的就是把这个字符串复制到安全的地方,然后我们就可以进行下一步了。
第六步:使用psql将文件导入CockroachDB
虽然有很多方法可以将数据导入CockroachDB,但我们将重点介绍一种使用你可能已经熟悉的工具。psql.
(如果你还没有安装psql ,你可以运行brew install libpq ,然后brew link brew link --force libpq ,让它在Mac上设置并准备好。在任何系统上安装Postgres也会安装psql ,所以你可以按照说明在任何系统上下载Postgres,你应该可以使用了)。
一旦psql ,我们就可以从命令行中运行以下命令的一个版本:
psql 'your-connection-string-here' -f /path/file.sql
为了使其发挥作用,我们需要用我们的连接字符串(在单引号内)替换your-connection-string-here ,用我们在步骤2中从Heroku下载的.sql文件的正确文件路径替换/path/file.sql 。下面是一个完整命令的例子。
psql 'postgresql://username:password@free-tier11.gcp-us-east1.cockroachlabs.cloud:26257/defaultdb?sslmode=verify-full&options=--cluster%3Dcluster-name-0000' -f /Users/username/Downloads/file.sql
运行这个命令将连接到我们的CockroachDB无服务器数据库,然后执行.sql文件的内容,将我们的表和数据导入到新的CockroachDB数据库。
疑难解答
根据你的数据库的具体模式,你可能在导入时遇到一些错误,需要调整模式。例如,在编写本教程时,我们遇到了一个与我们从Heroku应用中导出的数据库中的编码有关的错误。从我们的.sql文件的顶部删除一行SET client_encoding = 'LATIN1'; ,使我们避免了错误,并成功导入了数据。
我们不能为如何调整每一种可能的模式提供分步指导,但如果你确实遇到了错误,你从CockroachDB得到的错误信息应该为你指出正确的方向,即在.sql文件中需要改变什么。
我们也有一个社区Slack,里面有很多人愿意提供帮助,所以如果你遇到了一些你无法解决的问题,请**跳到Slack上**,我们会帮你解决的。
另外,请注意,我们即将推出的东西将使这个过程更加简单。请关注我们的社交媒体渠道,以获得相关的更新信息。
关于数据库名称的简短说明
上述说明将把数据导入CockroachDB的无服务器数据库,名为defaultdb 。这对于测试和实验是没有问题的。如果要在生产中使用,我们可能要在导入前创建一个不同的数据库来使用,或者在导入后重命名defaultdb。
如果我们想先创建一个不同的数据库,我们可以使用psql ,连接到我们的无服务器集群。
psql ‘your-connection-string-here’
然后运行CREATE DATABASE 命令。
然后我们可以使用\q退出psql,并运行上面的导入说明,将连接字符串中的defaultdb 替换为我们刚刚创建的数据库的名称,像这样。
psql 'postgresql://username:password@free-tier11.gcp-us-east1.cockroachlabs.cloud:26257/testdb?sslmode=verify-full&options=--cluster%3Dcluster-name-0000' -f /Users/username/Downloads/file.sql
就这样了!
恭喜你!你已经导入了你的Heroku Post Post。你已经把你的Heroku Postgres数据库导入到CockroachDB无服务器。在你的应用程序中修改适当的连接信息,以指向你的新CockroachDB集群--这里有各种语言的快速入门说明--然后你就可以开始运行了