Heroku黑客指南(七)

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是秒级支付,数据库实例删除后,就不再被计费。

此条目发表在Common分类目录,贴了, 标签。将固定链接加入收藏夹。