Ubuntu: init system を systemd から upstart に変える

Ubuntu 16.04 がインストールされている私の職場PCがハードディスクの故障で動かなくなり、修復のためにいろいろやっている過程で、 ブート時のメニューで「Ubuntu」を選んでも起動しない。 「Advanced options for Ubuntu」を選んでから「upstart」という文…

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

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

Phusion Passenger: permission denied で ruby を実行できない問題

問題 Rails あるいは Sinatra を Phusion Passenger で動かしている状況で、permission denied により ruby を実行できない。 解決策 (1) Rails なら config/environment.rb、Sinatra なら config.ru の持ち主が ruby を実行できるユーザーかどうかを確認し…

Rails: send_data/send_file でデータの中身がテキストとして表示される問題

問題 次のようなRailsのアクションにより files/example.pdf の中身をユーザーにダウンロードさせたい。 class FilesController < ApplicationController def show filename = 'example.pdf' path = Rails.root.join('files', filename) send_file(path, typ…

OmniAuth: ロードバランサ配下での redirect_uri_mismatch 問題

問題 最近、OmniAuthを使ってGithub経由でのユーザー認証機能を既存のRailsアプリに組み込んだ。 その際、開発環境ではすんなり動いたのだが、本番環境にデプロイすると redirect_uri_mismatch エラーが出てしまう。 解決法 config/initializers/omniauth.rb…

Ruby: case 式における何もしない else の扱い

先週末に WEB+DB PRESS Vol.99の「良いコード」を本気でコードレビューしてみた という興味深いブログ記事が書かれました。 はてなブックマークでのコメントを見ると、多くの人がブログ記事の内容に賛同しているようですが、「P12: 何もしないelseは必要か?…

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…