トップ ソフト 雑記 日記 リンク

2013年5月20日月曜日

PostgreSQLのWALでのエラー・トラブル対応

注釈:この記事はQiitaにわたしが投稿していた記事を、自分のブログへ移動させたものです。
PostgreSQLでトラブルになったときに、つい忘れるのでメモ。

何らかのトラブルでNFSなどにWALが送られず、pg_xlogが膨れあがり、容量不足で停止したとき。
問題の無い範囲で、pg_xlogの内容を削除したのに、以下のようなログが出て、WALの送信が失敗するときがある。

cp: cannot stat `pg_xlog/00000001000010D000000000': No such file or directory
LOG: archive command failed with exit code 1
DETAIL: The failed archive command was: test ! -f /mnt/nfs_dir/archivedir/00000001000010D000000000 && cp pg_xlog/00000001000010D000000000 /mnt/nfs_dir/archivedir/00000001000010D000000000
WARNING: transaction log file "00000001000010D000000000" could not be archived: too many failures

原因は /pg_xlog/archive_status ディレクトリに、アーカイブの送信状況が保存されているが、これと実際のファイルの対応が不一致になった場合に発生する。
archive_status ディレクトリに「*.ready」というファイルがあれば、送信前。
送信が完了すると「*.done」になる。
これらを実際の pg_xlog に合わせよう。

PHPのxpathでends-withを使う

注釈:この記事はQiitaにわたしが投稿していた記事を、自分のブログへ移動させたものです。
PHPのDOMXPathでends-withを使い、属性の末尾が指定の文字列で終わるオブジェクトを取得しようとしたら、エラーになった。どうやら対応していないらしい。
しかし、DOMXPathには、自前の関数を定義できるという素敵機能というか、気持ち悪い機能というか。

DOMXPath( )でxpathオブジェクトを作った後、

function ends_with($node, $value){
    return substr($node[0]->nodeValue,-strlen($value))==$value;
}
$xpath->registerNamespace("php", "http://php.net/xpath");
$xpath->registerPHPFunctions("ends_with");

$nodes = $xpath->evaluate( "//li/a[php:function('ends_with',@href,'/')]" );

こんな感じで登録して、使用できます。
いやー、便利。
しかしstarts-withに対応してるんだから、ends-withも対応しておいてよ。

PHPでスクレイピング

注釈:この記事はQiitaにわたしが投稿していた記事を、自分のブログへ移動させたものです。
PHPでスクレイピングの記事が投稿されていたので、自分のやり方をメモ。

$body = file_get_contents( $url );
//$body = mb_convert_encoding($body, 'UTF-8', 'sjis-win'); // 文字コードが違えば

// HTMLが間違っている場合があるので、tidyを通して綺麗にする。
$tidy_obj = new tidy;
$tidy_obj->parseString( $body, array(), 'utf8');
$tidy_obj->cleanRepair();
$body = $tidy_obj->html();
unset( $tidy_obj );

// 分解
$dom = new DOMDocument;
$dom->encoding = 'UTF-8';
$dom->preserveWhiteSpace = false;
$dom->loadHTML( $body );
$xpath = new DOMXPath( $dom );
unset( $dom );

$nodes = $xpath->evaluate( "//div[@class='category']/div/p/a" );

という感じ。
HTMLが間違っていると、DOMDocumentが正しく認識できないときがあるので、tidyを通して綺麗にするのがポイント。
あとはxpathで、取りたいオブジェクトを引っ張ってこられる。

2013年5月18日土曜日

関西アンカンファレンスに参加しました #kansaiun

第3回関西アンカンファレンスに行ってきました。
当日は他の勉強会なども重なり、いろいろと大変でしたが、我も我もと発表枠がふさがり、かなり密度の濃いイベントになったかと思います。

わたしは、「ふぁぼ収集サービスのつらみ」と題して、公開しているサービス「ふぁぼるっく」の苦労話などをしてきました。


懇親会では、別の分野の方からも話を伺い、大変勉強になりました。
ちょっと作ってみたいものができました。
手の空いたときにでも、取りかかってみようかと思います。

次回も一年以内に開催されるようなので、是非参加したいです。
発表できるネタが生まれるような生活を送らないといけないなぁ。

広告