タグのアーカイブ: postgresql (RSS)

ludia.max_n_sort_resultを使うときの注意

関口さんのブログで紹介されてる通り、ludia.max_n_sort_resultパラメータを適切に設定してやることによりludiaのパフォーマンスは大幅に向上します。

が、このパラメーターをSETコマンドで変更しようとすると
ryo=# SET ludia.max_n_sort_result TO 1000;
ERROR: unrecognized configuration parameter "ludia.max_n_sort_result"

と怒られてしまうことがあります。

これはどうやら、postgresql.confにデフォルト設定
custom_variable_classes = 'ludia'
ludia.max_n_sort_result = 10000
ludia.enable_seqscan = on
ludia.seqscan_flags = 1
ludia.sen_index_flags = 31
ludia.max_n_index_cache = 16
ludia.initial_n_segments = 512

をちゃんと書いておかないと、このエラーになってしまう模様です。

このデフォルトのパラメーターを書かなくてもインデックス作成も検索動くので、ちょっと嵌るかもしれません。

OSC関西2008楽しかった

Google Tech Talk京都に続いて、OSC関西2008にも行ってきました。行ったのは19日の土曜日のみですが、興味あるセミナーはかたっぱしから見てきました。

JPUG活動のご紹介/EC-CUBEとPostgreSQL

京都駅から会場までが予想以上に時間かかってしまい、ちょっと遅刻しましたが、興味のあったEC-CUBEの話がきけてよかったです。
個人的に気になった話(というか自分で質問して開発者の中川さんに答えて頂いたんですが)としては、EC-CUBEでやってるPostgreSQLとMySQLの両対応で、実際のコードはどう切り分けてるかってことで
- DDL(データ定義のSQL)はPostgreSQLとMySQLで別のものを書いて用意している
- ほとんどのSQLがそのまま通るのでそのまま使ってるが、MySQLだとVIEWがないだとかの制約があるので、クラスの内部で切り分けてで吸収している
なるほどって思うのは簡単なんですが、最初から考えてたわけではなくて、もともとPostgreSQLでしか動かなかったものにMySQL対応を追加したそうで、このパワーはホントに凄いと思いました。これでインストール数は確実に増えるでしょうしね!
と、いいつつも「もともとPostgreSQLでつくってて、MySQLではなんとか動くレベルなので、PostgreSQLのほうが速いしオススメ」だそうです(笑)

脱Accessは、まず脱Baseから - オフィスアプリのOpenOffice.orgへの移行

すっかりオフィスアプリから遠ざかってしまってるんですが、はるか昔Accessでオフィスアプリをつくってた記憶があるので、なんとなく興味本位で受けてみました。
内容がけっこう密でほとんどついていけませんでしたが^^;AccessなんかでつくったオフィスアプリをOOoに移行するってのは、脱MS-Officeするには必須ですからねぇ・・・
そういえばGoogle Tech Talk京都では、powerpointじゃなくてImpressが使われてた気がしたんですが・・・
ちなみに僕はちょうど一昨日から、クリップアートやテンプレートがいっぱいついてるOxygenOffice Professionalってのをインストールしてつかってます。

Linkstation / 玄箱をハックしよう

gnspoolの山下さん・・・、いや、今はLinkStation/玄箱をハックしまくりの山下さんのセミナーです。
「GLAN Tank使いが浮気してんじゃねーよ!?」って言われるような気がしないでもないですが、実は次にNAS買うならLinkStationにしようと思ってるのです。
それにしても山下さんのお話は面白くて、完全にファンになってしまいました!
ハックという「苦労と試行」の先にある満足感・達成感はほんとにいいもんですよね。

はてなのバックエンドシステムと開発手法、過去と今

大規模トラフィックをさばくのに、サーバーを増やすわけですが、サーバー増やせば増やすほど大変になるわけです。
で、klabさんと出会ってLVSを活用するようになって相当よくなったというお話がメイン(だったハズ)。
LVSはWebサーバーだけじゃなく、MySQLスレーブにもLVSが利くそうで、オススメだとのこと。
# しかしMySQLスレーブが落ちるってのは、やっぱりMyISAMのロック競合が激しすぎってこと?
それにしてもMySQLマスタのリダンダンシーの確保をkwskって気がしまくりでした。今度出る本に書いてるのかな?

Geeklogで開発しよう

WordPress使ってるんですがWordPressのコードにうんざり・・・ってわけじゃないけど、CMSとしてのGeeklogにも興味があるので受講しました。
これは凄いと思ったのがwkyInstaller。GeeklogみたいなWebサーバー型アプリで、アーカイブの取得・サーバーへの転送・アーカイブの展開・ファイルパーミッションの設定・DBアカウントの設定とDBの作成、あたりのインストール作業を全部やってくれるWindowsアプリで、Geeklogはこれに対応していて、ワンクリックでインストールが完了してしまうというものです。
こんなのあったらレンタルサーバーでのインストール数は、ものすごく伸びるんじゃないでしょうか?
Geeklogについては、DBのテーブル情報ドキュメントが表示されるだとか、開発ツールが整ってるらしく、プラグイン開発がWPよりいい感じなら乗り換えちゃおうかなというぐらいの気持ちが出てきました・・・

懇親会

回りの席の方にもめぐまれ、たいへん楽しく過ごすことができました:)
お名刺交換させて頂いた方にはボチボチメールさせてもらいますです。

あ、ftp.jaist.ac.jpでダウンロードができないって北陸先端大に電話するの禁止ね!

PostgreSQLで特定のテーブルのみautovacuumの対象外にする

PostgreSQL
Creative Commons License photo credit: isriya

PostgreSQLの8.3に対応のLudiaの1.5がリリースされたのですが、8.3で利用するとvacuum非対応になり、vacuum後はREINDEXが必要になっていましました。
これは8.3でのHOTがらみの変更で、以前と同じ仕組みだと対応できないということなのでとりあえずは仕方ないのですが、運用上はなんとか対応する必要があります。

ひとつはautovacuumをoffにして運用する方法です。

もうひとつは、Ludiaのインデックスを使用しているテーブルだけautovacuumの対象外にして運用する方法です。

どちらにしても、Ludiaのインデックスはvacuum実行後にreindexを行う必要がありますが、Ludiaのインデックスを使用しているのは一部のテーブルのみという場合、そこだけautovacuumの対象外にして、(たとえ、それがスクリプトの仕事だとしても)定期メンテナンスを行うのが楽です。

特定のテーブルをautovacuumの対象外にするには、以下のようにシステムカタログpg_autovacuumにレコードを作成します。

まず、テーブルのpg_class.oidを調べます。
ryo=# select oid,relname from pg_class where relname = 'groups';
oid | relname
-------+---------
19123 | groups
(1 row)

pg_autovacuum.enabled=falseとしてレコードを作成します。
ryo=# insert into pg_autovacuum values (19123, false, -1, -1, -1, -1,
-1, -1, -1, -1);
INSERT 0 1
Time: 88.973 ms

autovacuumとpg_autovacuumについてはドキュメントの
23.1. 定常的なバキューム作業 – 23.1.4. 自動バキュームデーモン
44.10. pg_autovacuum
を参考にどうぞ。

PostgreSQL使ったWebサイトのDBでありがちなこと

ユーザーアカウントのテーブルのログインIDで
login_name VARCHAR(256) NOT NULL UNIQUE
なんて指定でユニークキーを貼ったのはいいが、Case SensitiveなIDになってしまい、気が付いたら大文字小文字を使い分けられてgdgdになる
# だけど「はてな」はMySQLじゃなかったの?って知らないけど
# どちらにせよはてながPostgreSQLだとは思ってません。もしかしてDBM?;)
続きを読む »

Ludiaメモ

みんな大好きPostgreSQLにSennaを組み込むLudiaのREADME見ながらひととおりやったときのメモ
続きを読む »

[勝手にCLI Magic]readlineと暮らす

bashやpsql、mysqlといったコマンドラインインターフェースと暮らすのは、実はreadlineと暮らすことなのです。

readlineってのはコマンドラインでの編集機能を提供するGNUライブラリで、前述のコマンドを含め、たいていのフリーソフトではサポートされているので、基本編集コマンドは是非覚えときましょう。ってことで、俺が日常的に使ってるのをピックアップしてみますた。
上矢印キーを押して履歴が呼び出しできるのを、なんとなく使っている人は多いかもしれませんが、もうちょっとショートカットを覚えとけばかなり便利になります。
Emacs使いには当たり前っぽいショートカットですが、Emacs使わない人にはさっぱりかもしれません。
# 表中ALTとなってるのはホントはMETAなんだけど、実質ALTだろってことで

カーソル移動系
行頭へ CTRL+a 行末へ CTRL+e
一文字進む CTRL+f 一文字戻る CTRL+b
一語進む ALT+f 一語戻る ALT+b

ForwardとBackのfとbを覚えましょう。
CTRL+aやALT+bがすぐ使えるようになると、カーソル移動時に矢印キーに手を伸ばし連打する苦行から開放されます。

編集系
(前の)一文字削除 CTRL+h (後ろの)一文字消去 CTRL+d
(前の)一語削除 CTRL+w 行末まで削除 CTRL+k

CTRL+hとCTRL+dはバックスペースとDELキー相当です。バックスペースやDELキーは、キーボードによって位置がマチマチなんで、やはりCTRL+hとCTRL+dを覚えておくのがイイかと。
CTRL+wとCTRL+kを覚えれば、呼び出したコマンドの引数を変更して実行なんてのはとてもカンタンになります。

ヒストリ系
前のヒストリ呼び出し CTRL+p 次のヒストリ呼び出し CTRL+n
前方インクリメンタル検索 CTRL+r 後方インクリメンタル検索 CTRL+s

CTRL+pとCTRL+nで、履歴をぐるぐるめくることができます。PreviousとNextって覚えてね。
なかなか使いでがあるのが検索機能です。たとえばpsqlで
CTRL+r SELECT CTRL+r CTRL+r
なんてすると、以前入力したSELECT文が順番に呼び出せます。途中でCTRL+sを押すと戻れますし、CTRL+gを押すと検索自体をキャンセルします。
# CTRL+sはttyのstopに割り当てられてるので気をつけてね。”stty stop undef”しておくか、使わないか、です。

これだけ覚えれば、ターミナルでの操作性が3倍ぐらいになってるハズだ!