Skip to content
toydev edited this page Sep 8, 2012 · 12 revisions

原文


Postgres

Heroku はフル機能の Postgres データベース をアプリケーションに提供します。

複数のデータベースパッケージをフォームで選べますし、 プランはいつでも変更できます。 Heroku はプランに関係なく冗長性とフェイルオーバーの機能を提供します。 全てのデータベースは継続的プロテクションという特徴を持っています。

複数の Postgres データベースを1つの Heroku アプリケーションに割り当てられます。 いずれのデータベースを選んでもデータベースは常に守られ、 データはあなたのアプリケーションからのみアクセスできます。

開発用と製品用

開発用もしくは製品用のデータベースを選択できます。

Heroku 開発用データベース

Heroku Postgres 開発用プランは旧式の共用データベースシステムから置き換わりました。 開発用プランは、Postgres 9.1 で製品用プランと概ね同等の特徴を持っています。 しかし、開発もしくはステージング環境を目的としたものです。

新しいアプリケーションを作るときは自動で開発用データベースがインストールされます。 もし、アプリケーションに DATABASE_URL が定義されていない場合は、 トラブルシューティングを読んでください。

Heroku 製品用データベース

製品プランは、スケールアプリケーションに最適です。 製品データベースは、共用データベースに無い多くの特徴を持っています。 それは直接アクセス(psql もしくは native postgres library 経由の)、 ストアドプロシージャ、Postgres 9.1 のサポート等です。

マイグレーション

プランの変更は、ユーザの管理プロセスとして マイグレーションフォームから簡単にできます。

データベースに接続し、利用するための URL

Heroku アプリケーションにインストールしたデータベースは、 データベース接続用のユニークな URL を持っています。 データベースの URL は postgres://username:password@host:port/database_name という形式です。

URL は config vars で見れます。 標準の共用データベースの config var 名は、HEROKU_POSTGRESQL_COLOR_URL です。

さらにアプリケーションは DATABASE_URL という config var を持っています。 これはあなたの標準のデータベースの URL です。 heroku pg:promote コマンドで DATABASE_URL の値を変更できます。

言語仕様リファレンス

postgres に接続する方法は、サポートする言語ごとに異なるため以下を参照のこと:

バックアップ

PG Backups アドオンは、データベースバックアップの保存と管理を簡単にしてくれます。

インポートとエクスポート

インポートデータにはオプションがたくさんあります。 詳細は Heroku Postgres へのインポートデータの記事を参照して下さい。 データのエクスポートは、PG Backups アドオンの利用を推奨します。

パフォーマンス

※ この節が何を意図して書かれた内容なのか良くわからないので翻訳を放棄します。誰かわかる人居たら翻訳お願いします。

Database performance on Heroku is measured by connections, memory, and CPU Units. Connections are the number of processes (dynos + workers + external connections) which can connect to a database simultaneously. Memory is the amount of physical RAM available to your database; loading your entire database into memory offers significant performance advantages. CPU Units are a measure of the the processor speed and overall IO performance of the underlying machine.

Note that CPU units are only one measure of database performance. Regardless of which database you choose, each dyno is its own independent grid process.

リファレンス

トラブルシューティング

開発用データベースもしくは DATABASE_URL が無い場合

全てのビルドパックで開発用データベースが標準提供されるわけではありません。 しかし、いつでも追加できます。

もし開発用データベースが無かった場合、heroku addons を実行してもリストに出てきません。

:::term
$ heroku addons                                                                                                                                               
ssl:piggyback

addons:add を使い heroku-postgresql add-on を追加します。

:::term
$ heroku addons:add heroku-postgresql                                                                                                                          
----> Adding heroku-postgresql to sushi... done, v3 (free)
$ heroku addons --app high-moon-8678                                                                                                                                               
heroku-postgresql:dev
ssl:piggyback

Invalid operator

:::term
PGError: ERROR:  operator does not exist: character varying = integer

Cause: Postgres is more sensitive with data types than MySQL or SQlite. Postgres will check and throw errors when an operator is applied to an unsupported data type. For instance, you can't compare strings with integers without casting.

Solution: Make sure the operator is adequate for the data type.

Table doesn't exist

:::term
PGError: ERROR: relation "documents" does not exist

Cause: This is the standard message displayed by Postgres when a table doesn't exist. That means your query is referencing a table that is not on the database.

Solution: Make sure your migrations ran normally, and that you're referencing a table that exists.

Cannot change column type

:::term
PGError: ERROR: column "verified_at" cannot be cast to type "date"

Cause: Postgres doesn't know how to cast all the rows in that table to the specified type. Most likely it means you have an integer or a string in that column.

Solution: Inspect your records and make sure they can be converted to the new type.

Clone this wiki locally