-
Notifications
You must be signed in to change notification settings - Fork 9
database
Heroku はフル機能の Postgres データベース をアプリケーションに提供します。
複数のデータベースパッケージをフォームで選べますし、 プランはいつでも変更できます。 Heroku はプランに関係なく冗長性とフェイルオーバーの機能を提供します。 全てのデータベースは継続的プロテクションという特徴を持っています。
複数の Postgres データベースを1つの Heroku アプリケーションに割り当てられます。 いずれのデータベースを選んでもデータベースは常に守られ、 データはあなたのアプリケーションからのみアクセスできます。
開発用もしくは製品用のデータベースを選択できます。
Heroku Postgres 開発用プランは旧式の共用データベースシステムから置き換わりました。 開発用プランは、Postgres 9.1 で製品用プランと概ね同等の特徴を持っています。 しかし、開発もしくはステージング環境を目的としたものです。
新しいアプリケーションを作るときは自動で開発用データベースがインストールされます。 もし、アプリケーションに DATABASE_URL が定義されていない場合は、 トラブルシューティングを読んでください。
製品プランは、スケールアプリケーションに最適です。 製品データベースは、共用データベースに無い多くの特徴を持っています。 それは直接アクセス(psql もしくは native postgres library 経由の)、 ストアドプロシージャ、Postgres 9.1 のサポート等です。
プランの変更は、ユーザの管理プロセスとして マイグレーションフォームから簡単にできます。
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.
全てのビルドパックで開発用データベースが標準提供されるわけではありません。 しかし、いつでも追加できます。
もし開発用データベースが無かった場合、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
:::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.
:::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.
:::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.