データベース

Docker + Rails 6 + PostgreSQL による Web アプリケーション開発の始め方

要旨 Dockerを用いてRuby on Rails 6.0によるWebアプリケーション開発を行う手順をできるかぎり簡潔にまとめた。 Docker Composeを用いてデータベースサーバーのコンテナとWebサーバーのコンテナを管理する方法についても解説する。 対象OS macOS Mojave Ubu…

GCP/Ubuntu: Cloud SQL Proxy のセットアップ(追記あり)

先々月にGCP: 自動スケーリング時における Google Cloud SQL ホワイトリストの管理という記事を書きました。その続きです。 GCPのVMインスタンスからCloud SQLインスタンスへ接続するのにCloud SQL Proxyを使えばうまく行くんじゃないか、という考察で終わっ…

GCP: 自動スケーリング時における Google Cloud SQL ホワイトリストの管理

次のような条件でRuby on Railsアプリケーションを運用することにした。 プラットフォームは Google Cloud Platform (GCP)。 負荷状況により自動スケーリング(auto scaling)を行うためマネージドインスタンスグループを利用。 データベースは Google Cloud…

macOS/Homebrewで複数バージョンのPostgreSQLを共存させる方法(2018年版)

複数の PostgreSQL クラスタ(インスタンス)を起動するで書いたように Ubuntu 環境では、普通に apt-get でインストールするだけで複数バージョンのPostgresqlを共存させる状況が整います。 しかし、macOS/Homebrew 環境ではちょっとした準備作業が必要とな…

PostgreSQL: template1 のエンコーディングを UTF-8 に変更する

PostgreSQL におけるデータベース作成とは、既存のデータベースの複製を作ることです。デフォルトでは template1 という名前のデータベースが複製元となります。 さて、PostgreSQLのインストール直後に template1 のエンコーディングが SQL_ASCII になってい…

PostgreSQL: キャッシュした計画は結果型を変更してはなりません

PostgreSQL を用いた Rails アプリケーション開発で キャッシュした計画は結果型を変更してはなりません あるいは cached plan must not change result type というエラーメッセージに遭遇することがある。 解決法は簡単で、Rails サーバーを再起動すればよ…

PostgreSQL: ポイントインタイムリカバリ(PITR) と Transaction ID

PostgreSQL の「ポイントインタイムリカバリ(PITR)」について調べていて、ドキュメントの中に気になる記述を見つけた。 もし以前のある時点まで復旧させたい場合(例えば、経験不足のデータベース管理者が主トランザクションテーブルを消去した直前)、rec…

PostgreSQL のアップグレード時に明らかになる pg_wrapper の役割

PostgreSQL 9.5 のサーバーがデフォルトの 5432 番ポートで動いている状態で、PostgreSQL 9.6 のサーバーをインストールするとどうなるか。 $ apt-get install postgresql-9.6 結果。PostgreSQL 9.6 の main クラスタが 5433 番ポートで立ち上がる。 この状…

PostgreSQL: MySQL の SHOW CREATE DATABASE の代わりになるもの

私の知る限りにおいて、PostgreSQL のコンソールであるデータベースの CREATE DATABASE 文を知る方法はない。すなわち、MySQL コンソールの SHOW CREATE DATABASE コマンドに対応するコマンドはない。 しかし、代わりに次のようなコマンドを実行すればよい:…

PostgreSQL: 非特権ユーザーによる pg_dump と pg_restore

前提条件 ホスト palau の 50001 番ポートで PostgreSQL サーバが稼働している。 このサーバの非特権ユーザー alice がデータベース db0 と db1 を所有している。 alice のパスワードは bravo である。 db0 には複数のテーブルがある。ただし、スキーマは pu…

PostgreSQL 9.6: レプリケーションの設定(同期)

この記事は、PostgreSQL 9.6: レプリケーションの設定(非同期)の続きです。 同期レプリケーションモードへの移行 postgresql.conf (マスター側)の書き換え # sudo vim /etc/postgresql/9.6/cluster1/postgresql.conf synchronous_standby_names = 'clust…

PostgreSQL 9.6: レプリケーションの設定(非同期)

要点 MySQL 用語の「マスター」と「スレーブ」を、PostgreSQL 用語では「マスター」と「スタンバイ(standby)」と呼ぶ。 レプリケーションには「非同期(async)」と「同期(sync)」の区別がある。可用性を上げたいなら「同期」を選択する。 pg_basebackup…

複数の PostgreSQL クラスタ(インスタンス)を起動する

PostgreSQL のクラスタ(インスタンス)管理は、MySQL の mysql_multi よりも簡単。 以下、Ubuntu 16.04 で行ったトライアルの結果。 クラスタの作成 $ sudo pg_createcluster --port=54321 9.6 abc $ sudo pg_createcluster --port=54322 9.6 xyz sudo -u p…