2010-01-23
SQLで==を使う
ネタ | |
"SQLで間違って==とか書いちゃうよね"的なことを某所でいわれたので作ってみました。
create operatorでanyelementが使えるなんてやってみて初めて知りましたが、「こんなに短かくできるよ」を強調したかったのでanyelementにしたのであって、本来はそれぞれの型毎に作るべきでしょう。
たとえば8.4だと
=# select oprname, oprcode from pg_operator where oprname = '='; oprname | oprcode ---------+-------------------------- = | int48eq = | booleq = | chareq = | nameeq ... = | enum_eq = | tsvector_eq = | tsquery_eq = | record_eq (59 rows)
と、データ型毎に59個ほど"="演算子が定義されているのでこれらと同じ定義で"=="を定義してあげれば何の問題も無いはずです。
2009-12-08
pgpool-II 2.3リリース
お手伝いさせていただいていたpgpool-II 2.3がリリースされました。
- http://pgfoundry.org/forum/forum.php?forum_id=1648
- http://www.sraoss.jp/pipermail/pgpool-general-jp/2009-December/000642.html
pgpool_statusは便利そうですね。
勝手にgitミラーを作ってみました。
2009-12-07
札幌Ruby会議02で発表してきました
Ruby | |
んで、資料もUPしました。動画もあるみたいです。
- http://www.slideshare.net/iakio/ruby-postgres-2009
- http://www.ustream.tv/recorded/2714499
- (12/23追記) 公式動画はこちらから http://www.nicovideo.jp/mylist/16614060
段取りの悪さに自分で動画を見て笑いました。解説すると、
- 最後のスライドの話をしたあとにうっかり脱線して別の話をはじめる
- 別の話がおわって元に戻ろうとする
- 「あ、プレゼンおわってた」
ということです。計算じゃないです。天然です。あと時間が押し気味だったので急いで話してるつもりだったんですが全然そうは見えないですね。でもリハの時点ではもっとグダグダでどうしようって感じだったし、やろうと思ってやれた部分も多少あるのでそこそこ満足してます。
他の言語との比較は、.soファイルをnmしてPQからはじまる関数を数えたものです。なんでラージオブジェクト関係は数えてないです。他の言語の関係者に怒られないうちにいっておくと、PerlにはDBI、PythonにはDB-APIというインタフェースありきなので若干数が少ないのでしょう。あとPythonには他にも3つほどPostgreSQLのドライバがあるので別のと比べれば違う結果になっていたでしょう。
個人的には、LTのドロリッチの人と並列分散クローラの人が面白かったです。LT以外ではえにしテックのテックさんの愛されっぷりがパないっす。
あと、math-sapporoで僕が登校拒否児童みたいになってます。ごめんなさい。来週こそ行きます。
ちょっと前のpgcon09jにいってきて、僕とPostgreSQLとの付き合いも10年以上になって、もっと古い人もいるけどもっと新しい人がバリバリ活躍していたりして、で、それぞれの人が異なる背景でPostgreSQLと出会っているんだなって思ったわけです。で、その出会い方の数だけ、色んな思いやモチベーションがあって、例えば僕より古い人の原点みたいなのは、僕より新しい人達にはなかなか理解できないだろうなぁ。そういうのを伝える場があってもいいんじゃないかなぁなんてことを、Ruby会議の熱気の中で思いました。
Rubyが好きかどうかにかかわらず、Ruby会議にいってみれば何か気がつくことがあるかもしれません。
あと、RubyistがRubyを思うように、それぞれのコミュニティにはそれぞれの歴史や文化が思いがあるということを心の片隅に止めておけば、世の中もう少し平和になるんじゃないかと思いました(自分も)。
2009-11-22
PostgreSQL Conference 2009 Japanにいってきた
僕とJPUGとのお付き合いももう10年ですか。若手と呼ばれていた時代が僕にもありました。
日本のPostgreSQLコミュニティには若くて優秀な方が沢山いて今後もたのしみです。次は誰を北海道に呼びましょうかね? > id:syachi5150
- 1日目のハイライトはやはりStreaming ReplicationとHOT Standbyでしょう。こんど試してみよう。あと同時翻訳ってすごい。
- 2日目「オレはDavid Fetter、あきらめの悪い男」のWriteable CTEの話が面白かった。でもこれ8.5ではいるのかどうか聞いてなかった気がする。どうでもいいけど資料のテーブル名はpeopleじゃなくpersonだった(テーブル名に単数形? - 象と戯れ - postgresqlグループ)。
- LTの内容濃い目。その資料配布してください。噂の新ツールはまだpgfoundryにも無いのかな。
- あと打ち上げは色々面白い話を聞けた。いやーもっと勉強しないとなぁ。
- 4人くらいから「Let'sに記事を書きませんか」と言われた。postgresqlグループ参加しませんか?
稚拙なまとめですいません。関係者のみなさんすばらしいイベントありがとうございました。
2009-11-20
10年前のPostgreSQL
勝手にJPUG10周年企画。10年前というとPostgreSQLは6.5.3あたりのようです。6.5というとMVCCが実装されたバージョンです。僕はこのころ既にPostgreSQLを使っていたのでmakeは簡単だろうと思ったのですが。
$ hg st M src/backend/commands/copy.c M src/backend/libpq/pqformat.c M src/backend/storage/ipc/ipc.c M src/backend/utils/error/elog.c M src/backend/utils/error/exc.c M src/backend/utils/init/postinit.c M src/configure M src/include/postgres.h
結構大変でした。ちなみに環境はVirtualBox上のCentOS5.4です。まあビルドできたのでinitdb。
$ initdb initdb does not know where to find the files that make up Postgres (the PGLIB directory). You must identify the PGLIB directory either with a --pglib invocation option, or by setting the PGLIB environment variable, or by having a program called 'postconfig' in your search path that outputs an asignment for PGLIB. $ initdb -h Unrecognized option '-h'. Syntax is: initdb [-t | --template] [-d | --debug] [-n | --noclean] [-u SUPERUSER | --usern ame=SUPERUSER] [-r DATADIR | --pgdata=DATADIR] [-l LIBDIR | --pglib=LIBDIR] $ initdb --help Unrecognized option '--help'. Syntax is: initdb [-t | --template] [-d | --debug] [-n | --noclean] [-u SUPERUSER | --usern ame=SUPERUSER] [-r DATADIR | --pgdata=DATADIR] [-l LIBDIR | --pglib=LIBDIR]
マジですかw。10年前ってこんなんだっけ。まあ色々あってinitdbもできましたが、postgresql.confってまだ無いんですね。
$ psql Welcome to the POSTGRESQL interactive sql monitor: Please read the file COPYRIGHT for copyright terms of POSTGRESQL [PostgreSQL 6.5.3 on i686-pc-linux-gnu, compiled by gcc gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46)] type \? for help on slash commands type \q to quit type \g or terminate with semicolon to execute query You are currently connected to the database: ishida
よし。8.4.1版のpgbenchを使ってpgbenchだ。
$ ./pgbench -i ERROR: parser: parse error at or near "exists"
drop table if existsが使えないorz。つーかtruncateすら無い。pgbenchをゴリゴリ修正。動いたか?
./pgbench -i creating tables... 10000 tuples done. 20000 tuples done. 30000 tuples done. 40000 tuples done. 50000 tuples done. 60000 tuples done. 70000 tuples done. 80000 tuples done. 90000 tuples done. 100000 tuples done. set primary key... ERROR: ALTER TABLE/ADD CONSTRAINT not yet implemented
なんか楽しくなってきた。
$ ./pgbench -c10 -t100 starting vacuum...end. transaction type: TPC-B (sort of) scaling factor: 1 query mode: simple number of clients: 10 number of transactions per client: 100 number of transactions actually processed: 1000/1000 tps = 162.552305 (including connections establishing) tps = 165.774029 (excluding connections establishing)
おお。動いた。ではトランザクション数を増やしてみます。
$ ./pgbench -c10 -t1000
starting vacuum...end.
Client 1 aborted in state 10. Probably the backend died while processing.
Client 6 aborted in state 10. Probably the backend died while processing.
Client 9 aborted in state 10. Probably the backend died while processing.
NOTICE: Message from PostgreSQL backend:
The Postmaster has informed me that some other backend died abnormally a
nd possibly corrupted shared memory.
I have rolled back the current transaction and am going to terminate you
r database system connection and exit.
Please reconnect to the database system and repeat your query.
NOTICE: Message from PostgreSQL backend:
The Postmaster has informed me that some other backend died abnormally a
nd possibly corrupted shared memory.
I have rolled back the current transaction and am going to terminate y
...
お遊び終了。
次はシーケンスの強制同期やりたいですね。