WAL-E で PostgreSQL の Backup / Restore

PostgreSQL の Backup / Restore ツールとして heroku で開発されたとされる WAL-E がある。
フィジカル(物理)バックアップと WAL のアーカイブを S3 互換のオブジェクトストレージや Azure BLOB Storage や Google Cloud Storage へ保存でき、そこからのリストアもできる便利ツールです。

AWS で EC2 上の PostgreSQL のバックアップ/リストアを WAL-E で行ってみます。OS は Ubuntu 14.04 (Trusty) を使います。
"WAL-E で PostgreSQL の Backup / Restore"の続きを読む

PostgreSQL 楽ちん FDW Foreign Table 作成

PostgreSQL には他のDBのテーブルを参照(更新もできる)できるようにする Foreign Data Wrapper (FDW) という機能が搭載されています。

これよりも前に dblink がありましたが、仕組み上パフォーマンス的に厳しく使いにくさがありました。FDW ではかなり良くなっています。PostgreSQL 以外の DB と接続することも可能です。

PostgreSQL9.3 開発と運用を支える新機能
http://enterprisezine.jp/dbonline/detail/5620

PostgreSQL 標準の replication は DB 全体での同期しかなく、レプリカは参照しかできませんから分析用のサーバーとして使おうにも書き込むことができません。将来的には論理 replication ができるようになりそうです。特定のテーブルだけとか。
http://www.postgresql.org/docs/9.4/static/logicaldecoding.html
WAL を decode して必要なものだけ取り出す感じ。Oracle の LogMiner 的な。

DB まるごと FDW でアクセスしたいと言われた場合、テーブル一個ずつ手作業で作成するのは非常にしんどいので便利なツール転がってないかなと調べてみたらやっぱりありました。感謝感謝。
http://www.postgresonline.com/journal/archives/322-Generating-Create-Foreign-Table-Statements-for-postgres_fdw.html

それではこの便利ツールを使った場合の流れをメモ

"PostgreSQL 楽ちん FDW Foreign Table 作成"の続きを読む

RDBMS in the Cloud: PostgreSQL on AWS を読んで

【AWS発表】AWS上でPostgreSQLを実行する - 新しいホワイトペーパーを公開 にあった RDBMS in the Cloud: PostgreSQL on AWS (PDF) を読んだので個人的にフムフムと思ったところをまとめておく。

Temporary Data and SSD Instance Storage

一時データ用のテーブルを SSD に置く方法。
SSD はインスタンスストレージなので OS 再起動でデータは消えてしまう。

まず、テーブルを作成したらデータを入れる前に関連データファイルを cp コマンドなどでバックアップし、OS 再起動時には PostgreSQL を起動する前にバックアップしたファイルを戻すことで、そのまま利用することができる。もちろん当該テーブルのデータは空っぽだが一時データだからそれを念頭に置いた使い方をする。

Replication を行なっている場合には通常テーブルこれを行うと不整合が発生するため、UNLOGGED テーブルとすることで回避できる。UNLOGGED テーブルは replication の対象外となるため。
"RDBMS in the Cloud: PostgreSQL on AWS を読んで"の続きを読む

fluent-plugin-dbi 書いた

fluentd で DB に書き込むために DBI を使って PostgreSQL でも MySQL にでも入れられるようにしてみました。PostgreSQL なら dbd-pg を、MySQL なら dbd-mysql が必要です。
https://github.com/yteraoka/fluent-plugin-dbi


  type dbi
  #dsn DBI:Pg:dbname:dbhost
  dsn DBI:Mysql:dbname:dbhost
  db_user username
  db_pass password
  keys host,time_m,method,uri,protocol,status
  query insert into access_log (host, time, method, uri, protocol, status) values (?, ?, ?, ?, ?, ?)

Query は自動生成ではないので、任意の処理を実行できます。
keys のカンマ区切りの順に「?」のプレースホルダに入れます。
time_m っていうのは Apache 2.4 だと %{msec_frac}t という LogFormat マクロでミリ秒まで出せるので、次のように指定して DB にミリ秒精度で入れられます。

time_m:%{%Y-%m-%d %H:%M:%S}t.%{msec_frac}t

%{usec_frac}t だとマイクロ秒でも出せますが、DB にマイクロ秒精度で入らないので msec で。
mod_log_config - Apache HTTP Server

fluent-gem fluent-plugin-dbi

で。