Hatena::Grouppostgresql

PostgreSQL 雑記 このページをアンテナに追加 RSSフィード

2011-01-15PostgreSQL 9.1 Alpha 3 このエントリーを含むブックマーク このエントリーのブックマークコメント

昨年12月末でしたが、PostgreSQL 9.1 Alpha 3 がリリースされました。その中の新機能を拾ってみます。

近傍検索に GiST インデックスが利用できるようになりました。point 型には距離を計算する <-> 演算子がありますが、この演算子を使って、特定の位置から近い順にソートする処理が高速化できます。GPS の緯度/経度情報から、近隣の施設を検索するようなアプリケーションが想定されます。

=# CREATE TABLE tbl (id serial, location point);
=# CREATE INDEX ON tbl USING gist (location);
=# EXPLAIN (COSTS OFF) SELECT * FROM tbl ORDER BY location <-> '(2, 3)' LIMIT 3;
                   QUERY PLAN
-------------------------------------------------
 Limit
   ->  Index Scan using tbl_location_idx on tbl
         Order By: (location <-> '(2,3)'::point)
(3 rows)
  • Add new function format(), for sprintf-like string formatting

プログラム言語によくある sprintf() 風関数です。書式指定は %s (文字列そのまま) の他に %L (文字列リテラルとして) と %I (識別子として) が使えます。FAQ に「PL/pgSQL の EXECUTE 文 で DDL が使えません」というのがありますが、この場合には format() を使うと期待の動作になります。

=# DO $$ BEGIN EXECUTE 'CREATE TABLE $1 (id integer)' USING 'tbl'; END; $$;
ERROR:  syntax error at or near "$1" at character 14
=# DO $$ BEGIN EXECUTE format('CREATE TABLE %I (id integer)', 'tbl'); END; $$;
DO
  • Add monitoring function pg_last_xact_replay_timestamp()

レプリケーションのスタンバイ側で、最後に反映処理をした時間を返す関数です。今までは xlog 中の位置は取得できましたが、この関数で時間も分かるようになりました。ただ、過去の時間が返却されても、しばらく更新が無い場合には「遅れ無し」ということもあり得るので、よくある質問の「スタンバイの遅れはどれくらい?」の直接の回答にはなりません。


Alpha 3 はあまり大きな機能は入りませんでしたが、それ以降 Alpha 4 に向けて レプリケーション統計情報ビュー、SQL/MED、RANGE 型、パラレル pg_dump などが待っていますので、乞うご期待!

以前のリリースの新機能については過去の記事で: