iakioの日記 RSSフィード

2010-01-23

SQLで==を使う

| 00:07 | SQLで==を使う - iakioの日記 を含むブックマーク はてなブックマーク - SQLで==を使う - iakioの日記

"SQLで間違って==とか書いちゃうよね"的なことを某所でいわれたので作ってみました。

http://gist.github.com/281672

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個ほど"="演算子が定義されているのでこれらと同じ定義で"=="を定義してあげれば何の問題も無いはずです。

トラックバック - http://postgresql.g.hatena.ne.jp/iakio/20100123

2009-12-08

pgpool-II 2.3リリース

01:11 | pgpool-II 2.3リリース - iakioの日記 を含むブックマーク はてなブックマーク - pgpool-II 2.3リリース - iakioの日記

お手伝いさせていただいていたpgpool-II 2.3がリリースされました。

pgpool_statusは便利そうですね。

勝手にgitミラーを作ってみました。

石井石井2009/12/10 00:01お手伝いいただき、ありがとうございます。
次はシーケンスの強制同期やりたいですね。

iakioiakio2009/12/11 18:08random()も欲しいという声が聞こえてきた気が、、、

トラックバック - http://postgresql.g.hatena.ne.jp/iakio/20091208

2009-12-07

札幌Ruby会議02で発表してきました

| 23:41 | 札幌Ruby会議02で発表してきました  - iakioの日記 を含むブックマーク はてなブックマーク - 札幌Ruby会議02で発表してきました  - iakioの日記

んで、資料もUPしました。動画もあるみたいです。

段取りの悪さに自分で動画を見て笑いました。解説すると、

  • 最後のスライドの話をしたあとにうっかり脱線して別の話をはじめる
  • 別の話がおわって元に戻ろうとする
  • 「あ、プレゼンおわってた」

ということです。計算じゃないです。天然です。あと時間が押し気味だったので急いで話してるつもりだったんですが全然そうは見えないですね。でもリハの時点ではもっとグダグダでどうしようって感じだったし、やろうと思ってやれた部分も多少あるのでそこそこ満足してます。

他の言語との比較は、.soファイルをnmしてPQからはじまる関数を数えたものです。なんでラージオブジェクト関係は数えてないです。他の言語の関係者に怒られないうちにいっておくと、PerlにはDBIPythonにはDB-APIというインタフェースありきなので若干数が少ないのでしょう。あとPythonには他にも3つほどPostgreSQLのドライバがあるので別のと比べれば違う結果になっていたでしょう。

個人的には、LTのドロリッチの人と並列分散クローラの人が面白かったです。LT以外ではえにしテックのテックさんの愛されっぷりがパないっす。

あと、math-sapporoで僕が登校拒否児童みたいになってます。ごめんなさい。来週こそ行きます。

ちょっと前のpgcon09jにいってきて、僕とPostgreSQLとの付き合いも10年以上になって、もっと古い人もいるけどもっと新しい人がバリバリ活躍していたりして、で、それぞれの人が異なる背景でPostgreSQLと出会っているんだなって思ったわけです。で、その出会い方の数だけ、色んな思いやモチベーションがあって、例えば僕より古い人の原点みたいなのは、僕より新しい人達にはなかなか理解できないだろうなぁ。そういうのを伝える場があってもいいんじゃないかなぁなんてことを、Ruby会議の熱気の中で思いました。

Rubyが好きかどうかにかかわらず、Ruby会議にいってみれば何か気がつくことがあるかもしれません。

あと、RubyistRubyを思うように、それぞれのコミュニティにはそれぞれの歴史や文化が思いがあるということを心の片隅に止めておけば、世の中もう少し平和になるんじゃないかと思いました(自分も)。

トラックバック - http://postgresql.g.hatena.ne.jp/iakio/20091207

2009-11-22

PostgreSQL Conference 2009 Japanにいってきた

02:13 | PostgreSQL Conference 2009 Japanにいってきた - iakioの日記 を含むブックマーク はてなブックマーク - PostgreSQL Conference 2009 Japanにいってきた - iakioの日記

僕とJPUGとのお付き合いももう10年ですか。若手と呼ばれていた時代が僕にもありました。

日本のPostgreSQLコミュニティには若くて優秀な方が沢山いて今後もたのしみです。次は誰を北海道に呼びましょうかね? > id:syachi5150

  • 1日目のハイライトはやはりStreaming ReplicationHOT Standbyでしょう。こんど試してみよう。あと同時翻訳ってすごい。
  • 2日目「オレはDavid Fetter、あきらめの悪い男」のWriteable CTEの話が面白かった。でもこれ8.5ではいるのかどうか聞いてなかった気がする。どうでもいいけど資料のテーブル名はpeopleじゃなくpersonだった(テーブル名に単数形? - 象と戯れ - postgresqlグループ)。
  • LTの内容濃い目。その資料配布してください。噂の新ツールはまだpgfoundryにも無いのかな。
  • あと打ち上げは色々面白い話を聞けた。いやーもっと勉強しないとなぁ。
  • 4人くらいから「Let'sに記事を書きませんか」と言われた。postgresqlグループ参加しませんか?

稚拙なまとめですいません。関係者のみなさんすばらしいイベントありがとうございました。

トラックバック - http://postgresql.g.hatena.ne.jp/iakio/20091122

2009-11-20

10年前のPostgreSQL

23:47 | 10年前のPostgreSQL - iakioの日記 を含むブックマーク はてなブックマーク - 10年前のPostgreSQL - iakioの日記

勝手に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
...

お遊び終了。

#pgcon09j会場より

13:15 | #pgcon09j会場より - iakioの日記 を含むブックマーク はてなブックマーク - #pgcon09j会場より - iakioの日記

無事到着。

公式Twitterハッシュタグは#pgcon09jです。

トラックバック - http://postgresql.g.hatena.ne.jp/iakio/20091120