Postgresql数据库
(一)为何使用Heroku Postgresql?
Heroku上运行的最老最流行的插件是Postgresql数据库。在如下场景你可能需要用到它:
- 你的应用需要一个关系型数据库
- 你不想关注宕机时间和数据丢失(因为heroku完全管理它们)
- 你需要随时扩展Postgresql数据库,包括:
– 创建从库
– 创建数据库快照以供测试
– 升级或降级数据库容量,以适应应用规模的变化
– 秒级支付,付你所需
- 你需要随时备份和恢复数据库到任何地方,不被服务商所限制
- 你不是heroku的用户,但仍想使用heroku的Postgresql数据库
NB地方在于,Heroku是世界上最大的Postgresql服务提供商,专注于安全和性能。
(二)创建数据库
如下示例将创建一个免费的共享Postgresql数据库:
$ heroku addons:add heroku-postgresql:dev Adding heroku-postgresql:dev to myproject... done, v27 (free) Attached as HEROKU_POSTGRESQL_BLACK
如果创建一个大型的付费数据库,执行如下命令:
$ heroku addons:add heroku-postgresql:crane Adding heroku-postgresql:crane to myproject... done, v28 ($50/mo) Attached as HEROKU_POSTGRESQL_IVORY The database should be available in 3-5 minutes Use ‘heroku pg:wait‘ to track status Use ‘heroku addons:docs heroku-postgresql:crane‘ to view documentation
验证数据库存在,运行pg:info命令:
$ heroku pg:info === HEROKU_POSTGRESQL_BLACK Plan: Dev Status: available Connections: 1 PG Version: 9.1.5 Created: Data Size: Tables: Rows: Fork/Follow: Unavailable 2012-08-29 17:46 UTC 6.0 MB 1 0/10000 (In compliance) === HEROKU_POSTGRESQL_IVORY Plan: Status: Data Size: Tables: PG Version: ? Fork/Follow: Temporarily Unavailable Created: 2012-08-29 17:46 UTC Maintenance: not required
如上,我的应用现在拥有了两个数据库,一个免费版本,一个付费版本。
请注意:免费版本和付费版本数据库有一些区别,包括:
- 免费版本即时创建,没有延时(本质上就是在已有数据库里创建一个新的DB),然而付费数据库实例是在线创建,需要一些时间生效。
- 免费数据库有限制,比如存储数据的数量,然而付费的没有限制,你买多少用多少。
(三)访问数据库
执行如下命令连接到数据库:
$ heroku pg:psql HEROKU_POSTGRESQL_BLACK psql (9.1.5) SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256) 22 Chapter7. PostgreSQLPatterns The Heroku Hacker’s Guide, Release 1.0 Type "help" for help. dbname=>
使用psql工具,可以直接连到新的数据库以确认它是否正常。
请注意:psql命令需要先在本机安装,它来自官方postgresql-client软件包。
如果检查环境变量,会发现新的数据库设置好了:
$ heroku config === myproject Config Vars ... HEROKU_POSTGRESQL_BLACK_URL: postgres://user:password@host:port/db HEROKU_POSTGRESQL_IVORY_URL: postgres://user:password@host:port/db
这意味着你的应用可以读取环境变量,并且连接到新的数据库。
假如你只使用了一个数据库,就还可以简化代码。即所谓约定大于配置,通过访问固定的DATABASE_URL环境变量来连接数据库。在访问DATABASE_URL之前,需要将现有的数据库URL提升为这个固定值。执行如下命令:
$ heroku pg:promote HEROKU_POSTGRESQL_BLACK Promoting HEROKU_POSTGRESQL_BLACK to DATABASE_URL... done
现在再检查环境变量,会发现DATABASE_URL和HEROKU_POSTGRESQL_BLACK_URL是相等的。
(四)销毁数据库
删除数据库执行如下命令:
$ heroku addons:remove HEROKU_POSTGRESQL_BLACK ! WARNING: Potentially Destructive Action ! This command will affect the app: myproject ! To proceed, type "myproject" or re-run this command with --confirm myproject > myproject ----> Removing HEROKU_POSTGRESQL_BLACK from myproject... done, v30 (free)
Heroku是秒级支付,数据库实例删除后,就不再被计费。