From 6e8541464754b260121ff5ce0ab5457d35e312ad Mon Sep 17 00:00:00 2001 From: Bruce Momjian <bruce@momjian.us> Date: Fri, 20 May 2005 15:53:06 +0000 Subject: [PATCH] Update Japanese FAQ. Jun Kuwamura --- doc/FAQ_japanese | 2158 ++++++++++++-------------------- doc/src/FAQ/FAQ_japanese.html | 2193 ++++++++++++++------------------- 2 files changed, 1744 insertions(+), 2607 deletions(-) diff --git a/doc/FAQ_japanese b/doc/FAQ_japanese index b271d650976..1b4829d4a81 100644 --- a/doc/FAQ_japanese +++ b/doc/FAQ_japanese @@ -1,225 +1,152 @@ +PostgreSQL(ポストグレス・キュー・エル)についてよくある質問とその解答(FAQ) - PostgreSQL(ポストグレス・ゥ紂次Ε┘�)についてよくある質問とその解答(FAQ) - - 原文最終更新日: Sun Jan 9 14:44:04 EST 2005 - - 現在の維持管理者: Bruce Momjian (pgman@candle.pha.pa.us) - Maintainer of Japanese Translation: Jun Kuwamura (juk at - PostgreSQL.jp) - - この文書の最新版は - http://www.postgresql.org/files/documentation/faqs/FAQ.html - で見ることがでい泙后� - - プラットホームに特佑亮遡笋砲弔い討�: - http://www.postgresql.org/docs/faq/ - に回答があります。 -(以下、訳者による注釈を [訳注: と ] とで囲んで気靴泙后�) -[訳注: - 日本語版製作についてのメモは最後尾へ移動しました。 +原文最終更新日: Mon May 9 13:15:04 EDT 2005 + +現在の維持管理者: Bruce Momjian (pgman at candle.pha.pa.us) +Maintainer of Japanese Translation: Jun Kuwamura (juk at PostgreSQL.jp) + +この文書の最新版は http://www.postgresql.org/docs/faqs.FAQ.html で見ることがで +きます。 - 日本語版のこの文書は 本家 "Docs" の "Frequently Asked Questions" の - ところに "Japanese FAQ" という見出であります。また、以下のサイトにも - あります。 - http://www.PostgreSQL.jp/wg/jpugdoc/ - http://www.rccm.co.jp/~juk/pgsql/ - http://www.linux.or.jp/JF/ +プラットホームに特有の質問については: http://www.postgresql.org/docs/faq/ +に回答があります。 - この和訳についてお気づい療世�(juk at PostgreSQL.jp)までメールでお寄せ下さい。 +(以下、訳者による注釈を [訳注: と ] とで囲んで記します。) +[訳注: + 日本語版の製作については、この文書の最後をごらんください。 - 2005年01月12日 桑村 潤 + 2005年05月18日 桑村 潤 ] - _________________________________________________________________ - - 一般的な質問 - - 1.1) PostgreSQLとは何ですか? 何と読みますか? - 1.2) PostgreSQLの著作権はどうなってますか? - 1.3) PostgreSQLの動作するUnixプラットホームは? - 1.4) Unix以外の移植版で使えるものは? - 1.5) PostgreSQLはどこから入手でい泙垢�� - 1.6) サポートはどこで受けられますか? - 1.7) 最新版はどれですか - 1.8) どのような文書がありますか? - 1.9) 既知のバグや未だ無い機能はどうやって見つけますか? - 1.10) SQLはどうすれば学べますか? - 1.11) PostgreSQLは西暦2000年問題(Y2K)に対応していますか? - 1.12) 開発チームにはどのように参加しますか? - 1.13) バグレポートはどのように発信しますか? - 1.14) 他のDBMSと比べてPostgreSQLはどうなのですか? - 1.15) PostgreSQLを資金面で援助するにはどうすればよいですか? - - ユーザー・クライアントの質問 - - 2.1) PostgreSQL の ODBC ドライバーはありますか? - 2.2) PostgreSQL を Web - ページと連携させるにはどんなツールがありますか? - 2.3) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか? - 2.4) どのような言語で PostgreSQL と通信でい垢�� - - 管理上の質問 - - 3.1) どのようにすれば /usr/local/pgsql 以外の場所にインストールでき - ますか? - 3.2) postmaster を走らせると、 Bad System Call - とかコア・ダンプしたとのメッセージが出ます。なぜですか? - 3.3) postmaster を走らせようとすると、 IpcMemoryCreate - エラーが出ます。なぜですか? - 3.4) postmasterを走らせようとすると、 IpcSemaphoreCreate - エラーが出ます。なぜですか? - 3.5) 他のホストからの接続はどのように制御しますか? - 3.6) より良い性 - 能を得るためには、データベース・エンジンをどのように調整すれば良いです - か? - 3.7) どのようなデバグ機能が使えますか? - 3.8) 接続しようとするとい� 'Sorry, too many clients' - が出るのはなぜですか? - 3.9) pgsql_tmp ディレクトリの中には何がありますか? - 3.10) - PostgreSQLのメジャーリリースをアップデートするのにダンプとリストアをし - なくてはならないのはなぜですか? - 3.11) ハードウェアにはどんなコンピュータを使えばよいですか? - - 操作上の質問 - - 4.1) バイナリ・カーソルと通常カーソルとの違いは何ですか? - 4.2) 最初の数ロウのみを select するにはどうしますか? ランダムなロウ? - 4.3) テーブルやその他の情報のリストを psql で見るにはどうしますか? - 4.4) - テーブルからカラムの削除、あるいは、データ型を変更するにはどうしますか - ? - 4.5) ロウ、テーブル、データベースの最大サイズは? - 4.6) 一般的なテキ - ストファイルからデータを保存するには、データベースのディスク容量はどの - くらい必要ですか? - 4.7) - 定義されたテーブル、インデックス、データベース、および、ユーザをどのよ - うにして見つけ出しますか? - 4.8) - 問い合わせが遅いうえ、インデックスを使っている様子がありません。なぜで - すか? - 4.9) - 問い合わせオブティマイザがどのように問い合わせを評価するかを見るにはど - うしますか? - 4.10) R-tree インデックスとは何ですか? - 4.11) 遺伝的問い合わせ最適化とは何ですか? - 4.12) - 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように - 実現しますか?大文字と小文字とを区別しない検索のためのインデックスはど - のように使いますか? - 4.13) 問い合わせの中で、フィールドが NULL - であることを検出するにはどうしますか? - 4.14) 色々な文字型のそれぞれの違いは何ですか? - 4.15.1) 通番(serial)/自動増分フィールドはどのようにつくりますか? - 4.15.2) SERIALデータ型に挿入される値は、どうすれば得られますか? - 4.15.3) currval() は他のユーザとの競合状態に陥ることはないですか? - 4.15.4) トランザクションが中断したとき - にもういちどシーケンス番号が使われないのはなぜですか?シーケンス/SERI - ALカラムに空い�△襪里呂覆爾任垢�� - 4.16) OID とは何ですか? TID とは何ですか? - 4.17) PostgreSQL で使われるいくつかの用語の意味は何ですか? - 4.18) エラーメッセージ "ERROR: Memory exhausted in - AllocSetAlloc()"が出るのはなぜですか? - 4.19) どのバージョンの PostgreSQL - を走らせているのかを調べるにはどうしますか? - 4.20) ラージオブジェクトの操作で、invalid large obj - descriptorと出るのはなぜですか? - 4.21) - 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか? - 4.22) なぜ、INを使う副問い合わせがとても遅いのですか? - 4.23) 外部結合(outer join)はどのように実現しますか? - 4.24) 複数のデータベースを使う問い合わせはどのようにすればでい泙垢�� - 4.25) 関数で複数のロウまたはカラムを返すにはどうしますか? - 4.26) なぜ、PL/PgSQL 関数の中から一時テーブルを確実に create/drop - することがでい覆い里任靴腓Δ�� - 4.27) どのような暗号化オプションを利用でい泙垢�? - - PostgreSQLの拡張についての質問 - - 5.1) 自分で書いたユーザ定義関数を psql - の中で実行するとコア・ダンプしてしまうのはなぜですか? - 5.2) PostgreSQL - 用に書いたちょっと素敵な新しい型や関数を提供してプロジェクトに貢献した - いのですが? - 5.3) タプルを返す C言語の関数はどのように書い泙垢�� - 5.4) - ソース・ファイルを変更しました。再コンパイルしても変化が見られないのは - なぜですか? - _________________________________________________________________ - - 一般的な質問 - - 1.1) PostgreSQL とは何ですか? 何と読みますか? - - PostgreSQLはPost-Gres-Q-L(ポスト - グレス - ゥ紂� - エル) - と発音します。 - - PostgreSQL は次世代 DBMS 研究用のプロトタイプであった POSTGRES - データベース管理システムの改良版です(このため、今でもとい匹� - "Postgres" と呼ばれることがあります)。PostgreSQL は POSTGRES - の強力なデータ・モデルと豊 - 富なデータ・タイプ(型)を保持しながら、POSTGRES で使われた PostQuel - 問い合わせ言語を、拡張した SQL のサブセットに置き - 換えています。PostgreSQL は無料で完全なソースを利用でい泙后� - - PostgreSQL の開発は、PostgreSQL - 開発メーリングリストに参加している開発者達のチームですべて行なわれてい - ます。現在の座長は Marc G. Fournier (scrappy@PostgreSQL.org - )です。(下気�1.6節に参加の仕方があります。)現在、このチームが - PostgreSQL - 開発のすべての面倒をみています。このチームはコミュニティプロジェクトで - あり、いかなる企業によっても制御を受けません。参加したければ、 - http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html - にある開発者向けのFAQを見てください。 - - Postgres95-1.01 の中心的な開発者は Andrew Yu と Jolly Chen - でしたが、その他大勢の人々がこのコードの移植、テスト、デバグ、および、 - 改良に参加しました。PostgreSQL の派生元コードである Postgres - はカリフォルニア大学バークレイ校において、 Michael Stonebraker - 教授の指揮のもと、多くの学生、卒業生、本職のプログラマたちの努力により - 作られました。 - - バークレイにおけるこのソフトウェアのもとの名前は Postgres - でしたが、SQL の機能が追加された 1995 年にその名前は Postgres95 - に変更され、1996 年の終りにその名前は PostgreSQL に変更されました。 - - 1.2) PostgreSQL の著作権はどうなってますか? - - PostgreSQL は下気涼�邯△暴召い泙后� + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + 一般的な質問 + +1.1) PostgreSQLとは何ですか?何と読みますか? +1.2) PostgreSQLの著作権はどうなってますか? +1.3) PostgreSQLをサポートするプラットホームは? +1.4) PostgreSQLはどこから入手できますか? +1.5) サポートはどこで受けられますか? +1.6) バグレポートはどのように発信しますか? +1.7) 最新版はどれですか +1.8) どのような文書がありますか? +1.9) 既知のバグや未だ無い機能はどうやって見つけますか? +1.10) SQLはどうすれば学べますか? +1.11) 開発チームにはどのように参加しますか? +1.12) 他のDBMSと比べてPostgreSQLはどうなのですか? +1.13) 誰が PostgreSQL をコントロールしますか? + + ユーザー・クライアントの質問 + +2.1) PostgreSQL にはどんなインターフェースが使えますか? +2.2) PostgreSQL を Web ページと連携させるにはどんなツールがありますか? +2.3) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか? + + 管理上の質問 + +3.1) どうすれば、PostgreSQLを/usr/local/pgsql 以外の場所にインストールできます +か? +3.2) 他のホストからの接続はどのように制御しますか? +3.3) より良い性能を得るためには、データベース・エンジンをどのように調整しますか +? +3.4) どのようなデバグ機能が使えますか? +3.5) 接続しようとするときに 'Sorry, too many clients' が出るのはなぜですか? +3.6) PostgreSQLのメジャーリリースをアップデートするのにダンプとリストアをしなく +てはならないのはなぜですか? +3.7) ハードウェアにはどんなコンピュータを使えばよいですか? + + 操作上の質問 + +4.1) 最初のいくつかのロウのみを select するにはどうしますか?ランダムなロウ? +4.2) 定義されたテーブル、インデックス、データベース、および、ユーザをどのように +して見つけ出しますか? +4.3) カラムのデータタイプを変更するにはどうしますか? +4.4) ロウ、テーブル、データベースの最大サイズは? +4.5) 一般的なテキストファイルのデータを保存するには、データベースのディスク容量 +はどのくらい必要ですか? +4.6) クエリが遅いのはなぜでしょう?なぜ、インデックスが使われないのでしょうか? +4.7) クエリオプティマイザが、どのようにクエリを評価していかを、見るにはどうしま +すか? +4.8) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現 +しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使い +ますか? +4.9) クエリの中で、フィールドがNULL であることを検出するにはどうしますか?フィ +ールドがNULLかどうかでどのようにソートができますか? +4.10) いろいろな文字型のそれぞれの違いは何ですか? +4.11.1) 通番(serial)/自動増分フィールドはどのようにつくりますか? +4.11.2) SERIALデータ型に挿入される値は、どうすれば得られますか? +4.11.3) currval() は他のユーザとの競合状態に陥ることはないですか? +4.11.4) トランザクションが中断したときにもういちどシーケンス番号が使われないの +はなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか? +4.12) OID とは何ですか? TID とは何ですか? +4.13) エラーメッセージ "ERROR: Memory exhausted in AllocSetAlloc()"が出るのはな +ぜですか? +4.14) どのバージョンの PostgreSQL を走らせているのかを調べるにはどうしますか? +4.15) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか? +4.16) 外部結合(outer join)はどのように実現しますか? +4.17) 複数のデータベースを使う問い合わせはどのようにすればできますか? +4.18) 関数から複数のロウまたはカラムを返すにはどうしますか? +4.19) PL/PgSQL の関数の中で一時テーブルにアクセスするとき、どうして "relation +with OID ##### does not exist" というエラーを受け取るのでしょうか? +4.20) どのようなレプリケーションのソリューションがありますか? +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + 一般的な質問 + +1.1) PostgreSQL とは何ですか?何と発音しますか? + +PostgreSQLはPost-Gres-Q-L(ポスト - グレス - キュー - エル) と発音します。 + +また、単純に Postgres とも呼ばれます。 + +PostgreSQL はオブジェクト-リレーショナルデータベースシステムで、伝統的な商用デ +ータベースシステムに、次世代DBMSシステムに見られるような改良が施された特徴を有 +します。PostgreSQLは、無料で完全なソースコードを手に入れることができます。 + +PostgreSQL の開発は、ほとんどが、世界中にひろがったボランティアの開発者によって +、インターネットを通したコミュニケーションによって行われています。コミュニティ +によるプロジェクトであるため、どの企業の制御もうけません。開発に参加したければ +、 http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html にある開発者 +のFAQを見てください。 + +1.2) PostgreSQL の著作権はどうなってますか? + +PostgreSQL は下記の著作権に従います。 + [訳注: - 正文は英語です。参考として、訳文を併儀悩椶靴泙后� + 正文は英語です。参考として、訳文を併記掲載します。 ] + + +PostgreSQL Data Base Management System + +Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group Portions +Copyright (c) 1994-1996 Regents of the University of California + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose, without fee, and without a written agreement is +hereby granted, provided that the above copyright notice and this paragraph and +the following two paragraphs appear in all copies. + +IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR +DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST +PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF +THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND +THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, +SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - PostgreSQL Data Base Management System - - Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group - Portions Copyright (c) 1994-6 Regents of the University of California - - Permission to use, copy, modify, and distribute this software and its - documentation for any purpose, without fee, and without a written - agreement is hereby granted, provided that the above copyright notice - and this paragraph and the following two paragraphs appear in all - copies. - - IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY - FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, - INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND - ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE - PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF - CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, - UPDATES, ENHANCEMENTS, OR MODIFICATIONS. POSTGRESQL データベース管理システム - 部分的著作権 (c) 1996-2004, PostgreSQL国際開発チーム - 部分的著作権 (c) 1994-6 カリフォルニア大学本校 + 部分的著作権 (c) 1996-2005, PostgreSQL国際開発チーム + 部分的著作権 (c) 1994-1996 カリフォルニア大学本校 - 本ソフトウェアおよびその文書一式は上気涼�邯�充┐函△海諒絃� + 本ソフトウェアおよびその文書一式は上記の著作権表示と、この文章 およびこれに続く二つの段落が全ての複製に添付されている限りにおい て、使用、複製、修正および配付の許可を、いかなる目的であっても、 無償でかつ同意書無しに行なえることをここに認めます。 @@ -230,199 +157,168 @@ を受けていたとしても、一切の責任を負いません。 カリフォルニア大学は、商用目的における暗黙の保証と、特定目的で - の適合世亡悗靴討呂發箸茲蝓△海譴蕕妨造蕕此△い�覆詈歉擇睚鉸�� + の適合性に関してはもとより、これらに限らず、いかなる保証も放棄す ることを明言します。以下に用意されたソフトウェアは「そのまま」を 基本原理とし、カリフォルニア大学はそれを維持、支援、更新、改良あ るいは修正する義務を負いません。 [訳注: - 著作権に関する正文は上気留儻譴砲茲詆週です。日本語訳はあくまで + 著作権に関する正文は上記の英語による表記です。日本語訳はあくまで 参考です。 ] - - 上気�BSDライセンスで古ぅ�璽廛鵐宗璽垢離薀ぅ札鵐垢任后�宗璽好魁璽� - がどのように使われようとも制限しません。好ましいことなので、我々もそれ - を 変えるつもりはありません。 - - 1.3) PostgreSQL の動作環兇蓮� - - 一般的に、最近のUnix互換プラットホームであればPostgreSQLを稼働させられ - るはずです。リリースの時点で実際にテストを行なったことの報告がなされた - プラットホームについてはインストール手引書に列挙してあります。 - - 1.4) Unix以外の移植版で使えるものは? - バージョン8.0になり、PostgreSQL は、Win2000, WinXP, Win2003などの - Microsoft Windows - NTベースのオペレーティングシステムでネイティブに走るようになりました。 - パッケージになったインストーラが、http://pgfoundry.org/projects/pginst - allerから入手でい泙后� Windows (Win95, Win98, - WinMe)など、MSDOSベースのバージョンでは、Cygwin - を使ってPostgreSQLを走らせることがでい泙后� + +1.3) PostgreSQL の動作環境は? + +一般的に、最近のUnix互換プラットホームであればPostgreSQLを稼働させられるはずで +す。リリースの時点で実際にテストを行なったことの報告がなされたプラットホームに +ついてはインストール手引書に列挙してあります。 + +PostgreSQL は、Win2000, WinXP, そして、Win2003 のような Microsoft Windows NTベ +ースのオペレーティングシステムで、ネイティブに走ります。あらかじめパッケージに +されたインストーラが http://pgfoundry.org/projects/pginstaller にあり、利用でき +ます。MSDOSベースのWindowsのバージョン(Win95, Win98, WinMe)では、Cygwinを使って +PostgreSQL を走らせることができます。 + [訳注 pgInstaller の入手はFTPミラーサイトの win32 ディレクトリからも可能です。 http://www.postgresql.org/mirrors-ftp.html - ] - 次のサイトに Novell Netware 6 への移植もあります。 - http://forge.novell.com また、OS/2 (eComStation) バージョンは、 - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre - SQL&stype=all&sort=type&dir=%2Fにあります。 - - 1.5) PostgreSQL はどこから入手でい泙垢�� + 詳しくは、次の Windwos版に関するFAQの和訳をごらんください。 + http://www.postgresql.jp/wg/jpugdoc/FAQ_windows.ja.html + ] - PostgreSQL の大元の anonymous ftp サイトは - ftp://ftp.PostgreSQL.org/pub/ です。 - ミラーサイトについては、我々のメイン Web ページをご覧下さい。 - [訳注: - 以下は日本のミラーサイトです: - - Japan: ftp://ftp.jp.postgresql.org/ - Japan: ftp://mirror.nucba.ac.jp/mirror/PostgreSQL/pub/ - Japan: ftp://ring.ip-kyoto.ad.jp/pub/misc/db/PostgreSQL/ - Japan: ftp://ring.crl.go.jp/pub/misc/db/PostgreSQL/ - Japan: ftp://ring.saitama-u.ac.jp/pub/misc/db/PostgreSQL/ - Japan: ftp://ring.astem.or.jp/pub/misc/db/PostgreSQL/ - Japan: ftp://ring.exp.fujixerox.co.jp/pub/misc/db/PostgreSQL/ - Japan: ftp://ring.jah.ne.jp/pub/misc/db/PostgreSQL/ - Japan: ftp://ring.etl.go.jp.jp/pub/misc/db/PostgreSQL/ - Japan: ftp://ring.asahi-net.or.jp/pub/misc/db/PostgreSQL/ - Japan: ftp://ring.so-net.ne.jp/pub/misc/db/PostgreSQL/ - Japan: ftp://ring.aist.go.jp/pub/misc/db/PostgreSQL/ - ] +次のサイトに Novell Netware 6 への移植版もあります。 http://forge.novell.com ま +た、OS/2 (eComStation) バージョンは、 http://hobbes.nmsu.edu/cgi-bin/h-search? +sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2Fにあります。 - 1.6) サポートはどこで受けられますか? - - 主要なメーリング・リストは: - pgsql-general@PostgreSQL.orgです。PostgreSQL - に関することであれば議論ができ - ます。このリストへの参加は、電子メールの本文(Subject - 行ではありません)に次の2行を書いて、 - subscribe - end - - pgsql-general-request@PostgreSQL.org へ送って下さい。 - - ダイジェスト版のメーリング・リストもあります。このリストへの参加は - "本文"に: - subscribe - end - と書いて pgsql-general-digest-request@PostgreSQL.org - へ電子メールを送って下さい。 - - ダイジェスト版は、メインリストで受信するメッセージが 30k - 程度溜る毎にダイジェスト版リストのメンバーに送付されます。 - - バグレポート用のメーリングリストもあります。このリストへの参加は - "本文" に: - subscribe - end +1.4) PostgreSQL はどこから入手できますか? - と書いてpgsql-bugs-request@PostgreSQL.org へ電子メールを送って下さい。 - - 開発者の議論のためのメーリングリストも利用でき - ます。このリストへの参加は電子メールの本文に: - subscribe - end +Webブラウザ経由だと、 http://www.postgresql.org/ftp/、それから、ftp経由だと、 +ftp://ftp.PostgreSQL.org/pub/ を使います。 + +1.5) サポートはどこで受けられますか? + +PostgreSQL コミュニティは多くのユーザのために、電子メール経由の支援を提供してい +ます。電子メールリストをサブスクライブするためのメインとなるウェブサイトは +http://www.postgresql.org/community/lists/です。これから、始めるのであれば +general または、bugs といったリストがよいでしょう。 + +The major IRC channel is #postgresql on Freenode (irc.freenode.net). To connect +you can use the Unix program irc -c '#postgresql' "$USER" irc.freenode.net or +use any other IRC clients. A Spanish one also exists on the same network, (# +postgresql-es), and a French one, (#postgresqlfr). There is also a PostgreSQL +channel on EFNet. + +メジャーなIRC チャンネルは、Freenode (irc.freenode.net)の #postgresql というチ +ャンネルです。UNIX コマンドでは、 irc -c '#PostgreSQL' "$USER" irc.freenode.net +を使って参加できます。同じネットワークに、スペイン語のチャンネル (# +postgresql-es)もあり、フランス語のチャンネル (#postgresqlfr)もあります。EFNetに +もPostgreSQLチャンネルがあります。 - と書いて、pgsql-hackers-request@PostgreSQL.orgへ電子メールを送って下さ - い。 - - PostgreSQL についてもっと詳しく知りたければ、次の PostgreSQL - WWWホームページからたどれます: - - http://www.PostgreSQL.org - - メジャーなIRC チャンネルは、Freenode (irc.freenode.net)の #PostgreSQL - というチャンネルです。 UNIX コマンドで、 irc -c '#PostgreSQL' "$USER" - irc.freenode.net. を使って参加でい泙后� - 同じネットワークに、スペイン語のチャンネル(#postgresql-es)もあ - り、フランス語のチャンネル(#postgresqlfr)もあります。 - EFNetにもPostgreSQLチャンネルがあります。 [訳注: 1999年7月23日、日本ポストグレスユーザー会、略称JPUGが設立されました。 - JPUG は非営利組織で、PostgreSQLを利用する人達の相互協力の場となっています。 + JPUG は非営利組織で、PostgreSQLを利用する人達の相互協力の場となっています。 (2003年5月17日、「日本PostgreSQLユーザ会」に名称を改めました。) 正会員の会費は無料ですが、協賛会員の会費と会員の積極的な貢献が会の運営を助けています。 詳しくは、JPUG のWeb サイト: http://www.PostgreSQL.jp/ - をご覧ください。会員登録も可能となっています。 + をごらんください。会員登録も可能となっています。 日本語のIRCチャンネル '#PostgreSQL*jp' も存在します。 - - 商用サポート会社のリストはhttp://techdocs.postgresql.org/companies.php - にあります。 - - 1.7) 最新版はどれですか - PostgreSQL の最新版はバージョン 7.4.6 です。 - - 我々は、6~8カ月毎にメジャーリリースを行なうことを計画しています。 - - 1.8) どのような文書がありますか? - - 配付の中に、いくつかのマニュアルとオンライン・マニュアル(マニュアル・� - 據璽�)およびいくつかの小さなテスト例題が含まれます。/doc - ディレクトリをご覧下さい。また、マニュアルは、http://www.ca.PostgreSQL - .org/docs/でオンラインでも閲覧でい泙后� + +商用サポート会社のリストは http://techdocs.postgresql.org/companies.phpにありま +す。 + +1.6) バグレポートはどのように発信しますか? + +http://www.postgresql.org/support/submitbug のPostgreSQL バグフォームを訪れてく +ださい。バグレポートを提出する仕方についての手引と指針があります。 + +それと同時に ftp サイト ftp://ftp.PostgreSQL.org/pub/ で、最新バージョンの +PostgreSQL を探してみてください。 + +1.7) 最新版はどれですか + +PostgreSQL の最新版はバージョン 8.0.3 です。 + +我々は、1年毎にメジャーリリースを行ない、数ヵ月ごとのマイナーリリースをを計画し +ています。 + +1.8) どのような文書がありますか? + +配付の中に、いくつかのマニュアルとオンライン・マニュアル(マニュアル・ページ)お +よびいくつかの小さなテスト例題が含まれます。 /docディレクトリをごらんください。 +また、マニュアルは、 http://www.PostgreSQL.org/docs/でオンラインでも閲覧できま +す。 + [訳注: - (株)SRAと日本PostgreSQLユーザ会で翻訳され、 - 「PostgreSQL オフィシャルマニュアル」 - として出版されています。 + JPUG 文書・書籍関連分科会で翻訳されたマニュアルもあります。 + + http://www.postgresql.jp/document/pg803doc/ + インプレスから、 + + PostgreSQLオフィシャルマニュアルとして出版されています。 + ] + + +オンラインで参照できる PostgreSQL の本も2冊あります。 http://www.PostgreSQL.org +/docs/awbook.html - オンラインで参照でい� PostgreSQL - の本も2冊あります。http://www.PostgreSQL.org/docs/awbook.html [訳注: - 日本ポストグレスユーザー会の 「PostgreSQL Book翻訳分科会」 - にて翻訳されました。 + JPUG「PostgreSQL Book翻訳分科会」 + で翻訳され、ピアソンから + 「はじめてのPostgreSQL」として出版されました。 ] + - および、 http://www.commandprompt.com/ppbook/ です。 - 購入可能な書籍の目録は、http://techdocs.PostgreSQL.org/techdocs/bookre - views.php にあります。 PostgreSQL 技術情報記 - 事も、http://techdocs.PostgreSQL.org/ にあります。 - - [訳注: - 和訳文書は、日本ポストグレスユーザー会のhttp://www.postgresql.jp/docum - ent/ をごらん下さい。 ] - - コマンドラインのクライアントプログラムpsql - も、型、演算子、関数、集約、その他の情報をお見せする、いくつかの素晴ら - しい \d コマンドを持ちます。 - \? - を使うと利用可能なコマンドが表示されます。 - - 我々の Web サイトには、もっと沢山の文書があります。 - - 1.9) 既知のバグや未だ無い機能はどうやって見つけますか? +および、 http://www.commandprompt.com/ppbook/です。 + + [訳注: + 邦訳は「実践 PostgreSQL」 + がオライリーから出版されています。 + ] - PostgreSQLは拡張されたSQL-92のサブセットをサポートします。 - 我々のページの TODO リストに、既知のバグや欠落機能や将 - 来計画についての欺劼�△蠅泙后� - - 1.10) SQL はどうすれば学べますか? - - http://www.PostgreSQL.org/docs/awbook.html にあるPostgreSQL本で SQL - を教えています。 + +購入可能な書籍の目録は、http://techdocs.PostgreSQL.org/techdocs/bookreviews.php +にあります。 PostgreSQL 技術情報記事も、http://techdocs.PostgreSQL.org/ にあり +ます。 + [訳注: - 日本ポストグレスユーザー会の 「PostgreSQL Book翻訳分科会」 - にて翻訳され出版されています。 + 日本語の書籍等についてはは、日本PostgreSQLユーザ会の、http://www.postgresql.jp/PostgreSQL/references.html + もごらんください。 ] + + +コマンドラインのクライアントプログラムpsql も、型、演算子、関数、集約、その他の +情報をお見せする、いくつかの素晴らしい \d コマンドを持ちます。 - \? を使うと利 +用可能なコマンドが表示されます。 + +我々の Web サイトには、さらに沢山の文書があります。 + +1.9) 既知のバグや未だ無い機能はどうやって見つけますか? + +PostgreSQLは拡張されたSQL-92のサブセットをサポートします。我々のページの TODO +リストに、既知のバグや欠落機能や将来計画についての記述があります。 + +1.10) SQL はどうすれば学べますか? + +まず、上記で述べた PostgreSQL についての本を読むことを検討してください。もうひ +とつは、 "Teach Yourself SQL in 21 Days, Second Edition" at http:// +members.tripod.com/er4ebus/sql/index.htmです。 + +The Practical SQL Handbook, Bowman Judith S. et al., Addison-Wesley が多くのユ +ーザに好評です。ほかでは、The Complete Reference SQL, Groff et al., McGraw-Hill +も好評です。 + +素晴らしい手引書は、http://www.intermedia.net/support/sql/sqltut.shtm, http:// +ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM, そして、http:// +sqlcourse.com にあります。 - その他にも PostgreSQL本として、http://www.commandprompt.com/ppbook - があります。 - 素晴らしい手引書は、http://www.intermedia.net/support/sql/sqltut.shtm, - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM, - そして、http://sqlcourse.com にあります。 - - その他では、 "Teach Yourself SQL in 21 Days, Second Edition" が - http://members.tripod.com/er4ebus/sql/index.htmにあります。 - - 多くのユーザに、 The Practical SQL Handbook, Bowman Judith S. et al., - Addison-Wesley が好評です。 その他に、The Complete Reference SQL, - Groff et al., McGraw-Hill のようなのもあります。 [訳注: 石井達夫氏による日本語の参考文献の紹介ページ http://www.SRA.co.jp/people/t-ishii/PostgreSQL/doc-jp/index.html @@ -432,536 +328,278 @@ があります(やや古い2000年版)。 堀田倫英氏の「PostgreSQL日本語マニュアル」 http://www.net-newbie.com/ - ではオンラインマニュアルの検索がでい泙后� + ではオンラインマニュアルの検索ができます。 丸山不二夫氏のUNIX データベース入門 http://www.wakhok.ac.jp/DB/DB.html - もオンラインで読むことがでい泙后� + もオンラインで読むことができます。 + Nikkei BP IT Pro にある石井達夫氏の PostgreSQL ウォッチ + では毎回新しい情報をとりあげています。 ] - - 1.11) PostgreSQLは西暦2000年問題(Y2K)に対応していますか? - - 対応してます。西暦2000年より後の日付も、紀元前2000年より前の日付も、簡 - 単に扱えます。 - - 1.12) 開発チームにはどのように参加しますか? - - まず最初(1番目)に、最新のソースをダウンロードし、我々の Web - サイトか配布に含まれているPostgreSQL Developersの文書を読みます。 - 2番目に、pgsql-hackers と pgsql-patches - メーリング・リストを購読(subscribe)します。 - 3番目に、高品質のパッチをpgsql-patchesに発信します。 - - およそ十人ちょっとの人達が、PostgreSQL - CVSアーカイブにコミットする権限を持っています。 - そのそれぞれの人達が沢山の高品質なパッチを発信するので、現在コミッター - となっている人達はそれに追い付くのが大変ですが、我々は彼らがコミットし - たパッチは高品質であると確信しています。 - - 1.13) バグレポートはどのように発信しますか? - - http://www.postgresql.org/support/submitbug のPostgreSQL - バグフォームを訪れて下さい。 - バグレポートを提出する仕方についての手引と指針があります。 - - それと同時に ftp サイト - ftp://ftp.PostgreSQL.org/pub/で、もっと新しいバージョンの PostgreSQL - あるいはパッチをさがしてみて下さい。 - - 1.14) 他のDBMSと比べてPostgreSQLはどうなのですか? - - ソフトウェアを計る方法にはいくつかあります。機能と税修反�蠕� - とサポートと価格です。 - - 機能(Features) - PostgreSQLは、トランザクション、副問い合わせ、トリガー、ビュー� - �杏凜ー整合性 - 参照、および、洗練されたロック機構など、大規模商用DBMSが持つ機� - 修鬚曚箸鵑瓢�辰討い泙后�気蕕� - PostgreSQLは、ユーザ定義型、継承、ルール、それから、ロック競合� - 鮟名�垢襯泪襯船弌璽献腑麁瓜�� - 制御など、商用DBMSも持ち合わせないような機能をいくつか持ち合わ� - 擦討い泙后� - - 税�(Performance) - PostgreSQLは他の商用あるいはオープンソースのデータベースと互角� - 寮� - 能も持ちます。ある面ではより早かったり、ほかの面ではより遅かっ� - 燭蠅靴泙后�MySQLなどの特化型データベース・システムにくらべて、P - ostgreSQL は複数ユーザや複雑な問い合わせ、また、 read/write - 問い合わせのロードがより高速です。MySQLは少ないユーザでの単純な - SELECT 問い合わせでは高速です。もちろん、MySQLには上記 - のFeaturesの節に示すような機能はほとんどありません。我々は、Pos - tgreSQLに柔軟世筏’柔を組み込みながらも、絶えず性 - 能の改善を続けています。 - - 信頼�(Reliability) - 我々は、DBMSの信頼性 - が高くなくてはその価値が無いことを理解してます。十分テストして� - �堕蠅靴織魁璽匹鬟丱阿鮑脳�砲靴討�薀螢蝓璽垢垢襪茲Δ謀悗瓩討� - す。それぞれのリリースは少なくとも1カ月以上のベータ・テストを行 - ない、これまでのリリースの履歴が、製品版として安定した堅固なリ� - 蝓璽垢任△襪海箸鯤�譴辰討い泙后�海諒�遒任蓮�召離如璽織戞璽� - と比べても遜色がないことに自信を持っています。 - - サポート(Support) - 我々のメーリングリストは、遭遇するいかなる問題についても解決へ� - 亮蟒�韻鬚靴討�譴襦���圓筌罅璽兇梁腓� - な集まりへの接点を提供しています。我々は問題の解決を保証するこ� - 箸呂任� - ませんが、商用データベースであっても常に解決されるわけではあり� - 泙擦鵝3��圓筺▲罅璽供Ε灰潺絅縫謄�▲泪縫絅▲詢燹△修譴法▲� - ースコードなどへ直接アクセスでき - ることによって、PostgreSQLのサポートは、他のDBMSサポートよりも� - イ譴燭發里箸覆辰討い泙后8耆徊召謀悊┐董∋�阻茲両ν僖汽檗璽箸� - どもあります(FAQ1.6節をご覧下さい)。 - - 価格(Price) - PostgreSQLの利用は、商用でも非商用でも、すべて無料です。上記 - に示してあるBSDスタイルの使用許諾に外れない限り、PostgreSQLのコ - ードを制限無しで商品に組み込むことがでい泙后� - - 1.15) PostgreSQLを資金面で援助するにはどうすればよいですか? - - PostgreSQLは、我々が始めた 1996年以来、最高クラスの情報基盤を持ってい - ます。これはすべて、Marc - Fournieさんのおかげで、彼はこの基盤を創り出し、何年にもわたって管理し� - 討ました。 - - 質の良い基盤は、オープンソース・プロジェクトにとってはとても大切なもの - で、プロジェクトが前進する勢いを失って分裂するのを回避します。 - - もちろん、この基盤は安いものではありません。維持し続けるためには毎月あ - るいは一時的に経費がかかります。もし、あなたやあなたの会社に、こうした - 努力のための資金の援助を施すことができ - るようでしたら、http://store.pgsql.com/shopping/から寄付をお願いします - 。 - - また、Webページには PostgreSQL,Inc とありますが、そこの - "貢献(contributions)"という項目は、 PostgreSQL - プロジェクトを支援するだけのためで、決して特定の会社のための資金ではあ - りません。もし、小切手(check)の方が都合よければ連絡先の住所へお送り下� - 気ぁ� - - さらに、PostgreSQLを使った成功事例をお持ちであれば、ぜひ、われわれの - 事例紹介リスト pgsql-advocacy@postgresql.org へお送りください。 - _________________________________________________________________ - - ユーザー・クライアントの質問 - - 2.1) PostgreSQL のための ODBC ドライバーはありますか? - PsqlODBC と OpenLink ODBC の二つの ODBC ドライバーが利用可能です。 - - PsqlODBC は次の場所からダウンロードでい泙后� - http://gborg.postgresql.org/project/psqlodbc/projdisplay.php - - OpenLink ODBC は http://www.openlinksw.com/から入手でい泙后I現狹�� - ODBC - クライアント・ソフトウェアで使えますので、支援しているすべてのプラット - ホーム(Win, Mac, Unix, VMS)から PostgreSQL の ODBC が利用でい泙后� - - たぶん彼らは、商用品質のサポートの必要な人々に売っていると思いますが、 - フリーウェア版はいつでも入手可能のようです。質問は、postgres95@openlin - k.co.uk へ送って下さい。 - - Programmer's Guide の ODBC の章もご覧ください。 - - 2.2) PostgreSQL を Web ページと連携させるにはどんなツールがありますか? - - データベースを裏に持つ Web ページについての素晴らしい紹介が、 - http://www.webreview.comにあります。 - - Web への拡張のためには、PHP - が卓越したインターフェイスとなっています。http://www.php.net/にありま� - 后� + +1.11) 開発チームにはどのように参加しますか? + +(開発者向けの)Developer's FAQをごらんください。 + +1.12) 他のDBMSと比べPostgreSQLはどうなのですか? + +ソフトウェアを計る方法にはいくつかあります。機能と性能と信頼性とサポートと価格 +です。 + +機能(Features) + PostgreSQLは、トランザクション、サブクエリ、トリガー、ビュー、外部キー整合 + 性参照、および、洗練されたロック機構など、大規模商用 DBMSが持つ機能をほとん + ど持っています。さらに PostgreSQLは、ユーザ定義型、継承、ルール、それから、 + ロック競合を縮小するマルチバージョン同時性制御など、商用DBMSも持ち合わせな + いような機能をいくつか持ち合わせています。 +性能(Performance) + PostgreSQLは他の商用あるいはオープンソースのデータベースと互角の性能も持ち + ます。ある面ではより早かったり、ほかの面ではより遅かったりします。他のデー + タベースに比べた性能は、ふつう +/-10% くらいでしょう。 +信頼性(Reliability) + 我々は、DBMSの信頼性が高くなくてはその価値が無いことを理解してます。十分テ + ストして、安定したコードをバグを最小にしてからリリースするように努めてます + 。それぞれのリリースは少なくとも1 カ月以上のベータ・テストを行ない、これま + でのリリースの履歴が、製品版として安定した堅固なリリースであることを物語っ + ています。この分野では、他のデータベースと比べても遜色がないことに自信を持 + っています。 +サポート(Support) + 我々のメーリングリストは、遭遇するいかなる問題についても解決への手助けをし + てくれる、開発者やユーザの大きな集まりへの接点を提供しています。我々は問題 + の解決を保証することはできませんが、商用データベースであっても常に解決され + るわけではありません。開発者や、ユーザ・コミュニティ、マニュアル類、それに + 、ソースコードなどへ直接アクセスできることによって、PostgreSQLのサポートは + 、他のDBMS サポートよりも優れたものとなっています。御要望に答えて、事柄毎の + 商用サポートなどもあります(FAQ1.5節をごらんください)。 +価格(Price) + PostgreSQLの利用は、商用でも非商用でも、すべて無料です。上記に示してあるBSD + スタイルの使用許諾に外れない限り、PostgreSQLのコードを制限無しで商品に組み + 込むことができます。 + +1.13) 誰が PostgreSQL をコントロールしますか? + +PostgreSQLの門番、中央委員会、あるいは、コントロールをする会社を探そうとしても +、諦めざるをえず ---- 存在しないのです。我々は、中心となるコミッティとCVSコミッ +タを持ちますが、これらのグループはコントロールするためというよりも、管理上のも +のです。ここでは、プロジェクトは、だれでも参加ができる開発者とユーザのコミュニ +ティにより方向付けられます。読者がやらなければならないことは、メーリングリスト +をサブスクライブして、議論に参加することです。(Developer's FAQには、PostgreSQL +開発に加わり方についての情報があります。) + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + ユーザー・クライアントの質問 + +2.1) PostgreSQL にはどんなインターフェースが使えますか? + +PostgreSQL のインストールに含まれる物はCと組込み Cのインターフェースだけです。 +その他のインターフェースは独立したプロジェクトで、別々にダウンロードされます。 +分かれることで、それぞれの開発チームが独自のリリーススケジュールを持つことが許 +されます。 + +PHP のようないくつかのプログラミング言語は、 PostgreSQLのインターフェースを含ん +でいます。Perl, TCL, Python, そして、そのほかの利用可能な言語のインターフェース +は、 http://gborg.postgresql.org の Drivers/Interfaces の節の中とインターネット +の検索でみつけられます。 + +2.2) PostgreSQL を Web ページと連携させるにはどんなツールがありますか? + +データベースを裏に持つ Web ページについての素晴らしい紹介が、 +http://www.webreview.comにあります。 + +Web への拡張のためには、PHP(http://www.php.net/) が卓越したインターフェイスとな +っています。 + [訳注: - PHPに関する日本語の情報は、2000年4月19日に発造靴親鐱�PHPユーザ会のサイト + PHPに関する日本語の情報は、2000年4月19日に発足した日本PHPユーザ会のサイト http://www.php.gr.jp/ あるいは、廣川 類さんのサイト http://www.geocities.jp/rui_hirokawa/php/ にかなりまとめられています。 ] + - 処理が複雑な場合、多くの人は Perl インターフェイスと CGI.pm か - mod_perl を使います。 - [訳注: - WDB は、Web から DataBase への Perl の Interface です。 - wdb-p95 へのリンクは切れてしまっています。おそらく、Perl DBI 経由で DBD::Pg の利用が可能と思われます。 - 現在、WDBI という名前になっているもの - http://www.egroups.com/list/wdb-users/ - と、WDBの名前のままのもの - http://www.i-con.dk/wdb/ - とがあります。その経緯はよくわかりません。 - ] +処理が複雑な場合、多くの人は Perl インターフェイスと CGI.pm か mod_perl を使い +ます。 - 2.3) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか? - - もちろん、PostgreSQL - へのグラフィカルインターフェイスがいくつかあります。 その中にPgAccess - http://www.pgaccess.org も含まれます。 PgAdmin III - (http://www.pgadmin.org)もあります。 RHDB Admin - (http://sources.redhat.com/rhdb/ )、TORA - (http://www.globecom.net/tora/ (部分的に商用)) および、 Rekall ( - http://www.thekompany.com/products/rekall/, proprietary)もありま す。 - PhpPgAdmin ( http://phppgadmin.sourceforge.net/ ) - はPostgreSQLへのWebベースの インターフェイスを提供します。 - - より詳細なリストについては、http://techdocs.postgresql.org/guides/GUIT - ools をご覧ください。 - - 2.4) どのような言語で PostgreSQL と通信でい垢�� - - 人気のあるほとんどの言語はPostgreSQLへのインターフェイスを持っています - 。 - あなたが使うプログラミング言語の拡張モジュールのリストを覗いてみてくだ - さい。 - - 以下のインターフェイスはPostgreSQLの配布に含まれています。 - * C (libpq) - * 埋め込みC (ecpg) - * Java (jdbc) - * Python (PyGreSQL) - * TCL (libpgtcl) - - その他の利用可能なインターフェイスは http://gborg.postgresql.org - のDrivers/Interfacesのセクションにあります。 - [訳注: - 永安悟史さんは Palm 版の libpq を開発されました。 - http://www.snaga.org/libpq/ - ] - _________________________________________________________________ - - 管理上の質問 - - 3.1) どのようにすれば /usr/local/pgsql 以外の場所にインストールでい泙垢�� - - 簡単な方法は、 configure を走らせるとい� --prefix - オプションを指定することです。 - - 3.2) postmaster を走らせると、Bad System Call - とかコア・ダンプしたとのメッセージが出ます。なぜですか? - - さまざまな問題が考えられますが、まず最初にあなたのカーネルに System V - IPC の拡張がインストールされているかを確認して見てください。PostgreSQL - はカーネルによる共優瓮皀蝓爾肇札泪侫�離汽檗璽箸鯢�廚箸靴泙后� - - 3.3) postmaster を走らせようとすると、IpcMemoryCreate - エラーが出ます。なぜですか? - - カーネルが共有 - メモリーを持つ設定になっていなかったか、でなければ、カーネルに対して使 - える共優瓮皀蝓爾梁腓さを大い�瀋蠅垢詆�廚�△蠅泙后6饌療�並腓� - さは、使っているアーゥ謄�船磴�postmaster を走らせるとき - に設定するバッファの数とバックエンドプロセスに依存します。ほとんどのシ - ステムでは、既定値のバッファサイズのままで、少なくとも約1MBが必要です� - � PostgreSQL Administrator's Guide/Server Run-time - Environment/Managing Kernel Resources に共有 - メモリーとセマフォについての情報の詳細がありますのでご覧ください。 - - 3.4) postmasterを走らせようとすると、IpcSemaphoreCreate - エラーが出ます。なぜですか? - - もしエラーメッセージがIpcSemaphoreCreate: semget failed (No space left - on - device)であれば、カーネルが十分なセマフォを使えるように構成されていま� - 擦鵝�Postgresは潜在的なバックエンドプロセス毎に一つのセマフォを必要と� - 靴泙后�箸蠅△┐困硫魴荳��postmasterを起動するとき - に、バックエンドプロセスの数をより少なく制限をすることです。既定値の32 - より小さな数のパラメータを-Nで使います。より恒久的な解決策は、カーネル - のSEMMNS と SEMMNI パラメータを増やすことです。 - - 操作不能のセマフォも過度なデータベースアクセスの間にクラッシュを - 起こす可能世�△蠅泙后� - - もし、エラーメッセージがなにか他のものであれば、カーネルの構成でまった - くセマフォのサポートをしていないかもしれません。 PostgreSQL - Administrator's Guide に共有 - メモリーとセマフォについての情報の詳細があります。 - - 3.5) 他のホストからの接続はどのように制御しますか? - - 既定値では、PostgreSQL は Unix - ドメインソケット、または、TCP/IP接続のローカルマシンからの接続しか許し - ません。postgresql.conf の中の listen_addresses - を修正し、かつ、$PGDATA/pg_hba.conf - ファイルを適切に直して、ホスト主導型認証を有 - 効にしないかぎりは、他のマシンからは接続でい覆い任靴腓Α� - - 3.6) より良い性 - 能を得るためには、データベース・エンジンをどのように調整すれば良いですか? - - 確かにインデックスは問い合わせの速度を増します。EXPLAIN - ANALYZEコマンドで PostgreSQL - がどのようにあなたの問い合わせを翻訳しているかを見ることができ - 、そして、どのインデックスが使われているかを見ることがでい泙后� - - もし INSERT を多用している場合は、COPY コマンドを使って大き - なバッチ処理でそれを行なうことを検討して下さい。これは、INSERT - を別々に行なうよりもっと高速です。次に、BEGIN WORK/COMMIT - のトランザクション・ブロックの中に無い文は、それら自身がそれぞれのトラ - ンザクションに入っていると見なされます。いくつかの文を一つのトランザク - ション・ブロックの中で行なうことを考えて下さい。これによりトランザクシ - ョンのオーバーヘッドが減ります。また、大き - なデータの変更を行なう際はインデックスを一度外して、作り直すことを考え - てみて下さい。 - - Administration Guide/Server Run-time Environment/Run-time - Configurationには、 - チューニングのオプションがいくつかあります。fsyncオプションでfsync() - を無効にすることがでい泙后�海譴砲茲辰董�謄肇薀鵐競�轡腑麕茲� - fsync() でディスクを更新するのを止めさせます。 - - shared_buffersオプションを使ってバックエンド・プロセスにより使われる共 - 優瓮皀蝓次Ε丱奪侫,鯊腓くすることもでき - ます。もし、このパラメータを高くしすぎると、カーネルの共有 - メモリー空間の制限値を越えてしまうために postmaster - が走らなくなるでしょう。既定値では、それぞれのバッファの大い気� 8K - で、バッファ数は 1000 です。 - - sort_mem (PostgreSQL 8.0からは: - work_mem)オプションを使って、それぞれのバックエンド・プロセスが一時的� - 癖造拌悗┐砲茲辰道箸Ε瓮皀蝓爾虜蚤腑汽ぅ困鯀�笋垢海箸發任ます。 - 既定値は 1024 (すなわち、1MB)です。 - - また、CLUSTER - コマンドを使って、テーブルのデータをインデックスに合わせるためにグルー - プ化することもでい泙后�椶靴�蓮▲�鵐薀ぅ鵐泪縫絅▲襪� CLUSTER - を見て下さい。 - - 3.7) どのようなデバグ機能が使えますか? - - PostgreSQL - は、デバグのために意味のある、状態情報を報告するいくつかの機能を持ちま - す。 - - まず、--enable-cassert オプションで configure - を走らせます。そうしてコンパイルすることにより、沢山の assert() - が、バックエンドの進捗状況を監視し、何か予期せぬことが起き - るとプログラムを停止するようになります。 - - postmaster と postgres - の両方でいくつかのデバグ・オプションの利用がでい泙后�泙此⊆,里茲Δ� - postmaster を起動するとき - はいつでも、標準出力とエラー出力をログ・ファイルに送るようにしてあるこ - とを確かめて下さい。 - cd /usr/local/pgsql - ./bin/postmaster >server.log 2>&1 & - - これにより PostgreSQL の最上部のディレクトリに server.log - ファイルが置かれます。このファイルはサーバーが遭遇した問題やエラーにつ - いて様僂幣霾鵑魎泙澆泙后�Postmaster は更に詳細な情報を報告するための - -d オプションを持ちます。その -d - オプションは、デバグ・レベルを指定します。高いデバグ・レベルでは、大き - なログファイルを生成することに注意しなくてはなりません。 - - もし、postmasterが走っていなければ、postgresバックエンドをコマンドライ - ンから走らせることがでぁ�樟�SQL文をタイプすることができ - ます。このやりかたは、デバグ目的のとき - だけお奨めします。セミコロンではなく、改行が問い合わせの終りになること - に注意してください。もし、デバグシンボルを入れてコンパイルしていれば、 - デバッガを使って何が起い討い襪�鮓�襪海箸�任ます。postmaster - からバックエンドを開始したわけではないので、独立な環境 - で走っているのではなくロック/バックエンドとの対話の問題が重複すること - はありません。 - - もし、postmasterが走っていれば、あるウィンドウでpsqlを開始すると、SELE - CT pg_backend_pid()を使って、psql で使われる postgres - プロセスのPIDが見つかります。 - デバッガを使ってpostgresのPIDにアタッチ(attach)します。デバッガの中か� - 薀屮譟璽�Ε櫂ぅ鵐箸鬟札奪箸掘�psql - から問い合わせを発行します。デバグのためにpostgresを始動する場合は、PG - OPTIONS="-W n" を設定でぁ△修譴�蕁�psql を開始します。これにより、n - 秒開始を遅らせるはずなので、デバッガでプロセスにアタッチして、ブレーク - ポイントを設定し、開始から順を追って見てゆくことがでい泙后� - - いくつかのlog_*サーバ構成変数は、デバッグと性 - 能測定にとても役に立つプロセスの統計の印刷を可能にします。 - - 何という関数がどのくらい実行時間を食っているかを見るために、プロファイ - リング(プロフィール付き - )でコンパイルすることも可能です。そのバックエンドのプロフィール・ファ - イルは pgsql/data/base/dbname - ディレクトリに格納されるでしょう。クライアントのプロフィールはクライア - ントの現行ディレクトリに置かれるでしょう。Linux - でまともなプロファイリングを行うには -DLINUX_PROFILE - でコンパイルする必要があります。 - - 3.8) 接続しようとするとい� 'Sorry, too many clients' が出るのはなぜですか? - - postmasterが同時始動でき - るバックエンドプロセスに対する制限数を増やす必要があります。 - - 既定の最大プロセスは32プロセスです。-Nに適切な値を引数にしてpostmaster - を再起動するか、PostgreSQL.conf - を修正することによって、その値を増やすことがでい泙后� - - もし、-N を 32よりも大い�垢襪里任△譴弌�-Bも既定の64より大き - い値に増加させなくてはならないし、-B は少なくとも -N - の2倍はなくてはならず、おそらく最高税修鯔召爐覆蕕个修譴茲蠡腓� - い値が必要なはずです。バックエンドプロセスをたくさんにすると、いろいろ - なUnixカーネル構成パラメータも増やすことが必要になるかもしれません。 - 共優瓮皀蝓次Ε屮蹈奪�虜蚤臙�(SHMMAX)、 - セマフォの最大数(SEMMNSとSEMMNI)、 プロセスの最大数(NPROC)、 - ユーザ毎の最大プロセス数(MAXUPRC)、 - 開くファイルの最大数(NFILEとNINODE) も確認事項に含まれます。 - PostgreSQLに許されるバックエンドのプロセス数が制限されているのは、 - システムのリソースを使い果してしまうことを避けるためです。 - - 3.9) pgsql_tmp ディレクトリの中には何がありますか? - - 問い合わせ実行モジュールによって生成された一時的なファイルが、このディ - レクトリに含まれます。例えば、もし ORDER BY - 句を満たすためにバックエンドの -S パラメータで許可した値よりも大き - なスペースがソートの際に必要だとすると、溢れたデータを保持するために一 - 時的なファイルがいくつかここに生成されます。 - - 一時的なファイルは自動的に消し去られるはずですが、もし、ソートの途中で - バックエンドがクラッシュしてしまうとそうはなりません。postmasterの停止 - とリスタートでこれらのファイルはディレクトリから消しさられます。 - [訳注: - SYSLOGD 経由でログを出力するには、まず、configure を --enable-syslog - 付い覗�蕕擦晋紂▲灰鵐僖ぅ襪肇ぅ鵐好函璽襪鮃圓覆い泙后� - 次に、syslog.conf に local?.* の 出力先を指定し(環曲竸瑤琶儿慌椎�)、 - syslogd に HUP シグナルを送って初期化しておい泙后�修靴董� - $PGDATA/pg_options に syslog=2 を加えて、 postmaster を -S - オプション付い砲謄機璽丱癲璽匹乃�阿靴泙后�(バージョン 7.1 からは - pg_options は PostgreSQL.conf になっています。) - ] +2.3) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか? - 3.10) - PostgreSQLのメジャーリリースをアップデートするのにダンプとリストアをしなく� - 討呂覆蕕覆い里呂覆爾任垢�� - - PostgreSQLチームはマイナーリリースでは小さな変更しか行ないませんので、 - 7.2 から 7.2.1 - へのアップグレードにはダンプとリストアの必要はありません。しかし、メジ - ャーリリース(たとえば、7.2から7.3へのような)では、システムテーブルやデ - ータファイルの内部フォーマットの変更をしばしば行ないます。これらの変更 - はたいてい複雑で、そのため我々はデータファイルのための後方互換性 - を維持することができ - ません。ダンプは汎用フォーマットでデータを出力し、それを新しい内部フォ - ーマットに読み込むことがでい泙后� - - ディスク上でのフォーマットに変更のない同一リリースでは、アップグレード - は、ダンプ/リストアではなく、pg_upgrade スクリプトを使うことができ - ます。リリースノートには、pg_upgrade が利用可能なリリースかどうか記 - されています。 - - 3.11) ハードウェアにはどんなコンピュータを使えばよいですか? - - PCハードウェアはほとんど互換性 - がありますので、ほとんどの人は、すべてのPCハードウェアが同じ品質だと思 - い込む傾向があります。しかし、それは間違いです。ECC - RAM、SCSI、および、高品質マザーボードは、安いハードウェアに比べると、� - 茲蠖�蠕が高く、より税修睥匹い里任后�PostgreSQL - はほとんどのハードウェアで稼働しますが、信頼世篝� - 能が重要な場合は、ハードウェアのオプションを研究することが賢 - 明です。メーリングリストでもハードウェアオプションとトレードオフについ - て議論することがでい泙后� - _________________________________________________________________ +もちろん、あります。詳細は、http://techdocs.postgresql.org/guides/GUITools をご +らんください。 + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + 管理上の質問 + +3.1) どのようにすれば /usr/local/pgsql 以外の場所にインストールできますか? + +簡単な方法は、 configure を走らせるときに --prefix オプションを指定することです +。 + +3.2) 他のホストからの接続はどのように制御しますか? + +既定値では、PostgreSQL は Unix ドメインソケット、または、TCP/IP接続のローカルマ +シンからの接続しか許しません。postgresql.conf の中の listen_addresses を修正し +、かつ、$PGDATA/pg_hba.conf ファイルを適切に直して、ホスト主導型認証を有効にし +ないかぎりは、他のマシンからは接続できないでしょう。 + +3.3) より良い性能を得るためには、データベース・エンジンをどのように調整しますか +? + +性能改善の可能性のありそうな主な領域が3つあります: + +クエリの変更 + クエリを修正してより良い性能を得ることを含みます: + □ 式および部分インデックスを含む、インデックスを作成 + □ 複数のINSERTのかわりにCOPYを使用 + □ 複数の文をグループ化し、1つのトランザクションにしてコミットのオーバヘッ + ドを削減 + □ インデックスからから沢山のロウを取り出すときはCLUSTERを使用 + □ クエリの出力のサブセットを返すためにLIMITを使用 + □ 準備されているクエリを使用 + □ オプティマイザの正確な統計を維持するためにANALYZEを使用 + □ VACUUM または pg_autovacuum の常用 + □ 大きなデータ変更のあるときはインデックスを削除 - 操作上の質問 - - 4.1) バイナリ・カーソルと通常カーソルとの厳密な違いは何ですか? - - 詳述は、オンラインマニュアルで DECLARE を見て下さい。 - 4.2) 最初の数ロウのみを SELECTするにはどうしますか?ランダムなロウ? - - オンラインマニュアルでFETCHを見てください。あるいは、SELECT ... - LIMIT....を使ってみて下さい。 +サーバ構成 + postgresql.confの設定のいくつかは性能に影響します。詳しくは、 + Administration Guide/Server Run-time Environment/Run-time Configuration の + 全件リストごらんください( JPUGサイトの日本語版)。そして、解説として、 http: + //www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html および + 、 http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html をごらんく + ださい。 - たとえ、欲しいのは最初の数ロウだけでも、すべての問い合わせを評価しなく - てはならないかもしれません。ORDER BY - を持った問い合わせを使うことを考えてみて下さい。 もし、ORDER - BYに合ったインデックスがあるとすると - PostgreSQLは要求された最初の数ロウだけで評価でき - るかもしれませんが、でなれば、PostgreSQL - は意図したロウが生成されるまですべてのロウを評価しなければならないかも - しれません。 +ハードウェアの選定 + 性能におけるハードウェアの影響は http://candle.pha.pa.us/main/writings/ + pgsql/hw_performance/index.html (JPUGサイトの日本語版) と http:// + www.powerpostgresql.com/PerfList/ に述べられています。 - ランダムなロウをSELECTするには、次の文を使います: + +3.4) どのようなデバグ機能が使えますか? + +サーバ構成変数には多くの log_* があり、クエリとプロセスの統計を出力することがで +き、デバグと性能計測にとても便利です。 + +3.5) 接続しようとするときに 'Sorry, too many clients' が出るのはなぜですか? + +既定での制限である 100 のデータベースセッションに達してしまっています。 +postmasterが同時接続できるバックエンドプロセスの制限数を増やす必要があります。 +postgresql.conf の中の max_connections の値を変更して postmasterを再起動するこ +とで可能になります。 + +3.6) PostgreSQLのメジャーリリースをアップデートするのにダンプとリストアをしなく +てはならないのはなぜですか? + +PostgreSQLチームはマイナーリリースでは小さな変更しか行ないませんので、7.4.0 か +ら 7.4.1 へのアップグレードにはダンプとリストアの必要はありません。しかし、メジ +ャーリリース(たとえば、7.2から7.3へのような) では、システムテーブルやデータファ +イルの内部フォーマットの変更をしばしば行ないます。これらの変更はたいてい複雑で +、そのため我々はデータファイルのための後方互換性を維持することができません。ダ +ンプは汎用フォーマットでデータを出力し、それを新しい内部フォーマットに読み込む +ことができます。 + +3.7) ハードウェアにはどんなコンピュータを使えばよいですか? + +PCハードウェアはほとんど互換性がありますので、ほとんどの人は、すべてのPCハード +ウェアが同じ品質だと思い込む傾向があります。しかし、それは間違いです。ECC RAM、 +SCSI、および、高品質マザーボードは、安いハードウェアに比べると、より信頼性が高 +く、より性能も良いのです。 PostgreSQL はほとんどのハードウェアで稼働しますが、 +信頼性や性能が重要な場合は、ハードウェアのオプションを研究することが賢明です。 +メーリングリストでもハードウェアオプションとトレードオフについて議論することが +できます。 + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + + 操作上の質問 + +4.1) 最初の数ロウのみを SELECTするにはどうしますか?ランダムなロウ? + +たったの数行のロウを取り出すために、何行必要かがわかれば、 SELECT のときに +LIMIT を使います。 ORDER BYにインデックスがマッチした場合、まったくクエリが実行 +されないこともあります。SELECT のときに何行が必要かを知らなければ、カーソルを使 +いFETCHします。 + +ランダムロウをSELECTするには、次の文を使います: + SELECT col FROM tab ORDER BY random() LIMIT 1; - 4.3) テーブルやその他の情報のリストを psql で見るにはどうしますか? - - psqlの中で、 \dt コマンドを使ってテーブルを見ます。psql - の中のコマンドの完全なリストには \? - を使えます。あるいは、psqlのソースコードのpgsql/src/bin/psql/describe. - cファイルを見ることもでき - て、その中にはpsqlのバックスラッシュコマンドの出力を生成するSQLコマン� - 匹�泙泙譴討い泙后�泙拭�psqlを -E - オプションと一緒に開始すると、実行させたコマンドを実行するために使う問 - い合わせを出力するようになります。PostgreSQLはまた、SQLi対応の - INFORMATION SCHEMA - インターフェースを用意していて、データベースについての情報を得るために - 問い合わせを使うことがでい泙后� - - 4.4) - テーブルからカラムの削除、あるいは、データ型を変更するにはどうしますか? - - DROP COLUMN機能が、ALTER TABLE DROP COLUMN としてリリース7.3 - に加えられました。それまでのバージョンでは、その代わりにこうします: - BEGIN; - LOCK TABLE old_table; - SELECT ... -- 削除したいカラム以外のカラムをすべて選択します。 - INTO TABLE new_table - FROM old_table; - DROP TABLE old_table; - ALTER TABLE new_table RENAME TO old_table; - COMMIT; - - カラムのデータタイプは次の文で変えられます: +4.2) 定義されたテーブル、インデックス、データベース、および、ユーザをどのように +して見つけ出しますか?psqlで使われているクエリを表示するにはどうしますか? + +psql の中で \dtコマンドをを使ってテーブルを見ることができます。psqlの中で \? を +使って、コマンドの全リストを調べることができます。一方で、psql のソースコードで +、バックスラッシュコマンドを出力する pgsql/src/bin/psql/describe.c ファイルを読 +むこともできます。その中には、 SQL コマンドを生成する部分も含まれます。また、 +-E オプションを付けて psql を開始すると、入力されたコマンドを実行するためのクエ +リを印字出力するようになります。 PostgreSQLは SQL 準拠の INFORMATION SCHEMA イ +ンターフェースを提供しますので、データベースについての情報を問い合わせることも +できます。 + +pg_ で始まるシステムテーブルでもこれらを記述することができます。 + +psql -lを使うと全てのデータベースをリスとします。 + +それと、pgsql/src/tutorial/syscat.source を試してみてください。そこには、データ +ベースのシステムテーブルから情報を得るために必要な SELECT 文が沢山あります。 + +4.3) カラムのデータ型を変更するにはどうしますか? + +カラムのデータ型の変更は 8.0 以降では、 ALTER TABLE ALTER COLUMN TYPE を使うこ +とにより間単になりました。 + +それより前のバージョンでは、以下のようにします: + BEGIN; ALTER TABLE tab ADD COLUMN new_col new_data_type; UPDATE tab SET new_col = CAST(old_col AS new_data_type); ALTER TABLE tab DROP COLUMN old_col; COMMIT; - これを行なったとき - は、抹消された行が使っているディスク空間を回収するためにVACUUM FULL - tabをしたほうが良いかもしれません。 - - 4.5) ロウ、テーブル、データベースの最大サイズは? - - 制限は以下のとおりです。 -データベースの最大サイズ? 制限無し (32 TB のデータベースも存在します) -テーブルの最大サイズ? 32TB -ロウの最大サイズ? 1.6TB -フィールドの最大サイズ? 1GB -テーブル内での最大ロウ数? 制限無し -テーブル内での最大カラム数? カラムの型により250-1600 -テーブル内での最大インデックス数? 制限無し - - もちろん、これらは実際は無制限ではなく、ディスク容量とメモリーやスワッ - プスペースの大い気砲茲蠕�造気譴泙后�能はこれらの値がことのほか大き - な時に煽りを受けます。 - - 最大テーブルサイズの32TBはオペレーティングシステムによる巨大ファイルの - サポートは必要としません。巨大なテーブルは複数の1GBのファイルに分けて� - 歛犬気譴泙垢里如▲侫.ぅ襯轡好謄爐寮�造禄斗廚任呂△蠅泙擦鵝� - - デフォルトのブロックサイズを32kにすることで、最大テーブルサイズと最大� - �薀狄瑤箸鬘看椶砲垢襪海箸�任ます。 - - 4.6) 一般的なテキ - ストファイルからデータを保存するには、データベースのディスク容量はどのくら� - ど�廚任后� - - 普通のテゥ好肇侫.ぅ襪� PostgreSQL - のデータベースに保存するには、最大で約5倍のディスク容量を必要とします� - � +これを行なったときは、抹消された行が使っているディスク空間を回収するために +VACUUM FULL tabをしたほうが良いかもしれません。 + +4.4) ロウ、テーブル、データベースの最大サイズは? + +制限は以下のとおりです: + + データベースの最大サイズ? 制限無し (32 TB のデータベースも存在しま + す) + テーブルの最大サイズ? 32 TB + ロウの最大サイズ? 1.6TB + フィールドの最大サイズ? 1 GB + テーブル内での最大ロウ数? 制限無し + テーブル内での最大カラム数? カラムの型によって 250-1600 + テーブル内での最大インデックス 制限無し + 数? - 例題として、各行に整数とテゥ好筏述を持つ 100,000行のファイルを考え - てみましょう。テキ - ストの文字列の平均長さを20バイトと仮定すると、フラット ファイルの大き - さは約2.8MB です。このデータを含む PostgreSQL データベース - ファイルの大い気麓,里茲Δ北�6.4MBと見積もることがでい泙后� +もちろん、これらは実際は無制限ではなく、ディスク容量とメモリーやスワップスペー +スの大きさにより制限されます。性能はこれらの値がことのほか大きな時に煽りを受け +ます。 + +最大テーブルサイズの32TBはオペレーティングシステムによる巨大ファイルのサポート +は必要としません。巨大なテーブルは複数の1GBのファイルに分けて保存されますので、 +ファイルシステムの制限は重要ではありません。 + +デフォルトのブロックサイズを32kにすることで、最大テーブルサイズと最大カラム数と +を4倍にすることができます。 + +4.5) 一般的なテキストファイルのデータを保存するには、データベースのディスク容量 +はどのくらい必要です? + +普通のテキストファイルを PostgreSQL のデータベースに保存するには、最大で約5倍の +ディスク容量を必要とします。 + +例題として、各行に整数とテキスト記述を持つ 100,000行のファイルを考えてみましょ +う。テキストの文字列の平均長さを20バイトと仮定すると、フラットファイルの大きさ +は約2.8MB です。このデータを含む PostgreSQL データベースファイルの大きさは次の +ように約6.4MBと見積もることができます: + 32 bytes: 各ロウのヘッダ(概算) - 24 bytes: 整数(int)フィールドとテゥ好�(text)フィールド + 24 bytes: 整数(int)フィールドとテキスト(text)フィールド + 4 bytes: ページ上のタップルへのポインタ ---------------------------------------- 60 bytes per row @@ -975,554 +613,340 @@ 100000 data rows -------------------- = 782 database pages (切り上げ) 128 rows per page - + 735 database pages * 8192 bytes per page = 6,021,120 bytes (6 MB) - インデックスは、これほどのオーバヘッドは要求しませんが、インデックス付 - けされるデータを含む以上、それなりに大い�覆蠅泙后� - - NULLはビットマップとして保存されていて、それらがわずかにスペースを使い - ます。 - - 4.7) - 定義されたテーブル、インデックス、データベース、および、ユーザをどのように� - 靴童�弔噂个靴泙垢�� - - psql - にはいろいろなバックスラッシュ・コマンドがあり、こうした情報を表示しま - す。バックスラッシュ・コマンドの種類を見るには \? - を使って下さい。また、pg_ で始まるシステムテーブルにも記 - 述されています。さらに、psql -l - はすべてのデータベースをリスト表示します。 - - また、pgsql/src/tutorial/syscat.source - ファイルを走らせてみて下さい。それは、沢山の SELECT - 文により必要な情報をデータベースのシステム・テーブルから取り出して例示 - してくれます。 - - 4.8) - 問い合わせが遅いうえ、インデックスを使っている様子がありません。なぜですか� - � - - インデックスは自動的にすべての問い合わせで使われるわけではありません。 - テー ブルが最小サイズより大き - く、問い合わせでそのわずかなパーセンテージのロウを - 選択する時だけ、インデックスは使われます。これはインデックススキ - ャンによ - り起こされるランダムなディスクアクセスは、テーブルをストレートに読む順 - 次 走査よりも遅くなることがあるからです。 - - インデックスを使うかを決定するために、PostgreSQL はテーブルについ - ての統計情報を持たなければなりません。この統計情報は、VACUUM - ANALYZEまたは、単に ANALYZE を使って収集すること ができ - ます。統計情報を使ってオブティマイザはテーブルの中にあるロウ数を知 - り、インデックスを使うべい�侶萃蠅鬚茲蠕気靴�任ます。統計情報は最適 - な結合順や結合方法を決める上でも貴重なものもあります。統計情報の収集は - 、 テーブルの内容がかわると毎に繰返しなされるべい任后� - - インデックスは、通常 ORDER BY や結合を行な - うためには使われません。順次スキ - ャンに続く明示的ソートは、巨大なテーブル のインデックススキ - ャンよりも普通は高速です。 - - しかし、ORDER BYと組み合わされたLIMIT - は、テーブルの小さな部分を返すためにたびたびインデックスを使うでしょう - 。 実際、MAX() や MIN() - がインデックスを使わないとしても、このような値を ORDER BY と LIMIT - を使ってインデックスを使って取り出すことが可能です: +インデックスは、これほどのオーバヘッドは要求しませんが、インデックス付けされる +データを含む以上、それなりに大きくなります。 + +NULLはビットマップとして保存されていて、それらがわずかにスペースを使います。 + +4.6) クエリが遅いのはなぜでしょう?なぜ、インデックスが使われないのでしょうか? + +インデックスは、すべてのクエリで使われるわけではありません。テーブルが最小サイ +ズより大きく、クエリでそのわずかなパーセンテージのロウを選択する時だけ、インデ +ックスは使われます。これはインデックススキャンにより起こされるランダムなディス +クアクセスは、テーブルをストレートに読む順次走査よりも遅くなることがあるからで +す。 + +インデックスを使うかを決定するために、PostgreSQL はテーブルについての統計情報を +持たなければなりません。この統計情報は、 VACUUMANALYZEまたは、単に ANALYZE を使 +って収集することができます。統計情報を使ってオブティマイザはテーブルの中にある +ロウ数を知り、インデックスを使うべきかの決定をより正しくできます。統計情報は最 +適な結合順や結合方法を決める上でも貴重なものもあります。統計情報の収集は、テー +ブルの内容がかわると毎に繰返しなされるべきです。 + +インデックスは、通常 ORDER BY や結合を行なうためには使われません。順次スキャン +に続く明示的ソートは、巨大なテーブルのインデックススキャンよりも普通は高速です +。 + +しかし、ORDER BYと組み合わされたLIMIT は、テーブルの小さな部分を返すためにたび +たびインデックスを使うでしょう。実際、MAX() や MIN() がインデックスを使わないと +しても、このような値をORDER BY と LIMIT を使ってインデックスを使って取り出すこ +とが可能です: + SELECT col FROM tab ORDER BY col [ DESC ] LIMIT 1; - もし、オプティマイザが間違ってシーケンシャルスキ - ャンを選択したことに疑いがなければ、SET enable_seqscan TO - 'off'を使ってインデックススキ - ャンでまちがいなく速くなっているかをテストをしてみてください。 - - LIKE あるいは ~ のようなワイルドカード演算 子は特別な環境 - でしか使えません: - * 検索文字列が文字列の最初にいます。たとえば: - + LIKE パターンが%で始まらない - + ~ (正規表現) パターンは^で始まらなければならない - * 検索文字列を文字クラスから始めることはでい泙擦鵝�燭箸┐弌�[a-e]。 - * ILIKE や ~* のような大文字と小文字を区別し - ない検索は使えません。そのかわり、このFAQの4.12節で説明する関数の� - ぅ鵐妊奪�垢�箸┐泙后� - * initdb においては、デフォルトでCロケールが使われな - くてはなりません。その理由は、Cロケール以外では次に大き - な文字を知ること ができ - ないからです。このような場合、LIKEインデクシングにだけ - 働くような、特別なtext_pattern_opsインデックスを作成 - することもでい泙后� - - 8.0より前のリリースでは、インデックスは、データ型がちょうどインデック� - 垢離�薀爐侶燭醗戝廚靴覆韻譴弌∋箸┐覆い海箸�靴个靴个△蠅泙靴拭��修 - 蕕��int2, int8, および numeric 等のカラムのインデックスがそうです。 - [訳注: 強制的にインデックスを使うには SET enable_seqscan = off - を実行します。 ] - - 4.9) - 問い合わせオブティマイザがどのように問い合わせを評価するのかを見るにはどう� - 靴泙垢�� - - オンラインマニュアルで EXPLAIN を見て下さい。 - - 4.10) R-tree インデックスとは何ですか? - - R-tree - インデックスは空間的なデータにインデックスを付けるために使われます。ハ - ッシュインデックスでは範囲の検索がでい泙擦鵝�泙拭�B-tree - インデックスでは、1次元でしか範囲の検索がでい泙擦鵝�R-tree - インデックスであれば多次元のデータを扱えます。たとえば、もし R-tree - インデックスを point 型の属世防佞韻襪海箸�任� - るとするとシステムは、「長方形に囲まれた点をすべて選択する」というよう - な問い合わせに、より効率良く答えられます。 - - R-Tree の設計の原典となる権威ある論文は: - - Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial - Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of - Data, 45-57. - - この論文は、Stonebraker 教授の "Readings in Database Systems" - でも取り上げられています。 - [訳注: - 奈良先端大の石川佳治さんよりR-Tree関係の文献を紹介して頂い泙靴拭� - 日本語 Postgres ML のアーカイブから "Subject: [postgres95 801] spatialdata structures" - http://www.sra.co.jp/people/t-ishii/PostgreSQL/mhonarc/pgsql-jp/1996Oct/msg00007.html - をご覧下さい。 - ] +もし、オプティマイザが間違ってシーケンシャルスキャンを選択したことに疑いがなけ +れば、SET enable_seqscan TO 'off'に設定して、クエリをもう一度実行視、インデック +ススキャンがまちがいなく速くなっているかどうかをみてください。 - 組込みの R-Tree でポリゴンやボックスを操作でい泙后M�静�砲�R-Tree - はもっと高い次元を操作するようにも拡張でい泙后�村租�砲蓮�R-Tree - の拡張にはちょっとした作業が必要でして、現在、我々はそれをどのようにす - るかについての文書を持っていません。 - [訳注: - R-Tree インデックスはGiSTで開発されています。 - http://www.sai.msu.su/~megera/postgres/gist/ - ] +LIKE あるいは ~ のようなワイルドカード演算子は特別な環境でしか使えません: - 4.11) 遺伝的問い合わせ最適化とは何ですか? - - GEQO モジュールは、沢山のテーブルを結合するとき - に、遺伝的アルゴリズム(GA)で問合わせを高速化します。これにより、しらみ - つぶしに探索を行なわなくても、大い雰觜�(join queries)を扱うことができ - るようになります。 + ・ 検索文字列が文字列の最初にききます。たとえば: + □ LIKE パターンが%で始まらない + □ ~ (正規表現) パターンは^で始まらなければならない + ・ 検索文字列を文字クラスから始めることはできません。たとえば、[a-e]。 + ・ ILIKE や ~* のような大文字と小文字を区別しない検索は使えません。そのかわり + 、このFAQの4.8節で説明する式インデックスが使えます。 + ・ initdb においては、デフォルトでCロケールが使われなくてはなりません。その理 + 由は、Cロケール以外では次に大きな文字を知ることができないからです。このよう + な場合、 - 4.12) - 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現� - 靴泙垢��臺源悊半�源悊箸魘菠未靴覆じ〆�里燭瓩離ぅ鵐妊奪�垢呂匹里茲Δ忙� - いますか? + LIKE - ~演算子は正規表現照合を行ない、~* - は大文字と小文字を区別しない(case-insensitive)正規表現照合を行います。 - 大文字と小文字を区別しない LIKE 演算子を ILIKE といいます。 + インデクシングにだけ働くような、特別な - 大文字と小文字を区別しない等値比較は次のように表現でい襦� + text_pattern_ops + + インデックスを作成することもできます。 + +8.0より前のリリースでは、インデックスは、データ型がちょうどインデックスのカラム +の型と一致しなければ、使えないことがしばしばありました。おそらく、int2, int8, +および numeric 等のカラムのインデックスがそうです。 + +4.7) 問い合わせオブティマイザがどのように問い合わせを評価するのかを見るにはどう +しますか? + +オンラインマニュアルで EXPLAIN を見てください。 + +4.8) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現 +しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使い +ますか? + +~演算子は正規表現照合を行ない、~* は大文字と小文字を区別しない +(case-insensitive)正規表現照合を行います。大文字と小文字を区別しない LIKE 演算 +子を ILIKE といいます。 + +大文字と小文字を区別しない等値比較は次のように表現できる: + SELECT * FROM tab WHERE lower(col) = 'abc'; - 標準インデックスでは使われず、しかしながら、もし関数インデックスを - 作ったならそれが使われるでしょう。 - CREATE INDEX tabindex ON tab (lower(col)); +標準インデックスでは使われず、しかしながら、もし、式インデックスを作ったならそ +れが使われるでしょう。 + CREATE INDEX tabindex ON tab (lower(col)); - 4.13) 問い合わせの中で、フィールドが NULL - であることを検出するにはどうしますか? - - カラムを IS NULL と IS NOT NULL とで試してみます。 - - 4.14) 様々な文字型のそれぞれの違いは何ですか? - -Type Internal Name Notes --------------------------------------------------- -VARCHAR(n) varchar 最大長のサイズを指定する、詰め物無し -CHAR(n) bpchar 指定された固定長となるように空白が詰められる -TEXT text 長さに上限の無いテゥ好� -BYTEA bytea 可変長のバイト配列(null-byte safe) -"char" char 1文字 - - 内部名にお目にかかるのは、システム・カタログを調べるとき - や、エラーメッセージを受け取るとい任后� - - 上気侶燭里Δ塑能蕕裡瓦弔侶燭� "varlena" - 型です(すなわち、ディスクの最初の4バイトがデータ長で、それの後に実際� - 離如璽燭�海ます)。このように実際の空間は宣言された大い気茲蠅眈�径腓� - くなります。しかし、これらのデータ型はTOASTにより圧縮されたり複数ロウ� - 謀呂辰栃歛犬気譴燭蠅靴董▲妊�好�紊龍�屬六廚辰燭茲蠑�気�覆蠅泙后� - - VARCHAR(n) は可変長の文字列を保存するのに最適ですが、保存でき - る文字列の長さに制限があります。TEXT - は長さに制限の無い文字列の保存のためのもので、最大で 1ギガバイトです。 - CHAR(n)は、VARCHAR(n)が与えられた文字だけを保存するのに対し、ブランク� - 魑佑畊�鵑任い弔眛韻個垢気琶源﨓鵑鯤歛犬垢襪里忘播�任后�BYTEAは、部分 - 的にNULL - のバイトを含むバイナリデータを保存するためのものです。これらのタイプは - 同じくらいの税銃胆をもちます。 +4.9) クエリの中で、フィールドがNULL であることを検出するにはどうしますか?フィ +ールドがNULLかどうかでどのようにソートができますか? + +以下のように、IS NULL と IS NOT NULLで、そのカラムをテストしてみます: + + SELECT * + FROM tab + WHERE col IS NULL; + +NULL状態でソートするには、IS NULL と IS NOT NULL の修飾子を ORDER BY 句の中で使 +ってみます。true のものは false のものよりも高い値として並べられますので、次の +例では NULL の記載が結果リストの上部に置かれます。 + + SELECT * + FROM tab + ORDER BY (col IS NOT NULL) + +4.10) いろいろな文字型のそれぞれの違いは何ですか? + + 型 内部名 備考 + VARCHAR(n) varchar 最大長のサイズを指定する、詰め物無し + CHAR(n) bpchar 指定された固定長となるように空白が詰められる + TEXT text 長さに特別な上限は無し + BYTEA bytea 可変長のバイト配列(null-byte safe) + "char" char 1文字 - 4.15.1) 通番(serial)/自動増分フィールドはどのようにつくりますか? - - PostgreSQL は SERIAL - データ型をサポートします。カラム上にシーケンスを自動作成します。たとえ - ば、 - CREATE TABLE person ( - id SERIAL, - name TEXT - ); - - は自動的に次のように翻訳されます: - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); +内部名にお目にかかるのは、システム・カタログを調べるときや、エラーメッセージを +受け取るときです。 + +上記の型のうち最初の4つの型は "varlena" 型です(すなわち、ディスクの最初の4バ +イトがデータ長で、それの後に実際のデータが続きます)。このように実際の空間は宣言 +された大きさよりも少し大きくなります。しかし、長い値は圧縮されるので、ディスク +上の空間は思ったよりも小さくなります。 + +VARCHAR(n) は可変長の文字列を保存するのに最適ですが、保存できる文字列の長さに制 +限があります。TEXT は長さに制限の無い文字列の保存のためのもので、最大で 1ギガバ +イトです。 CHAR(n)は、VARCHAR(n)が与えられた文字だけを保存するのに対し、ブラン +クを詰め込んでいつも同じ長さで文字列を保存するのに最適です。BYTEAは、部分的に +NULL のバイトを含むバイナリデータを保存するためのものです。これらのタイプは同じ +くらいの性能特性をもちます。 + +4.11.1) 通番(serial)/自動増分フィールドはどのようにつくりますか? +PostgreSQL は SERIAL データ型をサポートします。カラム上にシーケンスを自動作成し +ます。たとえば、 + + CREATE TABLE person ( + id SERIAL, + name TEXT + ); + +は自動的に次のように翻訳されます: + + CREATE SEQUENCE person_id_seq; + CREATE TABLE person ( + id INT4 NOT NULL DEFAULT nextval('person_id_seq'), + name TEXT + ); [訳注: CREATE UNIQUE INDEX person_id_key ON person ( id ); - は、 7.3 からは自動的には行なわれなくなりました。 + は、 7.3 以降は自動的には行なわれなくなりました。 ] - 通番についてのもっと詳しい情報は、オンラインマニュアルで - create_sequence をご覧下さい。 - - また、各ロウのOIDフィールドを一意値として使うこともでき - ます。しかしながら、もしもデータベースをダンプしてリロードする必要があ - る場合は、OIDを温存するためにpg_dump で - -oオプションを使うか、または、COPY WITH - OIDSオプションを使う必要があります。 - - 4.15.2) SERIALデータ型に挿入される値は、どうすれば得られますか? - - ひとつの方法は、nextval() 関数を使ってその値を挿入する前(before)に - SEQUENCE オブジェクトから次の SERIAL - 値を取り出し、それから実際に挿入をすることです。4.15.1 - のテーブルの例を使うとすると、疑似言語ではこのようになります。 - new_id = execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); - - そうして、new_id に保存した新しい値を他の問い合わせに(たとえば、person - テーブルに対する外部ァ�(foreign - key)のように)使うとよいでしょう。自動的に作られたSEQUENCEオブジェクト� - 量樵阿蓮�<table>_<serialcolumn>_seq のようになり、このうち、table と - serialcolumn はそれぞれテーブルの名前とSERIALカラムの名前です。 - - あるいは、与えられたSERIAL値を、それが既定値として挿入された後で(after - )、 currval() 関数を使って取り出すこともでい泙后�燭箸┐弌� - execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - new_id = execute("SELECT currval('person_id_seq')"); - - 最後に、INSERT文から返るOIDを使って、既定値をみつけることもでき - ますが、しかし、oidの値は40億に達するともとに戻ってしまい、最も移植性 - の低いやり方となるでしょう。Perl DBI の DBD::Pg - モジュールを使えば、$sth->execute() の後に $sth->{pg_oid_status} - を経由してその OID 値を使えるようにすることはでい泙后� - - 4.15.3) currval() は他のユーザとの競合状態に陥ることはないですか? - - それはありません。currval() - は、すべてのユーザではありませんが、あなたのバックエンドに与えられた現 - 在の値を返します。 - - 4.15.4) トランザクションが中断したとき - にもういちどシーケンス番号が使われないのはなぜですか?シーケンス/SERIALカ� - 薀爐剖�があるのはなぜですか? - - 同時性 - を改善するために、実行中のトランザクションに、必要でトランザクションが - 終了するまでロックされないシーケンス値を与えています。このためトランザ - クションが中断されると番号割り当てにギャップを生じます。 - - 4.16) OID とは何ですか? TID とは何ですか? - - OID とは一意のロウID に対する PostgreSQL の答えです。PostgreSQL - の中でつくられるすべてのロウは一意の OID を得ます。initdb で発生される - OID はすべて 16384 (include/access/transam.h - から)より小さな値です。initdb 後のすべての OID - (ユーザ作成)はそれ以上の値になります。 既定では、これらすべての - OIDは一つのデーブルやデータベース内に留まらず、PostgreSQL - インストレーション全体の中で一意です。 - - PostgreSQL - はテーブル間のロウを結びつけるために、そのシステムテーブル内に OID - を使います。この OID - は特定のユーザのロウを識別するためや結合の中で使われることができ - ます。OID の値を保存するためには OID - 型をカラムに使うことを奨めます。より速くアクセスするために OID - フィールドにインデックスを作ることがでい泙后� OID - は、全てのデータベースで使われる中央領域から、全ての新しいロウに割り当 - てられます。OID を他の何かに変えたい、あるいは元の OID - もテーブルと一緒にコピーしたいのなら、でい覆�呂△蠅泙擦鵝� - CREATE TABLE new_table(mycol int); - SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table; - COPY tmp_table TO '/tmp/pgtable'; - COPY new_table WITH OIDS FROM '/tmp/pgtable'; - DROP TABLE tmp_table; - - OID - は、4バイトの整数として保存されているので、40億を越えると溢れてしまう� - 任靴腓ΑC�發海譴��� - たと報告してくる人はいませんでしたが、そうなる前にこの制限を取り除くこ - とを計画しています。 - - TID - は特定の物理ロウをそのブロックとオフセット値で識別するために使われます - 。TID はロウが修正されたり再ロードされると変わります。それらの TID - は、物理ロウを指すためにインデックス戯椶濃箸錣譴泙后� - - 4.17) PostgreSQL で使われるいくつかの用語の意味は何ですか? - - いくつかのソースコードや古い文書の中には、それぞの専門分野の中でもっと - 一般的に使われる専門用語が使われています。 - * テーブル(table)、関係(relation)、クラス(class) - * ロウ(row)、レコード(record)、タップル(tuple) - * カラム(column)、フィールド(field)、属�(attribute) - * 取得(retrieve)、選択(select) - * 置換(replace)、更新(update) - * 追加(append)、挿入(insert) - * OID, 連番(serial value) - * ポータル(portal), カーソル(cursor) - * 領域変数(range variable)、テーブル名(table - name)、テーブル別名(table alias) - - 一般的なデータベース用語のリストは:http://hea-www.harvard.edu/MST/sim - ul/software/docs/pkgs/pgsql/glossary/glossary.html で見つけられます。 - - 4.18) エラーメッセージ "ERROR: Memory exhausted in - AllocSetAlloc()"が出るのはなぜですか? - - おそらく、システムの仮想メモリーを全て使い果たしてしまっている可能性 - があるか、カーネルがあるリソースについてもつ制限値が低すぎる可能性 - があります。 postmaster を始動する前にこれを試してみて下さい: - ulimit -d 262144 - limit datasize 256m - - シェルによって、どちらかひとつが成功するでしょうが、これはプロセスのデ - ータセグメント制限をより高く設定し、たぶん問い合わせが完結するようにな - るでしょう。このコマンドは現行のプロセスと、このコマンドを走らせた後に - 作られる全てのサブプロセスについて適用されます。バックエンドがとても多 - くのデータを返すためにSQL - クライアントで問題が続いているのであれば、クライアントを開始する前にこ - れを試してみてください。 - - 4.19) どのバージョンの PostgreSQL - を走らせているかを調べるにはどうしますか? - - psql から SELECT version(); をタイプします。 - - 4.20) ラージ・オブジェクトの操作でinvalid large obj descriptor - を受け取りました。なぜでしょうか? - - ラージ・オブジェクト操作をするとい蓮∩宛紊�BEGIN - WORKとCOMMITを付ける必要があります。すなわち、lo_open ... - lo_closeをはさみ込みます。 - - 現在は、PostgreSQLのトランザクションのコミット時にラージ・オブジェクト - ・ハンドルを閉じることにより、lo_openコマンドが完了した直後に強制的に� - 襦璽襪鮗孫圓靴泙后�海里燭瓠∈能蕕縫魯鵐疋襪紡个靴堂燭�鬚靴茲Δ箸垢襪 - 函�invalid large obj descriptor(ラージ・オブジェクトの記 - 述子が不正)となります。それで、もし、トランザクションを使うのを忘れる� - 函◆幣�覆�箸發曚箸鵑匹了�屐貌�い討い織魁璽匹�┘蕁璽瓮奪察璽犬鮟个 - 垢里任后� - - もし、ODBCのようなクライアントインターフェイスをお使いなら、auto-commi - t offを設定する必要があるかもしれません。 - - 4.21) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか? - - CURRENT_TIMESTAMPを使います: - CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); +通番についてのもっと詳しい情報は、オンラインマニュアルで create_sequence をごら +んください。 + +4.11.2) SERIALデータ型に挿入される値は、どうすれば得られますか? + +ひとつの方法は、nextval() 関数を使ってその値を挿入する前(before)に SEQUENCE オ +ブジェクトから次の SERIAL 値を取り出し、それから実際に挿入をすることです。 +4.11.1 のテーブルの例を使うとすると、疑似言語ではこのようになります。 + + new_id = execute("SELECT nextval('person_id_seq')"); + execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); + +そうして、new_id に保存した新しい値を他のクエリ(たとえば、 person テーブルに対 +する外部キー(foreign key)のように)使うとよいでしょう。自動的に作られたSEQUENCE +オブジェクトの名前は、<table>_<serialcolumn>_seq のようになり、このうち、table +と serialcolumn はそれぞれテーブルの名前とSERIALカラムの名前です。 + +あるいは、与えられたSERIAL値を、それが既定値として挿入された後で(after)、 +currval() 関数を使って取り出すこともできます。たとえば、 + + execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); + new_id = execute("SELECT currval('person_id_seq')"); + +4.11.3) currval() は他のユーザとの競合状態に陥ることはないですか? + +それはありません。currval() は、すべてのユーザではありませんが、読者のセッショ +ンに与えられた現在の値を返します。 + +4.11.4) トランザクションが中断したときにもういちどシーケンス番号が使われないの +はなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか? + +同時性を改善するために、実行中のトランザクションに、必要に応じてトランザクショ +ンが終了するまでロックされないようシーケンス値を与えています。このためトランザ +クションが中断されると番号割り当てにギャップを生じます。 + +4.12) OID とは何ですか? CTID とは何ですか? + +PostgreSQLでつくられるすべてのロウは、WITHOUT OIDS でつくられないかぎり一意の +OIDを得ます。 OIDは自動的に4バイトの整数で与えられ、それは、全インストレーショ +ンを通して一意な値となります。しかし、約40億でオーバーフローし、そして、OIDは重 +複をしはじめます。PostgreSQLは内部システムテーブルを一緒にリンクするtためにOID +を使います。 + +ユーザのテーブルのカラムに一意の番号を付けるためには、 OID ではなく SERIAL を使 +うのが最もよいでしょう。SERIALの連番は1つのテーブル内でのみ一意になるからで、オ +ーバーフローを起こしにくいと考えられます。 8バイトのシーケンス値を保存するため +に、SERIAL8があります。 + +CTID は、特定の物理ロウをブロックとオフセットの値で識別するために使われます。 +CTIDは、ロウが修正されたり再読込みされたときに変わります。また、物理ロウを差す +ためにインデックスの記載に使われます。 + +4.13) エラーメッセージ "ERROR: Memory exhausted in AllocSetAlloc()"が出るのはな +ぜですか? + +おそらく、システムの仮想メモリーを全て使い果たしてしまっている可能性があるか、 +カーネルがあるリソースについてもつ制限値が低すぎる可能性があります。postmaster +を始動する前にこれを試してみてください: + + ulimit -d 262144 + limit datasize 256m + +シェルによって、どちらかひとつが成功するでしょうが、これはプロセスのデータセグ +メント制限をより高く設定し、たぶんクエリが完結するようになるでしょう。このコマ +ンドは現行のプロセスと、このコマンドを走らせた後に作られる全てのサブプロセスに +ついて適用されます。バックエンドがとても多くのデータを返すためにSQL クライアン +トで問題が続いているのであれば、クライアントを開始する前にこれを試してみてくだ +さい。 + +4.14) どのバージョンの PostgreSQL を走らせているかを調べるにはどうしますか? + +psql から SELECT version(); をタイプします。 + +4.15) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか? + +CURRENT_TIMESTAMPを使います: + + CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); + +4.16) 外部結合(outer join)はどのように実現しますか? + +PostgreSQL は SQL 標準構文を使う外部結合(アウタージョイン)をサポートします。こ +こに 2つの例題があります。 + + SELECT * + FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); + +あるいは + + SELECT * + FROM t1 LEFT OUTER JOIN t2 USING (col); + +これらの象徴的なクエリでは t1.col を t2.col と結合して、t1 の結合されなかったロ +ウ(t2 と一致しなかったロウ)も返しています。RIGHT 結合は t2 の結合されなかったロ +ウを加えるでしょう。FULL 結合は、一致したロウに t1 と t2 からは結合されなかった +ロウを返すでしょう。OUTER という言葉はオプションで LEFT, RIGHT, または FULL な +どの結合を仮定されています。通常、結合はINNER結合と呼ばれます。 + +4.17) 複数のデータベースを使う問い合わせはどのようにすればできますか? + +現行のデータベース以外への問い合わせの方法はありません。というのもPostgreSQLが +データベース仕様のシステムカタログを読み込むためで、そこには、たとえそのふりを +するだけにしろ、データベースを越えて問い合わせをするすべがありません。 + +contrib/dblink はデータベース間(cross-database)の問い合わせを関数呼出しにより許 +します。もちろん、クライアントは同時に接続を別のデータベースへも張らなくてはな +らず、結果をクライアント側でマージしなくてはなりません。 + +4.18) 関数から複数のロウまたはカラムを返すにはどうしますか? + +集合を返す関数(Set Returning Functions): http://techdocs.postgresql.org/guides/ +SetReturningFunctions を使うと簡単です + +。 + +4.19) PL/PgSQL の関数の中で一時テーブルにアクセスするとき、どうして "relation +with OID ##### does not exist" というエラーを受け取るのでしょうか? + +PL/PgSQL は関数スクリプトをキャッシュし、不幸にもその副作用で、 PL/PgSQL関数が +一時テーブルにアクセスする場合、後でそのテーブルを消して作りなおされ、関数がも +う一度呼び出されると、その関数はキャッシュしている関数の内容はまだ古い一時テー +ブルを差し示したままだからです。この、解決策として、PL/PgSQLの中で EXECUTE を一 +時テーブルへのアクセスのために使います。そうすると、クエリは毎回パースをやり直 +しされるようになります。 + +4.20) どのようなレプリケーションのソリューションがありますか? + +「レプリケーション」と一言で言いますすが、レプリケーションをするための技術はい +くつかあり、それぞれ、利点と欠点があります。 + +マスタ/スレーブのレプリケーションは、読み/書きのクエリを受け取るシングルマス +タが可能で、スレーブでは読み/SELECTの問い合わせだけを受け付けることができます +。最も人気がある、フリーで利用できる、マスタ-スレーブのPosrgreSQLレプリケーシ +ョンソリューションは、 Slony-I です。 + +マルチ-マスタのレプリケーションは、読み/書きのクエリを受けとり、複数のレプリ +ケートさせるコンピュータに送ることができます。この機能は、サーバ間の変更の同期 +が必要なため、性能に重大な衝撃を与えます。 Pgcluster は、このようなソリューショ +ンとしてPosrgreSQLのためにフリーで利用できるものとして、最も人気があります。 + +この他にも、商用やハードウェア-ベースのレプリケーションソリューションがいろい +ろなレプリケーションモデルをサポートしています。 + +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - 4.22) なぜ、INを使う副問い合わせがとても遅いのですか? - - 7.4 - より前のバージョンでは、副問い合わせは、副問い合わせの結果を外部問い合 - わせの各ロウについて順次走査することによって、外部の問い合わせに結合さ - せられる。 - 副問い合わせがわずかなロウしか返さず、外部問い合わせが沢山のロウを返す - 場合は、INが最も早いです。他の問い合わせを高速化するには、INをEXISTSに - 置換します: - SELECT * - FROM tab - WHERE col IN (SELECT subcol FROM subtab) - - を、置ご垢┐董� - SELECT * - FROM tab - WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col) - - とします。 これが手っ取り早いですが、subcolは索引付ぅ�薀爐任△襪戮� - です。 - - バージョン7.4以降では、INは、通常の問い合わせと同様の洗練されたジョイ� - 鵑竜蚕僂鮗尊櫃忙箸ぁ�EXISTSを使うことを好みます。 - - 4.23) 外部結合(outer join)はどのように実現しますか? - - PostgreSQL は SQL - 標準構文を使う外部結合(アウタージョイン)をサポートします。ここに - 2つの例題があります。 - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - あるいは - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); - - これらの象徴的な問い合わせでは t1.col を t2.col と結合して、t1 - の結合されなかったロウ(t2 と一致しなかったロウ)も返しています。RIGHT - 結合は t2 の結合されなかったロウを加えるでしょう。FULL - 結合は、一致したロウに t1 と t2 - からは結合されなかったロウを返すでしょう。OUTER - という言葉はオプションで LEFT, RIGHT, または FULL - などの結合を仮定されています。通常、結合はINNER結合と呼ばれます。 - - 以前のリリースでは外部結合(outer join)をUNION と NOT IN - を使ってシミュレートでい泙后� たとえば、tab1 と tab2 を結合するとき - は、次の問い合わせで二つのテーブルを外部結合します。 - SELECT tab1.col1, tab2.col2 - FROM tab1, tab2 - WHERE tab1.col1 = tab2.col1 - UNION ALL - SELECT tab1.col1, NULL - FROM tab1 - WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2) - ORDER BY col1 - - 4.24) 複数のデータベースを使う問い合わせはどのようにすればでい泙垢�� - - 現行のデータベース以外への問い合わせ方法はありません。というのもPostgr - eSQLがデータベース仕様のシステムカタログを読み込むためで、そこには、た - とえそのふりをするだけにしろ、データベースを越えて問い合わせをするすべ - がありません。 - - contrib/dblink - はデータベース間(cross-database)の問い合わせを関数呼出しにより許します - 。もちろん、クライアントは同時に接続を別のデータベースへも張らなくては - ならず、結果をクライアント側でマージしなくてはなりません。 - - 4.25) 関数で複数のロウまたはカラムを返すにはどうしますか? - - 7.3では関数から、複数のロウや複数カラムを簡単に返せます。 - http://techdocs.postgresql.org/guides/SetReturningFunctions。 - - 4.26)なぜ、PL/PgSQL 関数の中から一時テーブルを確実に create/drop - することがでい覆い里任靴腓Δ�� - - PL/PgSQL は関数の内容をゥ礇奪轡紊掘△修良垤�壁益醉僂里燭瓠△發� - PL/PgSQL - 関数が一時テーブルにアクセスすると、そのテーブルはあとでドロップされ再 - 作成されますが、関数が再び呼び出されると、キ - ャッシュされているその関数の内容はまだ古い一時テーブルを依然として指し - ているからです。解決策は、 PL/PgSQL の中で EXECUTE - を一時テーブルアクセスのために使うことです。これで、毎回問い合わせをパ - ースし直すことになるでしょう。 - - 4.27) どのような暗号化オプションを利用でい泙垢�? - - * contrib/pgcryptoにはSQL問い合わせの中で使うための沢山の暗号化を含� - 澆泙后� - * クライアントとサーバとの間の伝送を暗号化するには、サーバではpostgr - esql.confのsslオプションをtrue - に設定し、pg_hba.confには適用するhostあるいはhostsslの行がなくては - なりません。そして、クライアントではsslmodeをdisableにしてはなりま - せん。 (PostgreSQL純正のSSL接続のかわりに、stunnel や ssh - サードパーティ製の暗号化転送を使うことも可能であることも気靴討�� - ます。) - * バージョン7.3 - ではデータベースユーザのパスワードは保存される時に自動的に暗号化さ - れます。 - それより前のバージョンではpostgresql.conf中でPASSWORD_ENCRYPTIONを - 邑悊砲垢詆�廚�△蠅泙后� - * サーバーを走らせるのに暗号化ファイルシステムを使うこともでい泙后� - -[訳注 - レプリケーション関連の項目がなくなりましたが、訳注のみ残してあります。 - - Jan Wieckさんによるカスケード可能なマスター・スレーブ型のレプリケーション Slony-I - http://gborg.postgresql.org/project/slony1/projdisplay.php - - 石井達夫さんによるコネクションプール サーバ PGPool - http://www2b.biglobe.ne.jp/~caco/pgpool/ - - 三谷篤さんによるマルチマスタ方式の同期レプリケーション PGCluster - http://www.csra.co.jp/~mitani/jpug/pgcluster/index.html - - JPUG 分散トランザクション開発分科会では、永安悟史さんが2相コミット - の実装を行いました。 - http://www.postgresql.jp/wg/dt/index.html -] - _________________________________________________________________ - - PostgreSQLの拡張についての質問 - - 5.1) 自分で書いたユーザ定義関数を psql - の中で実行するとコア・ダンプしてしまうのはなぜですか? - - 問題は色々と考えられますが、まず最初に、作成したユーザ定義関数を単独の - テストプログラムにして試してみて下さい。 - - 5.2) PostgreSQL - 用に書いたちょっと素敵な新しい型や関数を提供してプロジェクトに貢献したいの� - 任垢�� - - 皆さんの行なった拡張を、pgsql-hackers - メーリング・リストに送ってください。そして、ゆくゆくはそうした拡張が - contrib/ サブディレクトリの中に入ることになるでしょう。 - - 5.3) タプルを返す C言語の関数はどのように書い泙垢�� - - バージョン7.3以降のPostgreSQLでは、テーブルを返す関数を C, - PL/PgSQL、そして SQL - にて完全にサポートします。詳しくはプログラマガイドの情報を見てください - 。Cで定義された表を返す関数の例題がcontrib/tablefuncの中にあります。 - - 5.4) - ソース・ファイルを変更しました。再コンパイルしても変化が見られないのはなぜ� - 任垢�� - - いくつかの Makefile - がインクルード・ファイルに対して適切な依存関係を持っていません。make - clean をしてからもう一度 make を行なわなくてはなりません。もし、GCC - をお使いであれば configure の --enable-depend - オプションを使って、コンパイラに依存関係を自動的に調べさせることもでき - ます。 - _________________________________________________________________ - [訳注: 日本語版の製作については以下の通りです。 - 最終更新日: 2005年01月12日 + 最終更新日: 2005年05月18日 翻訳者: 桑村 潤 (Jun Kuwamura <juk at PostgreSQL.jp>) - このFAQの和訳の作成にあたり協力をしてくださった方々(敬称は略させていただい泙�): + このFAQの和訳の作成にあたり協力をしてくださった方々(敬称は略させていただきます): - 田仲 �(Minoru TANAKA <Tanaka.Minoru at keiken.co.jp>) + 田仲 稔(Minoru TANAKA <Tanaka.Minoru at keiken.co.jp>) 石井 達夫(Tatsuo ISHII <t-ishii at sra.co.jp>) 齊藤 知人(Tomohito SAITOH <tomos at elelab.nsc.co.jp>) 馬場 肇(Hajime BABA <baba at kusastro.kyoto-u.ac.jp>) 岡本 一幸(Kazuyuki OKAMOTO <kokamoto at itg.hitachi.co.jp>) 小菅 昭一(Shoichi Kosuge <s-kosuge at str.hitachi.co.jp>) 山下 義之(Yoshiyuki YAMASHITA <dica at eurus.dti.ne.jp>) - � 真太郎(Sintaro SAKAI <s_sakai at mxn.mesh.ne.jp>) + 境 真太郎(Sintaro SAKAI <s_sakai at mxn.mesh.ne.jp>) 生越 昌己(Masami OGOSHI <ogochan at zetabits.com>) 石川 俊行(Toshiyuki ISHIKAWA <tosiyuki at gol.com>) - 本田 茂�(Shigehiro HONDA <fwif0083 at mb.infoweb.ne.jp>) + 本田 茂広(Shigehiro HONDA <fwif0083 at mb.infoweb.ne.jp>) せせ じゅん(Jun SESE <sesejun at linet.gr.jp>) 神谷 英孝(Hidetaka KAMIYA <hkamiya at catvmics.ne.jp>) 菅原 敦(Atsushi SUGAWARA <asugawar at f3.dion.ne.jp>) 稲葉 香理(Kaori Inaba <i-kaori at sra.co.jp>) 石井 達夫(Tatsuo Ishii <t-ishii at sra.co.jp>) - をはじめ、ポストグレスに関する話題防戮米鐱楔譽櫂好肇哀譽后Ε瓠璽螢鵐哀螢好函� -和訳のい辰�韻鮑遒辰討�譴� JF(Linux Japanese FAQ Mailing List)プロジェクト、FreeBSD ドゥ絅瓮鵐董璽轡腑鵐廛蹈献Д�函� -その他、直接あるいは間接的にかかわっているすべてのオープンソースコミュニティーの皆さんに感謝します。 + をはじめ、ポストグレスに関する話題豊富な日本語ポストグレス・メーリングリ + スト、 和訳のきっかけを作ってくれた JF(Linux Japanese FAQ Mailing List)プロジェ + クト、FreeBSD ドキュメンテーションプロジェクト、 その他、直接あるい + は間接的にかかわっているすべてのオープンソースコミュニティーの皆さんに + 感謝します。 - 日本語版のこの文書は、以下からもたどれます。 - http://www.rccm.co.jp/~juk/pgsql/(FAQ和訳 PostgreSQL についてよくある質問) + 日本語版のこの文書は 本家 "Frequently Asked Questions" のページに "Japanese FAQ" という見出であります。 + また、最新版は以下のサイトにあります。 http://www.PostgreSQL.jp/wg/jpugdoc/JPUG文書・書籍関連分科会 http://www.linux.or.jp/JF/Linux JFプロジェクト + http://www.rccm.co.jp/~juk/pgsql/(FAQ和訳 PostgreSQL についてよくある質問) - なお、この和訳に関するご意見は(juk at PostgreSQL.jp)までお寄せ下さい。 + なお、この和訳に関するご意見・ご質問は(juk at PostgreSQL.jp)までお寄せください。 ] + diff --git a/doc/src/FAQ/FAQ_japanese.html b/doc/src/FAQ/FAQ_japanese.html index 05812e8db53..dc2fc6acb48 100644 --- a/doc/src/FAQ/FAQ_japanese.html +++ b/doc/src/FAQ/FAQ_japanese.html @@ -2,194 +2,164 @@ <HTML> <HEAD> <TITLE>PostgreSQL FAQ in Japanese</TITLE> -<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=x-euc-jp"> </HEAD> <BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#A00000" ALINK="#0000FF"> -<H1> -PostgreSQL(ポストグレス・キュー・エル)についてよくある質問とその解答(FAQ)</H1> -<P> -原文最終更新日: Sun Jan 9 14:44:04 EST 2005</P> -<P> -現在の維持管理者: Bruce Momjian (<A -HREF="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR> +<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=x-euc-jp"> + +<div id="pgContentWrap"> + +<h1>PostgreSQL(ポストグレス・キュー・エル)についてよくある質問とその解答(FAQ)</h1> +<p>原文最終更新日: Mon May 9 13:15:04 EDT 2005</p> +<p>現在の維持管理者: Bruce Momjian (<A +href="mailto:pgman at candle.pha.pa.us">pgman at candle.pha.pa.us</a>)<br /> Maintainer of Japanese Translation: Jun Kuwamura (<A -HREF="mailto:juk at PostgreSQL.jp">juk at PostgreSQL.jp</A>)<BR></P> -<P> -この文書の最新版は - <a href="http://www.postgresql.org/files/documentation/faqs/FAQ.html"> - http://www.postgresql.org/files/documentation/faqs/FAQ.html</A></P> -で見ることができます。 -<P> -プラットホームに特有の質問については: - <a href="http://www.postgresql.org/docs/faq/"> - http://www.postgresql.org/docs/faq/</A></P> -<BR>に回答があります。 - -<PRE> +href="mailto:juk at PostgreSQL.jp">juk at PostgreSQL.jp</a>)<br /></p> +<p>この文書の最新版は<a href= + "http://www.postgresql.org/docs/faqs.FAQ.html"> + http://www.postgresql.org/docs/faqs.FAQ.html</a> +で見ることができます。</p> +<p>プラットホームに特有の質問については:<a href= + "http://www.postgresql.org/docs/faq/"> + http://www.postgresql.org/docs/faq/</a> +<br /> +に回答があります。</p> + +<p> +<small><pre> (以下、訳者による注釈を [訳注: と ] とで囲んで記します。) [訳注: - 日本語版製作についてのメモは最後尾へ移動しました。 - - 日本語版のこの文書は <a HREF="http://www.PostgreSQL.org/docs/index.html">本家 "Docs" </a> の "Frequently Asked Questions" の - ところに "Japanese FAQ" という見出であります。また、以下のサイトにも - あります。 - <A HREF="http://www.PostgreSQL.jp/wg/jpugdoc/">http://www.PostgreSQL.jp/wg/jpugdoc/</A> - <A HREF="http://www.rccm.co.jp/~juk/pgsql/">http://www.rccm.co.jp/~juk/pgsql/</A> - <A HREF="http://www.linux.or.jp/JF/">http://www.linux.or.jp/JF/</A> - - この和訳についてお気づきの点は(<A HREF="mailto:juk at PostgreSQL.jp">juk at PostgreSQL.jp</A>)までメールでお寄せ下さい。 + 日本語版の製作については、この文書の最後をごらんください。 - 2005年01月12日 桑村 潤 + 2005年05月18日 桑村 潤 ] -</PRE> - -<HR> - -<H2 align="center">一般的な質問</H2> - -<A HREF="#1.1">1.1</A>) PostgreSQLとは何ですか? 何と読みますか?<BR> -<A HREF="#1.2">1.2</A>) PostgreSQLの著作権はどうなってますか?<BR> -<A HREF="#1.3">1.3</A>) PostgreSQLの動作するUnixプラットホームは?<BR> -<A HREF="#1.4">1.4</A>) Unix以外の移植版で使えるものは?<BR> -<A HREF="#1.5">1.5</A>) PostgreSQLはどこから入手できますか?<BR> -<A HREF="#1.6">1.6</A>) サポートはどこで受けられますか?<BR> -<A HREF="#1.7">1.7</A>) 最新版はどれですか<BR> -<A HREF="#1.8">1.8</A>) どのような文書がありますか?<BR> -<A HREF="#1.9">1.9</A>) 既知のバグや未だ無い機能はどうやって見つけますか?<BR> -<A HREF="#1.10">1.10</A>) <SMALL>SQL</SMALL>はどうすれば学べますか?<BR> -<A HREF="#1.11">1.11</A>) PostgreSQLは西暦2000年問題(Y2K)に対応していますか?<BR> -<A HREF="#1.12">1.12</A>) 開発チームにはどのように参加しますか?<BR> -<A HREF="#1.13">1.13</A>) バグレポートはどのように発信しますか?<BR> -<A HREF="#1.14">1.14</A>) 他の<SMALL>DBMS</SMALL>と比べてPostgreSQLはどうなのですか?<BR> -<A HREF="#1.15">1.15</A>) PostgreSQLを資金面で援助するにはどうすればよいですか?<BR> - - -<H2 align="center">ユーザー・クライアントの質問</H2> - -<A HREF="#2.1">2.1</A>) PostgreSQL の <SMALL>ODBC</SMALL> ドライバーはありますか?<BR> -<A HREF="#2.2">2.2</A>) PostgreSQL を Web ページと連携させるにはどんなツールがありますか?<BR> -<A HREF="#2.3">2.3</A>) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか?<BR> -<A HREF="#2.4">2.4</A>) どのような言語で PostgreSQL と通信できすか?<BR> - - -<H2 align="center">管理上の質問</H2> - -<A HREF="#3.1">3.1</A>) どのようにすれば <I>/usr/local/pgsql</I> 以外の場所にインストールできますか?<BR> -<A HREF="#3.2">3.2</A>) postmaster を走らせると、 -<I>Bad System Call</I> とかコア・ダンプしたとのメッセージが出ます。なぜですか?<BR> -<A HREF="#3.3">3.3</A>) <I>postmaster</I> を走らせようとすると、 -<I>IpcMemoryCreate</I> エラーが出ます。なぜですか?<BR> -<A HREF="#3.4">3.4</A>) <I>postmasterを</I>走らせようとすると、 -<I>IpcSemaphoreCreate</I> エラーが出ます。なぜですか?<BR> -<A HREF="#3.5">3.5</A>) 他のホストからの接続はどのように制御しますか?<BR> -<A HREF="#3.6">3.6</A>) より良い性能を得るためには、データベース・エンジンをどのように調整すれば良いですか?<BR> -<A HREF="#3.7">3.7</A>) どのようなデバグ機能が使えますか?<BR> -<A HREF="#3.8">3.8</A>) 接続しようとするときに <I>'Sorry, too many clients'</I> が出るのはなぜですか?<BR> -<A HREF="#3.9">3.9</A>) <I>pgsql_tmp</I> ディレクトリの中には何がありますか?<BR> -<A href="#3.10">3.10</A>) PostgreSQLのメジャーリリースをアップデートするのにダンプとリストアをしなくてはならないのはなぜですか?<br> -<A href="#3.11">3.11</A>) ハードウェアにはどんなコンピュータを使えばよいですか?<BR> - - - -<H2 align="center">操作上の質問</H2> - -<A HREF="#4.1">4.1</A>) バイナリ・カーソルと通常カーソルとの違いは何ですか?<BR> -<A HREF="#4.2">4.2</A>) 最初の数ロウのみを <SMALL>select</SMALL> するにはどうしますか? ランダムなロウ? <BR> -<A HREF="#4.3">4.3</A>) テーブルやその他の情報のリストを <I>psql</I> で見るにはどうしますか?<BR> -<A HREF="#4.4">4.4</A>) テーブルからカラムの削除、あるいは、データ型を変更するにはどうしますか?<BR> -<A HREF="#4.5">4.5</A>) ロウ、テーブル、データベースの最大サイズは?<BR> -<A HREF="#4.6">4.6</A>) 一般的なテキストファイルからデータを保存するには、データベースのディスク容量はどのくらい必要ですか?<BR> -<A HREF="#4.7">4.7</A>) 定義されたテーブル、インデックス、データベース、および、ユーザをどのようにして見つけ出しますか?<BR> -<A HREF="#4.8">4.8</A>) 問い合わせが遅いうえ、インデックスを使っている様子がありません。なぜですか?<BR> -<A HREF="#4.9">4.9</A>) 問い合わせオブティマイザがどのように問い合わせを評価するかを見るにはどうしますか?<BR> -<A HREF="#4.10">4.10</A>) R-tree インデックスとは何ですか?<BR> -<A HREF="#4.11">4.11</A>) 遺伝的問い合わせ最適化とは何ですか?<BR> -<A HREF="#4.12">4.12</A>) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使いますか?<BR> -<A HREF="#4.13">4.13</A>) 問い合わせの中で、フィールドが <SMALL>NULL</SMALL> であることを検出するにはどうしますか?<BR> -<A HREF="#4.14">4.14</A>) 色々な文字型のそれぞれの違いは何ですか?<BR> -<A HREF="#4.15.1">4.15.1</A>) 通番(serial)/自動増分フィールドはどのようにつくりますか?<BR> -<A HREF="#4.15.2">4.15.2</A>) <SMALL>SERIAL</SMALL>データ型に挿入される値は、どうすれば得られますか?<BR> -<A HREF="#4.15.3">4.15.3</A>) <I>currval()</I> は他のユーザとの競合状態に陥ることはないですか?<BR> -<A HREF="#4.15.4">4.15.4</A>) トランザクションが中断したときにもういちどシーケンス番号が使われないのはなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか?<BR> -<A HREF="#4.15">4.16</A>) <SMALL>OID</SMALL> とは何ですか? <SMALL>TID</SMALL> とは何ですか?<BR> -<A HREF="#4.17">4.17</A>) PostgreSQL で使われるいくつかの用語の意味は何ですか?<BR> -<A HREF="#4.18">4.18</A>) エラーメッセージ <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>が出るのはなぜですか?<BR> -<A HREF="#4.19">4.19</A>) どのバージョンの PostgreSQL を走らせているのかを調べるにはどうしますか?<BR> -<A HREF="#4.20">4.20</A>) ラージオブジェクトの操作で、<I>invalid large obj descriptor</I>と出るのはなぜですか?<BR> -<A HREF="#4.21">4.21</A>) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか?<BR> -<A HREF="#4.22">4.22</A>) なぜ、<SMALL>IN</SMALL>を使う副問い合わせがとても遅いのですか?<BR> -<A HREF="#4.23">4.23</A>) <i>外部</i>結合(<i>outer</i> join)はどのように実現しますか?<BR> -<A HREF="#4.24">4.24</A>) 複数のデータベースを使う問い合わせはどのようにすればできますか?<br> -<A HREF="#4.25">4.25</A>) 関数で複数のロウまたはカラムを返すにはどうしますか?<br> -<A HREF="#4.26">4.26</A>) なぜ、PL/PgSQL 関数の中から一時テーブルを確実に create/drop することができないのでしょうか?<br> -<A href="#4.27">4.27</A>) どのような暗号化オプションを利用できますか?<BR> - -<H2 align="center">PostgreSQLの拡張についての質問</H2> - -<A HREF="#5.1">5.1</A>) 自分で書いたユーザ定義関数を psql の中で実行するとコア・ダンプしてしまうのはなぜですか?<BR> -<A HREF="#5.2">5.2</A>) PostgreSQL 用に書いたちょっと素敵な新しい型や関数を提供してプロジェクトに貢献したいのですが?<BR> -<A HREF="#5.3">5.3</A>) タプルを返す C言語の関数はどのように書きますか?<BR> -<A HREF="#5.4">5.4</A>) ソース・ファイルを変更しました。再コンパイルしても変化が見られないのはなぜですか?<BR> -<HR> -<H2 align="center">一般的な質問</H2> - -<H4><A NAME="1.1">1.1</A>) PostgreSQL とは何ですか? 何と読みますか?</H4> - -<P>PostgreSQLは<I>Post-Gres-Q-L</I>(ポスト - グレス - キュー - エル) と発音します。</P> -<P>PostgreSQL は次世代 <SMALL>DBMS</SMALL> 研究用のプロトタイプであった POSTGRES データベース管理システムの改良版です(このため、今でもときどき "Postgres" と呼ばれることがあります)。PostgreSQL は POSTGRES の強力なデータ・モデルと豊富なデータ・タイプ(型)を保持しながら、POSTGRES で使われた PostQuel 問い合わせ言語を、拡張した <SMALL>SQL</SMALL> のサブセットに置き換えています。PostgreSQL は無料で完全なソースを利用できます。 -</P> - -<P>PostgreSQL の開発は、PostgreSQL 開発メーリングリストに参加している開発者達のチームですべて行なわれています。現在の座長は Marc G. Fournier (<A HREF="mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A> )です。(下記の<a href="#1.6">1.6節</a>に参加の仕方があります。)現在、このチームが PostgreSQL 開発のすべての面倒をみています。このチームはコミュニティプロジェクトであり、いかなる企業によっても制御を受けません。参加したければ、<A href= - "http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html"> - http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</A> -にある開発者向けのFAQを見てください。 -</P> +</pre></small> +</p> -<P>Postgres95-1.01 の中心的な開発者は Andrew Yu と Jolly Chen でしたが、その他大勢の人々がこのコードの移植、テスト、デバグ、および、改良に参加しました。PostgreSQL の派生元コードである Postgres はカリフォルニア大学バークレイ校において、 Michael Stonebraker 教授の指揮のもと、多くの学生、卒業生、本職のプログラマたちの努力により作られました。 -</P> +<hr /> + +<h2 align="center">一般的な質問</h2> + +<a href="#1.1">1.1</a>) PostgreSQLとは何ですか? 何と読みますか?<br /> +<a href="#1.2">1.2</a>) PostgreSQLの著作権はどうなってますか?<br /> +<a href="#1.3">1.3</a>) PostgreSQLをサポートするプラットホームは?<br /> +<a href="#1.4">1.4</a>) PostgreSQLはどこから入手できますか?<br /> +<a href="#1.5">1.5</a>) サポートはどこで受けられますか?<br /> +<a href="#1.6">1.6</a>) バグレポートはどのように発信しますか?<br /> +<a href="#1.7">1.7</a>) 最新版はどれですか<br /> +<a href="#1.8">1.8</a>) どのような文書がありますか?<br /> +<a href="#1.9">1.9</a>) 既知のバグや未だ無い機能はどうやって見つけますか?<br /> +<a href="#1.10">1.10</a>) <small>SQL</small>はどうすれば学べますか?<br /> +<a href="#1.11">1.11</a>) 開発チームにはどのように参加しますか?<br /> +<a href="#1.12">1.12</a>) 他の<small>DBMS</small>と比べてPostgreSQLはどうなのですか?<br /> +<a href="#1.13">1.13</a>) 誰が PostgreSQL をコントロールしますか?<br /> + + +<h2 align="center">ユーザー・クライアントの質問</h2> + +<a href="#2.1">2.1</a>) PostgreSQL にはどんなインターフェースが使えますか?<br /> +<a href="#2.2">2.2</a>) PostgreSQL を Web ページと連携させるにはどんなツールがありますか?<br /> +<a href="#2.3">2.3</a>) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか?<br /> + + +<h2 align="center">管理上の質問</h2> + +<a href="#3.1">3.1</a>) どうすれば、PostgreSQLを<i>/usr/local/pgsql</i> 以外の場所にインストールできますか?<br /> +<a href="#3.2">3.2</a>) 他のホストからの接続はどのように制御しますか?<br /> +<a href="#3.3">3.3</a>) より良い性能を得るためには、データベース・エンジンをどのように調整しますか?<br /> +<a href="#3.4">3.4</a>) どのようなデバグ機能が使えますか?<br /> +<a href="#3.5">3.5</a>) 接続しようとするときに <i>'Sorry, too many clients'</i> が出るのはなぜですか?<br /> +<a href="#3.6">3.6</a>) PostgreSQLのメジャーリリースをアップデートするのにダンプとリストアをしなくてはならないのはなぜですか?<br /> +<a href="#3.7">3.7</a>) ハードウェアにはどんなコンピュータを使えばよいですか?<br /> + + +<h2 align="center">操作上の質問</h2> + +<a href="#4.1">4.1</a>) 最初のいくつかのロウのみを <small>select</small> するにはどうしますか? ランダムなロウ? <br /> +<a href="#4.7">4.2</a>) 定義されたテーブル、インデックス、データベース、および、ユーザをどのようにして見つけ出しますか?<br /> +<a href="#4.3">4.3</a>) カラムのデータタイプを変更するにはどうしますか?<br /> +<a href="#4.4">4.4</a>) ロウ、テーブル、データベースの最大サイズは?<br /> +<a href="#4.5">4.5</a>) 一般的なテキストファイルのデータを保存するには、データベースのディスク容量はどのくらい必要ですか?<br /> +<a href="#4.6">4.6</a>) クエリが遅いのはなぜでしょう? なぜ、インデックスが使われないのでしょうか?<br /> +<a href="#4.7">4.7</a>) クエリオプティマイザが、どのようにクエリを評価していかを、見るにはどうしますか?<br /> +<a href="#4.8">4.8</a>) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使いますか?<br /> +<a href="#4.9">4.9</a>) クエリの中で、フィールドが<small>NULL</small> であることを検出するにはどうしますか? フィールドが<small>NULL</small>かどうかでどのようにソートができますか?<br /> +<a href="#4.10">4.10</a>) いろいろな文字型のそれぞれの違いは何ですか?<br /> +<a href="#4.11.1">4.11.1</a>) 通番(serial)/自動増分フィールドはどのようにつくりますか?<br /> +<a href="#4.11.2">4.11.2</a>) <small>SERIAL</small>データ型に挿入される値は、どうすれば得られますか?<br /> +<a href="#4.11.3">4.11.3</a>) <i>currval()</i> は他のユーザとの競合状態に陥ることはないですか?<br /> +<a href="#4.11.4">4.11.4</a>) トランザクションが中断したときにもういちどシーケンス番号が使われないのはなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか?<br /> +<a href="#4.12">4.12</a>) <small>OID</small> とは何ですか? <small>TID</small> とは何ですか?<br /> +<a href="#4.13">4.13</a>) エラーメッセージ <i>"ERROR: Memory exhausted in AllocSetAlloc()"</i>が出るのはなぜですか?<br /> +<a href="#4.14">4.14</a>) どのバージョンの PostgreSQL を走らせているのかを調べるにはどうしますか?<br /> +<a href="#4.15">4.15</a>) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか?<br /> +<a href="#4.16">4.16</a>) <i>外部</i>結合(<i>outer</i> join)はどのように実現しますか?<br /> +<a href="#4.17">4.17</a>) 複数のデータベースを使う問い合わせはどのようにすればできますか?<br /> +<a href="#4.18">4.18</a>) 関数から複数のロウまたはカラムを返すにはどうしますか?<br /> +<a href="#4.19">4.19</a>) PL/PgSQL の関数の中で一時テーブルにアクセスするとき、どうして "relation with OID ##### does not exist" というエラーを受け取るのでしょうか?<br /> +<a href="#4.20">4.20</a>) どのようなレプリケーションのソリューションがありますか?<br /> + + +<hr /> + +<h2 align="center">一般的な質問</h2> + +<h4><a name="1.1">1.1</a>) PostgreSQL とは何ですか? 何と発音しますか?</h4> + + <p>PostgreSQLは<i>Post-Gres-Q-L</i>(ポスト - グレス - キュー - エル) + と発音します。</p>また、単純に Postgres とも呼ばれます。 + + <p>PostgreSQL はオブジェクト-リレーショナルデータベースシステムで、 + 伝統的な商用データベースシステムに、次世代<small>DBMS</small>システ + ムに見られるような改良が施された特徴を有します。PostgreSQLは、無料で + 完全なソースコードを手に入れることができます。</p> + + <p>PostgreSQL の開発は、ほとんどが、世界中にひろがったボランティアの + 開発者によって、インターネットを通したコミュニケーションによって行わ + れています。コミュニティによるプロジェクトであるため、どの企業の制御 + もうけません。開発に参加したければ、<a href= + "http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html"> + http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</a> + にある開発者のFAQを見てください。 + </p> -<P>バークレイにおけるこのソフトウェアのもとの名前は Postgres でしたが、<SMALL>SQL</SMALL> の機能が追加された 1995 年にその名前は Postgres95 に変更され、1996 年の終りにその名前は PostgreSQL に変更されました。 -</P> +<h4><a name="1.2">1.2</a>) PostgreSQL の著作権はどうなってますか?</h4> -<H4><A NAME="1.2">1.2</A>) PostgreSQL の著作権はどうなってますか?</H4> + <p> PostgreSQL は下記の著作権に従います。</p> -<P> PostgreSQL は下記の著作権に従います。 -</P> -<PRE> + <small><pre> [訳注: 正文は英語です。参考として、訳文を併記掲載します。 ] -</PRE> -<P> -PostgreSQL Data Base Management System</P> -<P> -Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group -Portions Copyright (c) 1994-6 Regents of the University of California</P> -<P> -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose, without fee, and without a written -agreement is hereby granted, provided that the above copyright notice -and this paragraph and the following two paragraphs appear in all -copies.</P> -<P> -IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY -FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, -INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS -DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF -THE POSSIBILITY OF SUCH DAMAGE.</P> -<P> -THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER -IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO -OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR -MODIFICATIONS.</P> - -<PRE> + </pre></small> + <p>PostgreSQL Data Base Management System</p> + <p> + Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group + Portions Copyright (c) 1994-1996 Regents of the University of California</p> + <p> + Permission to use, copy, modify, and distribute this software and its + documentation for any purpose, without fee, and without a written + agreement is hereby granted, provided that the above copyright notice + and this paragraph and the following two paragraphs appear in all + copies.</p> + <p> + IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY + FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, + INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS + DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF + THE POSSIBILITY OF SUCH DAMAGE.</p> + <p> + THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER + IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO + OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR + MODIFICATIONS.</p> + + <small><pre> POSTGRESQL データベース管理システム - 部分的著作権 (c) 1996-2004, PostgreSQL国際開発チーム - 部分的著作権 (c) 1994-6 カリフォルニア大学本校 + 部分的著作権 (c) 1996-2005, PostgreSQL国際開発チーム + 部分的著作権 (c) 1994-1996 カリフォルニア大学本校 本ソフトウェアおよびその文書一式は上記の著作権表示と、この文章 @@ -212,1248 +182,991 @@ MODIFICATIONS.</P> 著作権に関する正文は上記の英語による表記です。日本語訳はあくまで 参考です。 ] -</PRE> + </pre></small> -<P>上記はBSDライセンスで古きオープンソースのライセンスです。ソースコード -がどのように使われようとも制限しません。好ましいことなので、我々もそれを -変えるつもりはありません。</P> +<h4><a name="1.3">1.3</a>) PostgreSQL の動作環境は?</h4> -<H4><A NAME="1.3">1.3</A>) PostgreSQL の動作環境は?</H4> + <p>一般的に、最近のUnix互換プラットホームであればPostgreSQLを稼働さ + せられるはずです。リリースの時点で実際にテストを行なったことの報告が + なされたプラットホームについてはインストール手引書に列挙してあります。 + </p> -<P> -一般的に、最近のUnix互換プラットホームであればPostgreSQLを稼働させられるはずです。リリースの時点で実際にテストを行なったことの報告がなされたプラットホームについてはインストール手引書に列挙してあります。</P> + <p>PostgreSQL は、Win2000, WinXP, そして、Win2003 のような Microsoft + Windows NTベースのオペレーティングシステムで、ネイティブに走ります。 + あらかじめパッケージにされたインストーラが<a href= + "http://pgfoundry.org/projects/pginstaller"> + http://pgfoundry.org/projects/pginstaller</a> + にあり、利用できます。MSDOSベースのWindowsのバージョン(Win95, Win98, + WinMe)では、Cygwinを使って PostgreSQL を走らせることができます。</p> -<H4><A NAME="1.4">1.4</A>) Unix以外の移植版で使えるものは?</H4> - -<P>バージョン8.0になり、PostgreSQL は、Win2000, WinXP, Win2003などの Microsoft Windows NTベースのオペレーティングシステムでネイティブに走るようになりました。 -パッケージになったインストーラが、<a href="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>から入手できます。 -Windows (Win95, Win98, WinMe)など、MSDOSベースのバージョンでは、Cygwin を使ってPostgreSQLを走らせることができます。 -</P> - -<pre> + <small><pre> [訳注 pgInstaller の入手はFTPミラーサイトの win32 ディレクトリからも可能です。 http://www.postgresql.org/mirrors-ftp.html + + 詳しくは、次の Windwos版に関するFAQの和訳をごらんください。 + http://www.postgresql.jp/wg/jpugdoc/FAQ_windows.ja.html ] -</pre> + </pre></small> - <p>次のサイトに Novell Netware 6 への移植もあります。 + <p>次のサイトに Novell Netware 6 への移植版もあります。 <a href="http://forge.novell.com">http://forge.novell.com</a> また、OS/2 (eComStation) バージョンは、<a href= - "http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F"> - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a>にあります。</p> -<BR> - - -<H4><A NAME="1.5">1.5</A>) PostgreSQL はどこから入手できますか?</H4> - -<P> PostgreSQL の大元の anonymous ftp サイトは -<A -href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A> -です。 -ミラーサイトについては、我々のメイン Web ページをご覧下さい。</P> - -<PRE> - [訳注: - - 以下は日本のミラーサイトです: - - Japan: <A HREF="ftp://ftp.jp.postgresql.org/">ftp://ftp.jp.postgresql.org/</A> - Japan: <A HREF="ftp://mirror.nucba.ac.jp/mirror/PostgreSQL/pub/">ftp://mirror.nucba.ac.jp/mirror/PostgreSQL/pub/</A> - Japan: <A HREF="ftp://ring.ip-kyoto.ad.jp/pub/misc/db/PostgreSQL/">ftp://ring.ip-kyoto.ad.jp/pub/misc/db/PostgreSQL/</A> - Japan: <A HREF="ftp://ring.crl.go.jp/pub/misc/db/PostgreSQL/">ftp://ring.crl.go.jp/pub/misc/db/PostgreSQL/</A> - Japan: <A HREF="ftp://ring.saitama-u.ac.jp/pub/misc/db/PostgreSQL/">ftp://ring.saitama-u.ac.jp/pub/misc/db/PostgreSQL/</A> - Japan: <A HREF="ftp://ring.astem.or.jp/pub/misc/db/PostgreSQL/">ftp://ring.astem.or.jp/pub/misc/db/PostgreSQL/</A> - Japan: <A HREF="ftp://ring.exp.fujixerox.co.jp/pub/misc/db/PostgreSQL/">ftp://ring.exp.fujixerox.co.jp/pub/misc/db/PostgreSQL/</A> - Japan: <A HREF="ftp://ring.jah.ne.jp/pub/misc/db/PostgreSQL/">ftp://ring.jah.ne.jp/pub/misc/db/PostgreSQL/</A> - Japan: <A HREF="ftp://ring.etl.go.jp.jp/pub/misc/db/PostgreSQL/">ftp://ring.etl.go.jp.jp/pub/misc/db/PostgreSQL/</A> - Japan: <A HREF="ftp://ring.asahi-net.or.jp/pub/misc/db/PostgreSQL/">ftp://ring.asahi-net.or.jp/pub/misc/db/PostgreSQL/</A> - Japan: <A HREF="ftp://ring.so-net.ne.jp/pub/misc/db/PostgreSQL/">ftp://ring.so-net.ne.jp/pub/misc/db/PostgreSQL/</A> - Japan: <A HREF="ftp://ring.aist.go.jp/pub/misc/db/PostgreSQL/">ftp://ring.aist.go.jp/pub/misc/db/PostgreSQL/</A> - ] -</PRE> - -<H4><A NAME="1.6">1.6</A>) サポートはどこで受けられますか?</H4> - -<P>主要なメーリング・リストは: <A HREF="mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>です。PostgreSQL に関することであれば議論ができます。このリストへの参加は、電子メールの本文(Subject 行ではありません)に次の2行を書いて、</P> -<PRE> - subscribe - end -</PRE> - -<P> <A HREF="mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A> へ送って下さい。</P> - -<P> ダイジェスト版のメーリング・リストもあります。このリストへの参加は "本文"に:</P> -<PRE> - subscribe - end -</PRE> - -<P>と書いて <A HREF="mailto:pgsql-general-digest-request@PostgreSQL.org"> pgsql-general-digest-request@PostgreSQL.org</A> へ電子メールを送って下さい。</P> - -<P> ダイジェスト版は、メインリストで受信するメッセージが 30k 程度溜る毎にダイジェスト版リストのメンバーに送付されます。</P> - -<P> バグレポート用のメーリングリストもあります。このリストへの参加は "本文" に: -</P> -<PRE> - subscribe - end -</PRE> -<P> -と書いて<A -HREF="mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A> - -へ電子メールを送って下さい。</P> - -<P> 開発者の議論のためのメーリングリストも利用できます。このリストへの参加は電子メールの本文に: -</P> -<PRE> - subscribe - end -</PRE> - -<P>と書いて、<A HREF="mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A>へ電子メールを送って下さい。</P> - -<P>PostgreSQL についてもっと詳しく知りたければ、次の PostgreSQL WWWホームページからたどれます:</P> -<BLOCKQUOTE> - <P><A HREF="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A></P> -</BLOCKQUOTE> -<P>メジャーなIRC チャンネルは、Freenode (<I>irc.freenode.net</I>)の -<I>#PostgreSQL</I> というチャンネルです。 -UNIX コマンドで、 - <CODE>irc -c '#PostgreSQL' "$USER" irc.freenode.net.</CODE> -を使って参加できます。 -同じネットワークに、スペイン語のチャンネル(<I>#postgresql-es</I>)もあ -り、フランス語のチャンネル(<I>#postgresqlfr</I>)もあります。 -EFNetにもPostgreSQLチャンネルがあります。 -</P> - -<PRE> + "http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F"> + http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a>にあります。</p> +<br /> + + +<h4><a name="1.4">1.4</a>) PostgreSQL はどこから入手できますか?</h4> + + <p>Webブラウザ経由だと、<a href="http://www.postgresql.org/ftp/"> + http://www.postgresql.org/ftp/</a>、それから、ftp経由だと、 + <a href="ftp://ftp.PostgreSQL.org/pub/"> + ftp://ftp.PostgreSQL.org/pub/</a> を使います。</p> + + +<h4><a name="1.5">1.5</a>) サポートはどこで受けられますか?</h4> + + <p>PostgreSQL コミュニティは多くのユーザのために、電子メール経由の支 + 援を提供しています。電子メールリストをサブスクライブするためのメイン + となるウェブサイトは + <a href="http://www.postgresql.org/community/lists/"> + http://www.postgresql.org/community/lists/</a>です。これから、始める + のであれば <i>general</i> または、<i>bugs</i> といったリストがよいで + しょう。</p> + + <p>The major IRC channel is <i>#postgresql</i> on Freenode + (<i>irc.freenode.net</i>). To connect you can use the Unix + program <code>irc -c '#postgresql' "$USER" irc.freenode.net</code> + or use any other IRC clients. A Spanish one also exists + on the same network, (<i>#postgresql-es</i>), and a French one, + (<i>#postgresqlfr</i>). There is also a PostgreSQL channel on EFNet.</p> + + <p>メジャーなIRC チャンネルは、Freenode (<i>irc.freenode.net</i>)の + <i>#postgresql</i> というチャンネルです。UNIX コマンドでは、 + <code>irc -c '#PostgreSQL' "$USER" irc.freenode.net</code> を使って + 参加できます。同じネットワークに、スペイン語のチャンネル + (<i>#postgresql-es</i>)もあり、フランス語のチャンネル + (<i>#postgresqlfr</i>)もあります。EFNetにもPostgreSQLチャンネルがあ + ります。</p> + + + <p> + <small><pre> [訳注: 1999年7月23日、日本ポストグレスユーザー会、略称JPUGが設立されました。 JPUG は非営利組織で、PostgreSQLを利用する人達の相互協力の場となっています。 (2003年5月17日、「日本PostgreSQLユーザ会」に名称を改めました。) 正会員の会費は無料ですが、協賛会員の会費と会員の積極的な貢献が会の運営を助けています。 詳しくは、JPUG のWeb サイト: - <A HREF="http://www.PostgreSQL.jp/">http://www.PostgreSQL.jp/</A> - をご覧ください。会員登録も可能となっています。 + <a href="http://www.PostgreSQL.jp/">http://www.PostgreSQL.jp/</a> + をごらんください。会員登録も可能となっています。 日本語のIRCチャンネル '#PostgreSQL*jp' も存在します。 -</PRE> + </pre></small> + <p>商用サポート会社のリストは<a + href="http://techdocs.postgresql.org/companies.php"> + http://techdocs.postgresql.org/companies.php</a>にあります。</p> -<P>商用サポート会社のリストは<a href="http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</a>にあります。</P> +<h4><a name="1.6">1.6</a>) バグレポートはどのように発信しますか? +</h4> -<H4><A NAME="1.7">1.7</A>) 最新版はどれですか</H4> -<P> -PostgreSQL の最新版はバージョン 7.4.6 です。</P> -<P> -我々は、6~8カ月毎にメジャーリリースを行なうことを計画しています。</P> + <p><a href= + "http://www.postgresql.org/support/submitbug"> + http://www.postgresql.org/support/submitbug</a> + のPostgreSQL バグフォームを訪れてください。 バグレポートを提出する仕方 + についての手引と指針があります。</p> + <p> それと同時に ftp サイト <A + href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</a> + で、最新バージョンの PostgreSQL を探してみてください。</p> -<H4><A NAME="1.8">1.8</A>) どのような文書がありますか?</H4> -<P> 配付の中に、いくつかのマニュアルとオンライン・マニュアル(マニュアル・ページ)およびいくつかの小さなテスト例題が含まれます。<I>/doc</I> ディレクトリをご覧下さい。また、マニュアルは、<A HREF="http://www.ca.PostgreSQL.org/docs/">http://www.ca.PostgreSQL.org/docs/</A>でオンラインでも閲覧できます。</P> +<h4><a name="1.7">1.7</a>) 最新版はどれですか</h4> -<PRE> - [訳注: - (株)SRAと日本PostgreSQLユーザ会で翻訳され、 - <A HREF="http://osb.sra.co.jp/PostgreSQL/Manual/">「PostgreSQL オフィシャルマニュアル」</A> - として出版されています。 - ] -</PRE> + <p>PostgreSQL の最新版はバージョン 8.0.3 です。</p> + <p>我々は、1年毎にメジャーリリースを行ない、数ヵ月ごとのマイナーリリー + スをを計画しています。</p> -<P>オンラインで参照できる PostgreSQL の本も2冊あります。<A href= - "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A> -</P> -<PRE> +<h4><a name="1.8">1.8</a>) どのような文書がありますか?</h4> + + <p> 配付の中に、いくつかのマニュアルとオンライン・マニュアル(マニュ + アル・ページ)およびいくつかの小さなテスト例題が含まれます。 + <i>/doc</i>ディレクトリをごらんください。また、マニュアルは、<A + href="http://www.PostgreSQL.org/docs/"> + http://www.PostgreSQL.org/docs/</a>でオンラインでも閲覧できます。 + </p> + + + <small><pre> [訳注: - 日本ポストグレスユーザー会の<A HREF="http://www.PostgreSQL.jp/wg/psqltrans/"> 「PostgreSQL Book翻訳分科会」</A> - にて翻訳されました。 + JPUG 文書・書籍関連分科会で翻訳されたマニュアルもあります。 + <a href="http://www.postgresql.jp/document/pg803doc/"> + http://www.postgresql.jp/document/pg803doc/</a> + インプレスから、 + <a href="http://home.impress.co.jp/reference/2108.htm"> + PostgreSQLオフィシャルマニュアル</a>として出版されています。 + ] -</PRE> -<P> - および、 <A href= - "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A> -です。 - - 購入可能な書籍の目録は、<A href= - "http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A> - にあります。 + </pre></small> - PostgreSQL 技術情報記事も、<A href= - "http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</A> - にあります。</P> -<P> + + <p>オンラインで参照できる PostgreSQL の本も2冊あります。<a href= + "http://www.PostgreSQL.org/docs/awbook.html"> + http://www.PostgreSQL.org/docs/awbook.html</a> + + <small><pre> [訳注: - 和訳文書は、日本ポストグレスユーザー会の<A - HREF="http://www.postgresql.jp/document/">http://www.postgresql.jp/document/</A> - をごらん下さい。 + JPUG<a href="http://www.PostgreSQL.jp/wg/psqltrans/">「PostgreSQL Book翻訳分科会」 + </a>で翻訳され、ピアソンから<a href="http://www.seshop.com/detail.asp?pid=2587"> + 「はじめてのPostgreSQL」</a>として出版されました。 ] -</P> - -<P> コマンドラインのクライアントプログラム<I>psql</I> も、型、演算子、関数、集約、その他の情報をお見せする、いくつかの素晴らしい \d コマンドを持ちます。 -- \? を使うと利用可能なコマンドが表示されます。 -</P> - -<P> 我々の Web サイトには、もっと沢山の文書があります。</P> - - -<H4><A NAME="1.9">1.9</A>) 既知のバグや未だ無い機能はどうやって見つけますか? -</H4> -<P> -PostgreSQLは拡張された<SMALL>SQL</SMALL>-92のサブセットをサポートします。 -我々のページの -<A HREF="http://www.PostgreSQL.org/docs/todo.html">TODO</A> -リストに、既知のバグや欠落機能や将来計画についての記述があります。</P> - -<H3><A NAME="1.10">1.10</A>) <SMALL>SQL</SMALL> はどうすれば学べますか?</H3> -<P> -<A HREF="http://www.PostgreSQL.org/docs/awbook.html"> -http://www.PostgreSQL.org/docs/awbook.html</A> -にあるPostgreSQL本で <SMALL>SQL</SMALL> を教えています。 -</P> -<PRE> + </pre></small> + + および、 <a href= + "http://www.commandprompt.com/ppbook/"> + http://www.commandprompt.com/ppbook/</a>です。 + + <small><pre> [訳注: - 日本ポストグレスユーザー会の<A HREF="http://www.PostgreSQL.jp/wg/psqltrans/"> 「PostgreSQL Book翻訳分科会」</A> - にて翻訳され出版されています。 + 邦訳は<a href="http://www.oreilly.co.jp/books/4873111021/">「実践 PostgreSQL」 + </a>がオライリーから出版されています。 ] -</PRE> + </pre></small> + + 購入可能な書籍の目録は、<a href= + "http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</a> + にあります。 -<P> -その他にも PostgreSQL本として、<A href= - "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook</A> -があります。 + PostgreSQL 技術情報記事も、<a href= + "http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</a> + にあります。</p> -素晴らしい手引書は、<A href= - "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A> - <A href= - "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM"> - http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A> - そして、<A href= - "http://sqlcourse.com/">http://sqlcourse.com</A> -にあります。</P> - - <P>その他では、 "Teach Yourself SQL in 21 Days, Second Edition" が <A href= - "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A>にあります。</P> - -<P> -多くのユーザに、 -<I>The Practical SQL Handbook</I>, Bowman Judith S. et al., Addison-Wesley -が好評です。 -その他に、<I>The Complete Reference SQL</I>, Groff et al., McGraw-Hill -のようなのもあります。 -</P> - -<PRE> + <small><pre> [訳注: - 石井達夫氏による日本語の参考文献の紹介ページ - <A HREF="http://www.SRA.co.jp/people/t-ishii/PostgreSQL/doc-jp/index.html">http://www.SRA.co.jp/people/t-ishii/PostgreSQL/doc-jp/index.html</A> - があります。 - 近藤直文氏の「初心者向のDB設計入門・SQL入門参考書紹介」のコーナー - <A HREF="http://www.shonan.ne.jp/~nkon/ipsql/books_SQL.html">http://www.shonan.ne.jp/~nkon/ipsql/books_SQL.html</A> - があります(やや古い2000年版)。 - 堀田倫英氏の「PostgreSQL日本語マニュアル」 - <A HREF="http://www.net-newbie.com/">http://www.net-newbie.com/</A> - ではオンラインマニュアルの検索ができます。 - 丸山不二夫氏のUNIX データベース入門 - <A HREF="http://www.wakhok.ac.jp/DB/DB.html">http://www.wakhok.ac.jp/DB/DB.html</A> - もオンラインで読むことができます。 + 日本語の書籍等についてはは、日本PostgreSQLユーザ会の、<A + href="http://www.postgresql.jp/PostgreSQL/references.html">http://www.postgresql.jp/PostgreSQL/references.html</a> + もごらんください。 ] -</PRE> - -<H4><A NAME="1.11">1.11</A>) PostgreSQLは西暦2000年問題(Y2K)に対応していますか? -</H4> -<P> -対応してます。西暦2000年より後の日付も、紀元前2000年より前の日付も、簡単に扱えます。</P> - -<H4><A NAME="1.12">1.12</A>) 開発チームにはどのように参加しますか?<BR> -</H4> -<P> -まず最初(1番目)に、最新のソースをダウンロードし、我々の Web サイトか配布に含まれているPostgreSQL Developersの文書を読みます。 -2番目に、<I>pgsql-hackers</I> と <I>pgsql-patches</I> メーリング・リストを購読(subscribe)します。 -3番目に、高品質のパッチをpgsql-patchesに発信します。</P> -<P> -およそ十人ちょっとの人達が、PostgreSQL <SMALL>CVS</SMALL>アーカイブにコミットする権限を持っています。 -そのそれぞれの人達が沢山の高品質なパッチを発信するので、現在コミッターとなっている人達はそれに追い付くのが大変ですが、我々は彼らがコミットしたパッチは高品質であると確信しています。</P> - -<H4><A NAME="1.13">1.13</A>) バグレポートはどのように発信しますか? -</H4> - -<P><A href= - "http://www.postgresql.org/support/submitbug"> - http://www.postgresql.org/support/submitbug</A> -のPostgreSQL バグフォームを訪れて下さい。 バグレポートを提出する仕方についての手引と指針があります。</P> + </pre></small> + </p> -<P> それと同時に ftp サイト <A HREF="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A>で、もっと新しいバージョンの PostgreSQL あるいはパッチをさがしてみて下さい。</P> + <p> コマンドラインのクライアントプログラム<i>psql</i> も、型、演算子、 + 関数、集約、その他の情報をお見せする、いくつかの素晴らしい \d コマン + ドを持ちます。 - \? を使うと利用可能なコマンドが表示されます。</p> -<H4><A NAME="1.14">1.14</A>) 他の<SMALL>DBMS</SMALL>と比べてPostgreSQLはどうなのですか? -</H4> + <p> 我々の Web サイトには、さらに沢山の文書があります。</p> -<P> -ソフトウェアを計る方法にはいくつかあります。機能と性能と信頼性とサポートと価格です。</P> -<DL> - <DT> <B>機能(Features)</B></DT> - <DD> - PostgreSQLは、トランザクション、副問い合わせ、トリガー、ビュー、外部キー整合性参照、および、洗練されたロック機構など、大規模商用<SMALL>DBMS</SMALL>が持つ機能をほとんど持っています。さらに PostgreSQLは、ユーザ定義型、継承、ルール、それから、ロック競合を縮小するマルチバージョン同時性制御など、商用<SMALL>DBMS</SMALL>も持ち合わせないような機能をいくつか持ち合わせています。<BR> - </DD> +<h4><a name="1.9">1.9</a>) 既知のバグや未だ無い機能はどうやって見つけますか? +</h4> - <DT> <B>性能(Performance)</B></DT> - <DD> - PostgreSQLは他の商用あるいはオープンソースのデータベースと互角の性能も持ちます。ある面ではより早かったり、ほかの面ではより遅かったりします。MySQLなどの特化型データベース・システムにくらべて、PostgreSQL は複数ユーザや複雑な問い合わせ、また、 read/write 問い合わせのロードがより高速です。MySQLは少ないユーザでの単純な SELECT 問い合わせでは高速です。もちろん、MySQLには上記の<I>Features</I>の節に示すような機能はほとんどありません。我々は、PostgreSQLに柔軟性と機能性を組み込みながらも、絶えず性能の改善を続けています。 - </DD> + <p>PostgreSQLは拡張された<small>SQL</small>-92のサブセットをサポート + します。我々のページの <A + href="http://www.PostgreSQL.org/docs/todo.html">TODO</a> リストに、 + 既知のバグや欠落機能や将来計画についての記述があります。</p> - <DT> <B>信頼性(Reliability)</B></DT> - <DD> - 我々は、<SMALL>DBMS</SMALL>の信頼性が高くなくてはその価値が無いことを理解してます。十分テストして、安定したコードをバグを最小にしてからリリースするように努めてます。それぞれのリリースは少なくとも1カ月以上のベータ・テストを行ない、これまでのリリースの履歴が、製品版として安定した堅固なリリースであることを物語っています。この分野では、他のデータベースと比べても遜色がないことに自信を持っています。<BR> - </DD> +<h4><a name="1.10">1.10</a>) <small>SQL</small> はどうすれば学べますか?</h4> - <DT> <B>サポート(Support)</B></DT> - <DD> - 我々のメーリングリストは、遭遇するいかなる問題についても解決への手助けをしてくれる、開発者やユーザの大きな集まりへの接点を提供しています。我々は問題の解決を保証することはできませんが、商用データベースであっても常に解決されるわけではありません。開発者や、ユーザ・コミュニティ、マニュアル類、それに、ソースコードなどへ直接アクセスできることによって、PostgreSQLのサポートは、他の<SMALL>DBMS</SMALL>サポートよりも優れたものとなっています。御要望に答えて、事柄毎の商用サポートなどもあります(<A href="#1.6">FAQ1.6節</A>をご覧下さい)。<BR> - </DD> + <p>まず、 上記で述べた PostgreSQL についての本を読むことを検討してください。 + もうひとつは、 "Teach Yourself SQL in 21 Days, Second Edition" + at <a href= + "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</a>です。 - <DT> <B>価格(Price)</B></DT> - <DD> - PostgreSQLの利用は、商用でも非商用でも、すべて無料です。上記に示してあるBSDスタイルの使用許諾に外れない限り、PostgreSQLのコードを制限無しで商品に組み込むことができます。<BR> - </DD> -</DL> + <p><i>The Practical SQL Handbook</i>, Bowman Judith S. et al., + Addison-Wesley が多くのユーザに好評です。 ほかでは、<i>The Complete + Reference SQL</i >, Groff et al., McGraw-Hill も好評です。</p> -<H4><A name="1.15">1.15</A>) PostgreSQLを資金面で援助するにはどうすればよいですか? -</H4> + <p>素晴らしい手引書は、<a href= + "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</a> + <a href= + "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM"> + http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</a> + そして、<a href="http://sqlcourse.com/">http://sqlcourse.com</a> + にあります。</p> -<P>PostgreSQLは、我々が始めた 1996年以来、最高クラスの情報基盤を持ってい -ます。これはすべて、Marc Fournieさんのおかげで、彼はこの基盤を創り出し、何年にもわたって管理してきました。</P> -<P>質の良い基盤は、オープンソース・プロジェクトにとってはとても大切なもので、プロジェクトが前進する勢いを失って分裂するのを回避します。</P> + <p> + <small><pre> + [訳注: + 石井達夫氏による日本語の参考文献の紹介ページ + <a href="http://www.SRA.co.jp/people/t-ishii/PostgreSQL/doc-jp/index.html">http://www.SRA.co.jp/people/t-ishii/PostgreSQL/doc-jp/index.html</a> + があります。 + 近藤直文氏の「初心者向のDB設計入門・SQL入門参考書紹介」のコーナー + <a href="http://www.shonan.ne.jp/~nkon/ipsql/books_SQL.html">http://www.shonan.ne.jp/~nkon/ipsql/books_SQL.html</a> + があります(やや古い2000年版)。 + 堀田倫英氏の「PostgreSQL日本語マニュアル」 + <a href="http://www.net-newbie.com/">http://www.net-newbie.com/</a> + ではオンラインマニュアルの検索ができます。 + 丸山不二夫氏のUNIX データベース入門 + <a href="http://www.wakhok.ac.jp/DB/DB.html">http://www.wakhok.ac.jp/DB/DB.html</a> + もオンラインで読むことができます。 + Nikkei BP IT Pro にある石井達夫氏の <a href="http://itpro.nikkeibp.co.jp/members/ITPro/oss/20050514/160833/">PostgreSQL ウォッチ</a> + では毎回新しい情報をとりあげています。 + ] + </pre></small> + </p> + +<h4><a name="1.11">1.11</a>) 開発チームにはどのように参加しますか?</h4> + + <p><a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html"> + (開発者向けの)Developer's FAQ</a>をごらんください。 + + +<h4><a name="1.12">1.12</a>) 他の<small>DBMS</small>と比べPostgreSQLはどうなのですか?</h4> + + <p>ソフトウェアを計る方法にはいくつかあります。機能と性能と信頼性と + サポートと価格です。</p> + + <dl> + <dt> <b>機能(Features)</b></dt> + <dd> + PostgreSQLは、トランザクション、サブクエリ、トリガー、ビュー、外 + 部キー整合性参照、および、洗練されたロック機構など、大規模商用 + <small>DBMS</small>が持つ機能をほとんど持っています。さらに + PostgreSQLは、ユーザ定義型、継承、ルール、それから、ロック競合を縮 + 小するマルチバージョン同時性制御など、商用<small>DBMS</small>も持 + ち合わせないような機能をいくつか持ち合わせています。<br /> + + </dd> + + <dt> <b>性能(Performance)</b></dt> + <dd> + PostgreSQLは他の商用あるいはオープンソースのデータベースと互角の性 + 能も持ちます。ある面ではより早かったり、ほかの面ではより遅かったり + します。他のデータベースに比べた性能は、ふつう +/-10% くらいでしょう。 + </dd> + + <dt> <b>信頼性(Reliability)</b></dt> + <dd> + 我々は、<small>DBMS</small>の信頼性が高くなくてはその価値が無いこ + とを理解してます。十分テストして、安定したコードをバグを最小にして + からリリースするように努めてます。それぞれのリリースは少なくとも1 + カ月以上のベータ・テストを行ない、これまでのリリースの履歴が、製品 + 版として安定した堅固なリリースであることを物語っています。この分野 + では、他のデータベースと比べても遜色がないことに自信を持っています。 + <br /> + </dd> + + <dt> <b>サポート(Support)</b></dt> + <dd> + 我々のメーリングリストは、遭遇するいかなる問題についても解決への手 + 助けをしてくれる、開発者やユーザの大きな集まりへの接点を提供してい + ます。我々は問題の解決を保証することはできませんが、商用データベー + スであっても常に解決されるわけではありません。開発者や、ユーザ・コ + ミュニティ、マニュアル類、それに、ソースコードなどへ直接アクセスで + きることによって、PostgreSQLのサポートは、他の<small>DBMS</small> + サポートよりも優れたものとなっています。御要望に答えて、事柄毎の商 + 用サポートなどもあります(<a href="#1.5">FAQ1.5節</a>をごらんくだ + さい)。 + <br /> + </dd> + + <dt> <b>価格(Price)</b></dt> + <dd> + PostgreSQLの利用は、商用でも非商用でも、すべて無料です。上記に示し + てあるBSDスタイルの使用許諾に外れない限り、PostgreSQLのコードを制 + 限無しで商品に組み込むことができます。<br /> + </dd> + </dl> + </p> + +<h4><a name="1.13">1.13</a>) 誰が PostgreSQL をコントロールしますか?</h4> + + <p>PostgreSQLの門番、中央委員会、あるいは、コントロールをする会社を + 探そうとしても、諦めざるをえず ---- 存在しないのです。我々は、中心 + となるコミッティとCVSコミッタを持ちますが、これらのグループはコン + トロールするためというよりも、管理上のものです。ここでは、プロジェ + クトは、だれでも参加ができる開発者とユーザのコミュニティにより方向 + 付けられます。読者がやらなければならないことは、メーリングリストを + サブスクライブして、議論に 参加することです。(<a + href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">Developer's + FAQ</a>には、PostgreSQL開発に加わり方についての情報があります。)</p> + + +<hr /> + +<h2 align="center">ユーザー・クライアントの質問</h2> + + +<h4><a name="2.1">2.1</a>) PostgreSQL にはどんなインターフェースが使えますか?</h4> + + <p>PostgreSQL のインストールに含まれる物は<small>C</small>と組込み + <small>C</small>のインターフェースだけです。その他のインターフェース + は独立したプロジェクトで、別々にダウンロードされます。分かれることで、 + それぞれの開発チームが独自のリリーススケジュールを持つことが許されま + す。</p> + + <p><small>PHP</small> のようないくつかのプログラミング言語は、 + PostgreSQLのインターフェースを含んでいます。Perl, <small>TCL</small>, + Python, そして、そのほかの利用可能な言語のインターフェースは、 + <a href="http://gborg.postgresql.org">http://gborg.postgresql.org</a> + の <i>Drivers/Interfaces</i> の節の中とインターネットの検索でみつけ + られます。 + </p> + + +<h4><a name="2.2">2.2</a>) PostgreSQL を Web ページと連携させるにはどんなツールがありますか?</h4> + + <p> データベースを裏に持つ Web ページについての素晴らしい紹介が、<br /> + <a href="http://www.webreview.com">http://www.webreview.com</a>にあります。</p> + <p> Web への拡張のためには、PHP(<a href="http://www.php.net">http://www.php.net/</a>) + が卓越したインターフェイスとなっています。</p> + + <small><pre> + [訳注: + PHPに関する日本語の情報は、2000年4月19日に発足した日本PHPユーザ会のサイト + <a href="http://www.php.gr.jp/">http://www.php.gr.jp/</a> + あるいは、廣川 類さんのサイト + <a href="http://www.geocities.jp/rui_hirokawa/php/">http://www.geocities.jp/rui_hirokawa/php/</a> + にかなりまとめられています。 + ] + </pre></small> -<P>もちろん、この基盤は安いものではありません。維持し続けるためには毎月あるいは一時的に経費がかかります。もし、あなたやあなたの会社に、こうした努力のための資金の援助を施すことができるようでしたら、<A href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A>から寄付をお願いします。 -</P> + <p> 処理が複雑な場合、多くの人は Perl インターフェイスと CGI.pm か + mod_perl を使います。 </p> -<P>また、Webページには PostgreSQL,Inc とありますが、そこの "貢献(contributions)"という項目は、 PostgreSQL プロジェクトを支援するだけのためで、決して特定の会社のための資金ではありません。もし、小切手(check)の方が都合よければ連絡先の住所へお送り下さい。</P> -<P>さらに、PostgreSQLを使った成功事例をお持ちであれば、ぜひ、われわれの -事例紹介リスト<a href= - "mailto:pgsql-advocacy@postgresql.org"> - pgsql-advocacy@postgresql.org</a> -へお送りください。 -</P> +<h4><a name="2.3">2.3</a>) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか?</h4> -<HR> -<H2 align="center">ユーザー・クライアントの質問</H2> -<H4><A NAME="2.1">2.1</A>) PostgreSQL のための <SMALL>ODBC</SMALL> ドライバーはありますか? -</H4> + <p>もちろん、あります。 + 詳細は、<a href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a> + をごらんください。</p> -<P> PsqlODBC と OpenLink <SMALL>ODBC</SMALL> の二つの <SMALL>ODBC</SMALL> ドライバーが利用可能です。</P> -<P> PsqlODBC は次の場所からダウンロードできます。 -<A href= - "http://gborg.postgresql.org/project/psqlodbc/projdisplay.php"> - http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A> -</P> +<hr /> -<P> OpenLink <SMALL>ODBC</SMALL> は <A HREF="http://www.openlinksw.com/">http://www.openlinksw.com/</A>から入手できます。標準的な <SMALL>ODBC</SMALL> クライアント・ソフトウェアで使えますので、支援しているすべてのプラットホーム(Win, Mac, Unix, VMS)から PostgreSQL の <SMALL>ODBC</SMALL> が利用できます。 -</P> +<h2 align="center">管理上の質問</h2> -<P> たぶん彼らは、商用品質のサポートの必要な人々に売っていると思いますが、 - フリーウェア版はいつでも入手可能のようです。質問は、<A href= - "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A> - へ送って下さい。</P> -<P> -<A HREF="http://www.PostgreSQL.org/docs/programmer/odbc.html"> -Programmer's Guide</A> -の <SMALL>ODBC</SMALL> の章もご覧ください。 -</P> +<h4><a name="3.1">3.1</a>) どのようにすれば <i>/usr/local/pgsql</i> 以外の場所にインストールできますか?</h4> -<H4><A NAME="2.2">2.2</A>) PostgreSQL を Web ページと連携させるにはどんなツールがありますか? -</H4> + <p> 簡単な方法は、 <i>configure</i> を走らせるときに --prefix オプショ + ンを指定することです。 </p> -<P> データベースを裏に持つ Web ページについての素晴らしい紹介が、<BR> - <A href="http://www.webreview.com">http://www.webreview.com</A>にあります。</P> -<P> Web への拡張のためには、PHP が卓越したインターフェイスとなっています。<A HREF="http://www.php.net">http://www.php.net/</A>にあります。 -</P> -<PRE> - [訳注: - PHPに関する日本語の情報は、2000年4月19日に発足した日本PHPユーザ会のサイト - <A HREF="http://www.php.gr.jp/">http://www.php.gr.jp/</A> - あるいは、廣川 類さんのサイト - <A HREF="http://www.geocities.jp/rui_hirokawa/php/">http://www.geocities.jp/rui_hirokawa/php/</A> - にかなりまとめられています。 - ] -</PRE> +<h4><a name="3.2">3.2</a>) 他のホストからの接続はどのように制御しますか?</h4> -<P> 処理が複雑な場合、多くの人は Perl インターフェイスと CGI.pm か mod_perl を使います。 -</P> + <p>既定値では、PostgreSQL は Unix ドメインソケット、または、TCP/IP接 + 続のローカルマシンからの接続しか許しません。postgresql.conf の中の + listen_addresses を修正し、<b>かつ</b>、<i>$PGDATA/pg_hba.conf</i> + ファイルを適切に直して、ホスト主導型認証を有効にしないかぎりは、他 + のマシンからは接続できないでしょう。</p> -<PRE> - [訳注: - WDB は、Web から DataBase への Perl の Interface です。 - wdb-p95 へのリンクは切れてしまっています。おそらく、Perl DBI 経由で DBD::Pg の利用が可能と思われます。 - 現在、WDBI という名前になっているもの - <A HREF="http://www.egroups.com/list/wdb-users/">http://www.egroups.com/list/wdb-users/</A> - と、WDBの名前のままのもの - <A HREF="http://www.i-con.dk/wdb/">http://www.i-con.dk/wdb/</A> - とがあります。その経緯はよくわかりません。 - ] -</PRE> - -<H4><A NAME="2.3">2.3</A>) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか? -</H4> - <p>もちろん、PostgreSQL へのグラフィカルインターフェイスがいくつかあります。 -その中にPgAccess <a - href="http://www.pgaccess.org">http://www.pgaccess.org</a> -も含まれます。 -PgAdmin III (<a - href="http://www.pgadmin.org">http://www.pgadmin.org</a>)もあります。 -RHDB Admin (<a - href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/ -</a>)、TORA (<a - href="http://www.globecom.net/tora/">http://www.globecom.net/tora/ - (部分的に商用)</a>) -および、 Rekall (<a href="http://www.thekompany.com/products/rekall/"> - http://www.thekompany.com/products/rekall/</a>, proprietary)もありま -す。 -PhpPgAdmin (<a href="http://phppgadmin.sourceforge.net/"> - http://phppgadmin.sourceforge.net/ </a>) はPostgreSQLへのWebベースの -インターフェイスを提供します。 -</P> - -<P>より詳細なリストについては、<a - href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a> - をご覧ください。</P> - -<H4><A NAME="2.4">2.4</A>) どのような言語で PostgreSQL と通信できすか? -</H4> - -<P>人気のあるほとんどの言語はPostgreSQLへのインターフェイスを持っています。 -あなたが使うプログラミング言語の拡張モジュールのリストを覗いてみてください。 -</P> - -<P>以下のインターフェイスはPostgreSQLの配布に含まれています。 -</P> - -<UL> -<LI>C (libpq)</LI> -<LI>埋め込みC (ecpg)</LI> -<LI>Java (jdbc)</LI> -<LI>Python (<A HREF="http://www.druid.net/pygresql/">PyGreSQL</A>)</LI> -<LI>TCL (libpgtcl)</LI> -</UL> - <P>その他の利用可能なインターフェイスは -<a href="http://gborg.postgresql.org">http://gborg.postgresql.org</A> -の<I>Drivers/Interfaces</I>のセクションにあります。 - </P> - -<PRE> - [訳注: - 永安悟史さんは Palm 版の libpq を開発されました。 - <a href="http://www.snaga.org/libpq/">http://www.snaga.org/libpq/</a> - ] -</PRE> -<HR> -<H2 align="center">管理上の質問</H2> +<h4><a name="3.3">3.3</a>) より良い性能を得るためには、データベース・エンジンをどのように調整しますか?</h4> + + <p>性能改善の可能性のありそうな主な領域が3つあります:</p> + <dl> + <dt><b>クエリの変更</b></dt> + + <dd>クエリを修正してより良い性能を得ることを含みます: + <ul> + <li>式および部分インデックスを含む、インデックスを作成</li> + <li>複数の<small>INSERT</small>のかわりにCOPYを使用</li> + <li>複数の文をグループ化し、1つのトランザクションにしてコミットのオーバヘッドを削減</li> + <li>インデックスからから沢山のロウを取り出すときは<small>CLUSTER</small>を使用</li> + <li>クエリの出力のサブセットを返すために<small>LIMIT</small>を使用</li> + <li>準備されているクエリを使用</li> + <li>オプティマイザの正確な統計を維持するために<small>ANALYZE</small>を使用</li> + <li><small>VACUUM</small> または <i>pg_autovacuum</i> の常用</li> + <li>大きなデータ変更のあるときはインデックスを削除</li> + </ul><br/> + <br/> + </dd> + + <dt><b>サーバ構成</b></dt> + + <dd><i>postgresql.conf</i>の設定のいくつかは性能に影響します。 + 詳しくは、<a href= + "http://www.postgresql.org/docs/current/static/runtime.html"> + Administration Guide/Server Run-time Environment/Run-time + Configuration</a> の全件リストごらんください(<a + href="http://www.postgresql.jp/document/pg803doc/html/runtime.html"> + JPUGサイトの日本語版</a>)。 + そして、解説として、<a + href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html"> + http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a> + および、 <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html"> + http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a> を + ごらんください。 + <br/> + <br/> + </dd> + + <dt><b>ハードウェアの選定</b></dt> + + <dd>性能におけるハードウェアの影響は <a + href="http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html"> + http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html</a> + (<a href="http://www.postgresql.jp/wg/psqltrans/hw_performance_j/index.html">JPUGサイトの日本語版</a>) + と <a href="http://www.powerpostgresql.com/PerfList/"> + http://www.powerpostgresql.com/PerfList/</a> に述べられています。 + <br/> + <br/> + </dd> + </dl> + +<h4><a name="3.4">3.4</a>) どのようなデバグ機能が使えますか?</h4> + + <p>サーバ構成変数には多くの <code>log_*</code> があり、クエリとプロ + セスの統計を出力することができ、デバグと性能計測にとても便利です。</p> + +<h4><a name="3.5">3.5</a>) 接続しようとするときに <i>'Sorry, too many clients'</i> が出るのはなぜですか?</h4> + + <p> 既定での制限である 100 のデータベースセッションに達してしまって + います。<i>postmasterが</i>同時接続できるバックエンドプロセスの制限 + 数を増やす必要があります。<i>postgresql.conf</i> の中の + <i>max_connections</i> の値を変更して <i>postmaster</i>を再起動する + ことで可能になります。</p> + +<h4><a name="3.6">3.6</a>) PostgreSQLのメジャーリリースをアップデートするのにダンプとリストアをしなくてはならないのはなぜですか?</h4> + + <p>PostgreSQLチームはマイナーリリースでは小さな変更しか行ないません + ので、7.4.0 から 7.4.1 へのアップグレードにはダンプとリストアの必要は + ありません。しかし、メジャーリリース(たとえば、7.2から7.3へのような) + では、システムテーブルやデータファイルの内部フォーマットの変更をしば + しば行ないます。これらの変更はたいてい複雑で、そのため我々はデータファ + イルのための後方互換性を維持することができません。ダンプは汎用フォー + マットでデータを出力し、それを新しい内部フォーマットに読み込むことが + できます。</p> + +<h4><a name="3.7">3.7</a>) ハードウェアにはどんなコンピュータを使えばよいですか?</h4> + + <p>PCハードウェアはほとんど互換性がありますので、ほとんどの人は、す + べてのPCハードウェアが同じ品質だと思い込む傾向があります。しかし、そ + れは間違いです。ECC RAM、SCSI、および、高品質マザーボードは、安いハー + ドウェアに比べると、より信頼性が高く、より性能も良いのです。 + PostgreSQL はほとんどのハードウェアで稼働しますが、信頼性や性能が重 + 要な場合は、ハードウェアのオプションを研究することが賢明です。メーリ + ングリストでもハードウェアオプションとトレードオフについて議論するこ + とができます。</p> + +<hr /> + +<h2 align="center">操作上の質問</h2> + +<h4><a name="4.1">4.1</a>) 最初の数ロウのみを <small>SELECT</small>するにはどうしますか?ランダムなロウ? +</h4> + + <p>たったの数行のロウを取り出すために、何行必要かがわかれば、 + <small>SELECT</small> のときに <small>LIMIT</small> を使います。 + <small>ORDER BY</small>にインデックスがマッチした場合、まったくクエ + リが実行されないこともあります。<small>SELECT</small> のときに何行 + が必要かを知らなければ、カーソルを使い<small>FETCH</small>します。</p> + + <p>ランダムロウを<small>SELECT</small>するには、次の文を使います: +<pre> + SELECT col + FROM tab + ORDER BY random() + LIMIT 1; +</pre> -<H4><A NAME="3.1">3.1</A>) どのようにすれば <I>/usr/local/pgsql</I> 以外の場所にインストールできますか?</H4> -<P> 簡単な方法は、 <I>configure</I> を走らせるときに --prefix オプションを指定することです。 -</P> +<h4><a name="4.2">4.2</a>) 定義されたテーブル、インデックス、データベース、および、ユーザをどのようにして見つけ出しますか?<i>psql</i>で使われているクエリを表示するにはどうしますか?</h4> -<H4><A NAME="3.2">3.2</A>) postmaster を走らせると、<I>Bad System Call</I> とかコア・ダンプしたとのメッセージが出ます。なぜですか? -</H4> + <p><i>psql</i> の中で \dtコマンドをを使ってテーブルを見ることができ + ます。psqlの中で \? を使って、コマンドの全リストを調べることができま + す。一方で、<i>psql</i> のソースコードで、バックスラッシュコマンドを + 出力する <i>pgsql/src/bin/psql/describe.c</i> ファイルを読むこともで + きます。その中には、 <small>SQL</small> コマンドを生成する部分も含ま + れます。また、 <i>-E</i> オプションを付けて <i>psql</i> を開始すると、 + 入力されたコマンドを実行するためのクエリを印字出力するようになります。 + PostgreSQLは <small>SQL</small> 準拠の INFORMATION SCHEMA インター + フェースを提供しますので、データベースについての情報を問い合わせるこ + ともできます。</p> -<P> さまざまな問題が考えられますが、まず最初にあなたのカーネルに System V IPC の拡張がインストールされているかを確認して見てください。PostgreSQL はカーネルによる共有メモリーとセマフォのサポートを必要とします。 + <p><i>pg_</i> で始まるシステムテーブルでもこれらを記述することができ + ます。</p> + + <p><i>psql -l</i>を使うと全てのデータベースをリスとします。</p> -</P> -<H4><A NAME="3.3">3.3</A>) <I>postmaster</I> を走らせようとすると、<I>IpcMemoryCreate</I> エラーが出ます。なぜですか? -</H4> + <p>それと、<i>pgsql/src/tutorial/syscat.source</i> を試してみてくだ + さい。そこには、データベースのシステムテーブルから情報を得るために必 + 要な <small>SELECT</small> 文が沢山あります。</p> -<P> カーネルが共有メモリーを持つ設定になっていなかったか、でなければ、カーネルに対して使える共有メモリーの大きさを大きく設定する必要があります。具体的な大きさは、使っているアーキテクチャと<I>postmaster</I> を走らせるときに設定するバッファの数とバックエンドプロセスに依存します。ほとんどのシステムでは、既定値のバッファサイズのままで、少なくとも約1MBが必要です。 -<A - href="http://www.postgresql.org/docs/current/static/kernel-resources.html">PostgreSQL - Administrator's Guide/Server Run-time Environment/Managing Kernel Resources</A> -に共有メモリーとセマフォについての情報の詳細がありますのでご覧ください。</P> +<h4><a name="4.3">4.3</a>) カラムのデータ型を変更するにはどうしますか?</h4> -<H4><A NAME="3.4">3.4</A>) <I>postmasterを</I>走らせようとすると、<I>IpcSemaphoreCreate</I> エラーが出ます。なぜですか? -</H4> + <p>カラムのデータ型の変更は 8.0 以降では、 + <small>ALTER TABLE ALTER COLUMN TYPE</small> を使うことにより間単に + なりました。</p> -<P>もしエラーメッセージが<I>IpcSemaphoreCreate: semget failed (No space left on device)</I>であれば、カーネルが十分なセマフォを使えるように構成されていません。Postgresは潜在的なバックエンドプロセス毎に一つのセマフォを必要とします。とりあえずの解決策は<I>postmaster</I>を起動するときに、バックエンドプロセスの数をより少なく制限をすることです。既定値の32より小さな数のパラメータを<I>-N</I>で使います。より恒久的な解決策は、カーネルの<SMALL>SEMMNS</SMALL> と <SMALL>SEMMNI</SMALL> パラメータを増やすことです。 -</P> + <p>それより前のバージョンでは、以下のようにします:</p> +<pre> + BEGIN; + ALTER TABLE tab ADD COLUMN new_col <i>new_data_type</i>; + UPDATE tab SET new_col = CAST(old_col AS <i>new_data_type</i>); + ALTER TABLE tab DROP COLUMN old_col; + COMMIT; +</pre> - <P>操作不能のセマフォも過度なデータベースアクセスの間にクラッシュを -起こす可能性があります。 -</P> + <p>これを行なったときは、抹消された行が使っているディスク空間を回収 + するために<i>VACUUM FULL tab</i>をしたほうが良いかもしれません。</p> -<P>もし、エラーメッセージがなにか他のものであれば、カーネルの構成でまったくセマフォのサポートをしていないかもしれません。 -PostgreSQL Administrator's Guide に共有メモリーとセマフォについての情報の詳細があります。</P> +<h4><a name="4.4">4.4</a>) ロウ、テーブル、データベースの最大サイズは?</h4> + <p>制限は以下のとおりです:</p> +<blockquote> +<table> +<tr><td>データベースの最大サイズ?</td><td>制限無し (32 TB のデータベースも存在します)</td></tr> +<tr><td>テーブルの最大サイズ?</td><td>32 TB</td></tr> +<tr><td>ロウの最大サイズ?</td><td>1.6TB</td></tr> +<tr><td>フィールドの最大サイズ?</td><td>1 GB</td></tr> +<tr><td>テーブル内での最大ロウ数?</td><td>制限無し</td></tr> +<tr><td>テーブル内での最大カラム数?</td><td>カラムの型によって 250-1600</td></tr> +<tr><td>テーブル内での最大インデックス数?</td><td>制限無し</td></tr> +</table> +</blockquote> -<H4><A NAME="3.5">3.5</A>) 他のホストからの接続はどのように制御しますか? -</H4> + <p> もちろん、これらは実際は無制限ではなく、ディスク容量とメモリーや + スワップスペースの大きさにより制限されます。性能はこれらの値がことの + ほか大きな時に煽りを受けます。</p> -<P> 既定値では、PostgreSQL は Unix ドメインソケット、または、TCP/IP接続のローカルマシンからの接続しか許しません。postgresql.conf の中の listen_addresses を修正し、<B>かつ、</B><I>$PGDATA/pg_hba.conf</I> ファイルを適切に直して、ホスト主導型認証を有効にしないかぎりは、他のマシンからは接続できないでしょう。 -</p> + <p> 最大テーブルサイズの32TBはオペレーティングシステムによる巨大ファ + イルのサポートは必要としません。巨大なテーブルは複数の1GBのファイル + に分けて保存されますので、ファイルシステムの制限は重要ではありません。 + </p> -<H4><A NAME="3.6">3.6</A>) より良い性能を得るためには、データベース・エンジンをどのように調整すれば良いですか? -</H4> + <p> デフォルトのブロックサイズを32kにすることで、最大テーブルサイズ + と最大カラム数とを4倍にすることができます。</p> -<P> 確かにインデックスは問い合わせの速度を増します。<SMALL>EXPLAIN ANALYZE</SMALL>コマンドで PostgreSQL がどのようにあなたの問い合わせを翻訳しているかを見ることができ、そして、どのインデックスが使われているかを見ることができます。 -</P> -<P>もし <SMALL>INSERT</SMALL> を多用している場合は、<SMALL>COPY</SMALL> コマンドを使って大きなバッチ処理でそれを行なうことを検討して下さい。これは、<SMALL>INSERT</SMALL> を別々に行なうよりもっと高速です。次に、<SMALL>BEGIN WORK/COMMIT</SMALL> のトランザクション・ブロックの中に無い文は、それら自身がそれぞれのトランザクションに入っていると見なされます。いくつかの文を一つのトランザクション・ブロックの中で行なうことを考えて下さい。これによりトランザクションのオーバーヘッドが減ります。また、大きなデータの変更を行なう際はインデックスを一度外して、作り直すことを考えてみて下さい。 -</P> -<P> <a href= - "http://www.postgresql.org/docs/current/static/runtime.html"> - Administration Guide/Server Run-time Environment/Run-time - Configuration</a>には、 -チューニングのオプションがいくつかあります。<i>fsync</I>オプションで<I>fsync()</I> を無効にすることができます。これによって、各トランザクション毎に <I>fsync()</I> でディスクを更新するのを止めさせます。 -</P> +<h4><a name="4.5">4.5</a>) 一般的なテキストファイルのデータを保存するには、データベースのディスク容量はどのくらい必要です?</h4> -<P> <I>shared_buffers</I>オプションを使ってバックエンド・プロセスにより使われる共有メモリー・バッファを大きくすることもできます。もし、このパラメータを高くしすぎると、カーネルの共有メモリー空間の制限値を越えてしまうために <I>postmaster</I> が走らなくなるでしょう。既定値では、それぞれのバッファの大きさは 8K で、バッファ数は 1000 です。 -</P> + <p>普通のテキストファイルを PostgreSQL のデータベースに保存するには、 + 最大で約5倍のディスク容量を必要とします。</p> -<P> <I>sort_mem</I> (PostgreSQL 8.0からは: <I>work_mem</I>)オプションを使って、それぞれのバックエンド・プロセスが一時的な並べ替えによって使うメモリーの最大サイズを増やすこともできます。 既定値は 1024 (すなわち、1MB)です。 -</P> -<P> また、<SMALL>CLUSTER</SMALL> コマンドを使って、テーブルのデータをインデックスに合わせるためにグループ化することもできます。詳しくは、オンラインマニュアルで <I>CLUSTER</I> を見て下さい。 -</P> + <p> 例題として、各行に整数とテキスト記述を持つ 100,000行のファイルを + 考えてみましょう。テキストの文字列の平均長さを20バイトと仮定すると、 + フラットファイルの大きさは約2.8MB です。このデータを含む PostgreSQL + データベースファイルの大きさは次のように約6.4MBと見積もることができ + ます: -<H4><A NAME="3.7">3.7</A>) どのようなデバグ機能が使えますか?</H4> +<pre> + 32 bytes: 各ロウのヘッダ(概算) + 24 bytes: 整数(int)フィールドとテキスト(text)フィールド + + 4 bytes: ページ上のタップルへのポインタ + ---------------------------------------- + 60 bytes per row -<P> PostgreSQL は、デバグのために意味のある、状態情報を報告するいくつかの機能を持ちます。 -</P> + PostgreSQL のデータページサイズは 8192バイト(8KB)なので: -<P> まず、--enable-cassert オプションで <I>configure</I> を走らせます。そうしてコンパイルすることにより、沢山の <I>assert()</I> が、バックエンドの進捗状況を監視し、何か予期せぬことが起きるとプログラムを停止するようになります。 -</P> + 8192 bytes per page + ------------------- = 136 rows per database page (切り捨て) + 60 bytes per row -<P> <I>postmaster</I> と <I>postgres</I> の両方でいくつかのデバグ・オプションの利用ができます。まず、次のように <I>postmaster</I> を起動するときはいつでも、標準出力とエラー出力をログ・ファイルに送るようにしてあることを確かめて下さい。 -</P> + 100000 data rows + -------------------- = 782 database pages (切り上げ) + 128 rows per page + + 735 database pages * 8192 bytes per page = 6,021,120 bytes (6 MB) +</pre> -<PRE> - cd /usr/local/pgsql - ./bin/postmaster >server.log 2>&1 & -</PRE> + <p>インデックスは、これほどのオーバヘッドは要求しませんが、インデッ + クス付けされるデータを含む以上、それなりに大きくなります。 </p> + <p><small>NULL</small>はビットマップとして保存されていて、それらがわ + ずかにスペースを使います。</p> -<P> これにより PostgreSQL の最上部のディレクトリに server.log ファイルが置かれます。このファイルはサーバーが遭遇した問題やエラーについて有用な情報を含みます。<I>Postmaster</I> は更に詳細な情報を報告するための <I>-d</I> オプションを持ちます。その <I>-d</I> オプションは、デバグ・レベルを指定します。高いデバグ・レベルでは、大きなログファイルを生成することに注意しなくてはなりません。 -</P> -<P>もし、<i>postmaster</i>が走っていなければ、<I>postgres</I>バックエンドをコマンドラインから走らせることができ、直接<SMALL>SQL</SMALL>文をタイプすることができます。このやりかたは、デバグ目的のとき<B>だけ</B>お奨めします。セミコロンではなく、改行が問い合わせの終りになることに注意してください。もし、デバグシンボルを入れてコンパイルしていれば、デバッガを使って何が起きているかを見ることができます。postmaster からバックエンドを開始したわけではないので、独立な環境で走っているのではなくロック/バックエンドとの対話の問題が重複することはありません。 -</P> +<h4><a name="4.6">4.6</a>) クエリが遅いのはなぜでしょう? なぜ、インデックスが使われないのでしょうか?</h4> - <P> もし、<i>postmaster</i>が走っていれば、あるウィンドウで<I>psql</I>を開始すると、<code>SELECT pg_backend_pid()</code>を使って、<i>psql</i> で使われる <i>postgres</i> プロセスの<SMALL>PID</SMALL>が見つかります。 -デバッガを使って<i>postgres</i>の<SMALL>PID</SMALL>にアタッチ(attach)します。デバッガの中からブレーク・ポイントをセットし、<i>psql</i> から問い合わせを発行します。デバグのために<i>postgres</i>を始動する場合は、PGOPTIONS="-W n" を設定でき、それから、<i>psql</i> を開始します。これにより、<i>n</i> 秒開始を遅らせるはずなので、デバッガでプロセスにアタッチして、ブレークポイントを設定し、開始から順を追って見てゆくことができます。 -</P> -<P> いくつかの<code>log_*</code>サーバ構成変数は、デバッグと性能測定にとても役に立つプロセスの統計の印刷を可能にします。 -</P> + <p>インデックスは、すべてのクエリで使われるわけではありません。テー + ブルが最小サイズより大きく、クエリでそのわずかなパーセンテージのロウ + を選択する時だけ、インデックスは使われます。これはインデックススキャ + ンにより起こされるランダムなディスクアクセスは、テーブルをストレート + に読む順次走査よりも遅くなることがあるからです。 </p> -<P> 何という関数がどのくらい実行時間を食っているかを見るために、プロファイリング(プロフィール付き)でコンパイルすることも可能です。そのバックエンドのプロフィール・ファイルは <I>pgsql/data/base/dbname</I> ディレクトリに格納されるでしょう。クライアントのプロフィールはクライアントの現行ディレクトリに置かれるでしょう。Linux でまともなプロファイリングを行うには <I>-DLINUX_PROFILE</I> でコンパイルする必要があります。 -</P> + <p>インデックスを使うかを決定するために、PostgreSQL はテーブルについ + ての統計情報を持たなければなりません。この統計情報は、 + <small>VACUUMANALYZE</small>または、単に <small>ANALYZE</small> を使っ + て収集することができます。統計情報を使ってオブティマイザはテーブルの + 中にあるロウ数を知り、インデックスを使うべきかの決定をより正しくでき + ます。統計情報は最適な結合順や結合方法を決める上でも貴重なものもあり + ます。統計情報の収集は、テーブルの内容がかわると毎に繰返しなされるべ + きです。</p> -<H4><A NAME="3.8">3.8</A>) 接続しようとするときに <I>'Sorry, too many clients'</I> が出るのはなぜですか? -</H4> + <p> インデックスは、通常 <small>ORDER BY</small> や結合を行なうため + には使われません。順次スキャンに続く明示的ソートは、巨大なテーブルの + インデックススキャンよりも普通は高速です。</p> -<P> <I>postmasterが</I>同時始動できるバックエンドプロセスに対する制限数を増やす必要があります。 -</P> -<P>既定の最大プロセスは32プロセスです。<I>-N</I>に適切な値を引数にして<I>postmaster</I>を再起動するか、PostgreSQL.conf を修正することによって、その値を増やすことができます。 -</P> + しかし、<small>ORDER BY</small>と組み合わされた<small>LIMIT</small> + は、テーブルの小さな部分を返すためにたびたびインデックスを使うでしょ + う。実際、MAX() や MIN() がインデックスを使わないとしても、このよう + な値をORDER BY と LIMIT を使ってインデックスを使って取り出すことが可 + 能です: -<P>もし、<I>-N</I> を 32よりも大きくするのであれば、<I>-B</I>も既定の64より大きい値に増加させなくてはならないし、<I>-B</I> は少なくとも <I>-N</I> の2倍はなくてはならず、おそらく最高性能を望むならばそれより大きい値が必要なはずです。バックエンドプロセスをたくさんにすると、いろいろなUnixカーネル構成パラメータも増やすことが必要になるかもしれません。 -共有メモリー・ブロックの最大値(<SMALL>SHMMAX</SMALL>)、 -セマフォの最大数(<SMALL>SEMMNS</SMALL>と<SMALL>SEMMNI</SMALL>)、 -プロセスの最大数(<SMALL>NPROC</SMALL>)、 -ユーザ毎の最大プロセス数(<SMALL>MAXUPRC</SMALL>)、 -開くファイルの最大数(<SMALL>NFILE</SMALL>と<SMALL>NINODE</SMALL>) -も確認事項に含まれます。 -PostgreSQLに許されるバックエンドのプロセス数が制限されているのは、 -システムのリソースを使い果してしまうことを避けるためです。 -</P> +<pre> + SELECT col + FROM tab + ORDER BY col [ DESC ] + LIMIT 1; +</pre> -<H4><A NAME="3.9">3.9</A>) <I>pgsql_tmp</I> ディレクトリの中には何がありますか? -</H4> + <p>もし、オプティマイザが間違ってシーケンシャルスキャンを選択したこ + とに疑いがなければ、<CODE>SET enable_seqscan TO 'off'</CODE>に設定し + て、クエリをもう一度実行視、インデックススキャンがまちがいなく速くなっ + ているかどうかをみてください。</p> + + <p> <small>LIKE</small> あるいは <i>~</i> のようなワイルドカード演算 + 子は特別な環境でしか使えません: + <ul> + <li>検索文字列が文字列の最初にききます。たとえば:</li> + <ul> + <li><small>LIKE</small> パターンが<i>%</i>で始まらない</li> + <li><i>~</i> (正規表現) パターンは<i>^</i>で始まらなければならない</li> + </ul> + <li>検索文字列を文字クラスから始めることはできません。たとえば、[a-e]。</li> + <li><small>ILIKE</small> や <i>~*</i> のような大文字と小文字を区別し + ない検索は使えません。そのかわり、このFAQの<a + href="#4.8">4.8</a>節で説明する式インデックスが使えます。 + </li> + <li><i>initdb</i> においては、デフォルトで<i>C</i>ロケールが使われな + くてはなりません。その理由は、Cロケール以外では次に大きな文字を + 知ることができないからです。このような場合、<pre>LIKE</pre>イン + デクシングにだけ働くような、特別な<pre>text_pattern_ops</pre>イ + ンデックスを作成することもできます。 + </li> + </ul> + <p> + + <p>8.0より前のリリースでは、インデックスは、データ型がちょうどインデッ + クスのカラムの型と一致しなければ、使えないことがしばしばありました。 + おそらく、int2, int8, および numeric 等のカラムのインデックスがそう + です。</p> + + +<h4><a NAME="4.7">4.7</a>) 問い合わせオブティマイザがどのように問い合わせを評価するのかを見るにはどうしますか?</h4> + + <p>オンラインマニュアルで <small>EXPLAIN</small> を見てください。</p> + +<h4><a name="4.8">4.8</a>) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使いますか?</h4> + + <p><i>~</i>演算子は正規表現照合を行ない、<i>~*</i> は大文字と小文字 + を区別しない(case-insensitive)正規表現照合を行います。 大文字と小文 + 字を区別しない <small>LIKE</small> 演算子を <small>ILIKE</small> と + いいます。</p> + + <p>大文字と小文字を区別しない等値比較は次のように表現できる: +<pre> + SELECT * + FROM tab + WHERE lower(col) = 'abc'; +</pre> -<P> 問い合わせ実行モジュールによって生成された一時的なファイルが、このディ -レクトリに含まれます。例えば、もし <SMALL>ORDER BY</SMALL> 句を満たすためにバックエンドの <I>-S</I> パラメータで許可した値よりも大きなスペースがソートの際に必要だとすると、溢れたデータを保持するために一時的なファイルがいくつかここに生成されます。 -</P> -<P> -一時的なファイルは自動的に消し去られるはずですが、もし、ソートの途中でバックエンドがクラッシュしてしまうとそうはなりません。<I>postmaster</I>の停止とリスタートでこれらのファイルはディレクトリから消しさられます。 -</P> + <p>標準インデックスでは使われず、しかしながら、もし、式インデックス + を作ったならそれが使われるでしょう。</p> -<PRE> - [訳注: - SYSLOGD 経由でログを出力するには、まず、configure を --enable-syslog - 付きで走らせた後、コンパイルとインストールを行ないます。 - 次に、syslog.conf に local?.* の 出力先を指定し(環境変数で変更可能)、 - syslogd に HUP シグナルを送って初期化しておきます。そして、 - $PGDATA/pg_options に syslog=2 を加えて、 postmaster を -S - オプション付きにてサーバモードで起動します。(バージョン 7.1 からは - pg_options は PostgreSQL.conf になっています。) - ] -</PRE> +<pre> + CREATE INDEX tabindex ON tab (lower(col)); +</pre> -<H4><A name="3.10">3.10</A>) PostgreSQLのメジャーリリースをアップデートするのにダンプとリストアをしなくてはならないのはなぜですか?</H4> -<P> -PostgreSQLチームはマイナーリリースでは小さな変更しか行ないませんので、7.2 から 7.2.1 へのアップグレードにはダンプとリストアの必要はありません。しかし、メジャーリリース(たとえば、7.2から7.3へのような)では、システムテーブルやデータファイルの内部フォーマットの変更をしばしば行ないます。これらの変更はたいてい複雑で、そのため我々はデータファイルのための後方互換性を維持することができません。ダンプは汎用フォーマットでデータを出力し、それを新しい内部フォーマットに読み込むことができます。</P> -<P> -ディスク上でのフォーマットに変更のない同一リリースでは、アップグレードは、ダンプ/リストアではなく、<I>pg_upgrade</I> スクリプトを使うことができます。リリースノートには、<I>pg_upgrade</I> が利用可能なリリースかどうか記されています。</P> -<H4><A name="3.11">3.11</A>) ハードウェアにはどんなコンピュータを使えばよいですか?</H4> -<P> -PCハードウェアはほとんど互換性がありますので、ほとんどの人は、すべてのPCハードウェアが同じ品質だと思い込む傾向があります。しかし、それは間違いです。ECC RAM、SCSI、および、高品質マザーボードは、安いハードウェアに比べると、より信頼性が高く、より性能も良いのです。PostgreSQL はほとんどのハードウェアで稼働しますが、信頼性や性能が重要な場合は、ハードウェアのオプションを研究することが賢明です。メーリングリストでもハードウェアオプションとトレードオフについて議論することができます。</P> +<h4><a name="4.9">4.9</a>) クエリの中で、フィールドが<small>NULL</small> であることを検出するにはどうしますか? フィールドが<small>NULL</small>かどうかでどのようにソートができますか?</h4> + <p>以下のように、<small>IS NULL</small> と <small>IS NOT + NULL</small>で、そのカラムをテストしてみます:</p> -<HR> -<H2 align="center">操作上の質問</H2> +<pre> + SELECT * + FROM tab + WHERE col IS NULL; +</pre> -<H4><A NAME="4.1">4.1</A>) バイナリ・カーソルと通常カーソルとの厳密な違いは何ですか? -</H4> + <p><small>NULL</small>状態でソートするには、<small>IS NULL</small> と + <small>IS NOT NULL</small> の修飾子を <small>ORDER BY</small> 句の中 + で使ってみます。<i>true</i> のものは <i>false</i> のものよりも高い値 + として並べられますので、次の例では NULL の記載が結果リストの上部に置 + かれます。 -<P> 詳述は、オンラインマニュアルで <SMALL>DECLARE</SMALL> を見て下さい。 -</P> +<pre> + SELECT * + FROM tab + ORDER BY (col IS NOT NULL) +</pre> -<H4><A NAME="4.2">4.2</A>) 最初の数ロウのみを <SMALL>SELECT</SMALL>するにはどうしますか?ランダムなロウ? -</H4> -<P> オンラインマニュアルで<SMALL>FETCH</SMALL>を見てください。あるいは、SELECT ... LIMIT....を使ってみて下さい。 -</P> +<h4><a name="4.10">4.10</a>) いろいろな文字型のそれぞれの違いは何ですか? +</h4> -<P>たとえ、欲しいのは最初の数ロウだけでも、すべての問い合わせを評価しなくてはならないかもしれません。<SMALL>ORDER BY</SMALL> を持った問い合わせを使うことを考えてみて下さい。 -もし、<SMALL>ORDER BY</SMALL>に合ったインデックスがあるとすると PostgreSQLは要求された最初の数ロウだけで評価できるかもしれませんが、でなれば、PostgreSQL は意図したロウが生成されるまですべてのロウを評価しなければならないかもしれません。 -</P> +<blockquote> +<table> +<tr><th>型</th><th>内部名</th><th>備考</th></tr> +<tr><td>VARCHAR(n)</td><td>varchar</td><td>最大長のサイズを指定する、詰め物無し</td></tr> +<tr><td>CHAR(n)</td><td>bpchar</td><td>指定された固定長となるように空白が詰められる</td></tr> +<tr><td>TEXT</td><td>text</td><td>長さに特別な上限は無し</td></tr> +<tr><td>BYTEA</td><td>bytea</td><td>可変長のバイト配列(null-byte safe)</td></tr> +<tr><td>"char"</td><td>char</td><td>1文字</td></tr> +</table> +</blockquote> - <P>ランダムなロウを<SMALL>SELECT</SMALL>するには、次の文を使います: -</P> -<PRE> - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; -</PRE> + <p> 内部名にお目にかかるのは、システム・カタログを調べるときや、エラー + メッセージを受け取るときです。</p> -<H4><A NAME="4.3">4.3</A>) テーブルやその他の情報のリストを <I>psql</I> で見るにはどうしますか? -</H4> -<P> - <I>psql</I>の中で、 \dt コマンドを使ってテーブルを見ます。psql の中のコマンドの完全なリストには \? を使えます。あるいは、<I>psql</I>のソースコードの<I>pgsql/src/bin/psql/describe.c</I>ファイルを見ることもできて、その中には<I>psql</I>のバックスラッシュコマンドの出力を生成する<SMALL>SQL</SMALL>コマンドが含まれています。また、<I>psql</I>を -E オプションと一緒に開始すると、実行させたコマンドを実行するために使う問い合わせを出力するようになります。PostgreSQLはまた、<SMALL>SQLi</SMALL>対応の INFORMATION SCHEMA インターフェースを用意していて、データベースについての情報を得るために問い合わせを使うことができます。 -</P> + <p> 上記の型のうち最初の4つの型は "varlena" 型です(すなわち、ディス + クの最初の4バイトがデータ長で、それの後に実際のデータが続きます)。 + このように実際の空間は宣言された大きさよりも少し大きくなります。しか + し、長い値は圧縮されるので、ディスク上の空間は思ったよりも小さくなります。</p> + <p><small>VARCHAR(n)</small> は可変長の文字列を保存するのに最適です + が、保存できる文字列の長さに制限があります。<small>TEXT</small> は長 + さに制限の無い文字列の保存のためのもので、最大で 1ギガバイトです。 + <small>CHAR(n)</small>は、<small>VARCHAR(n)</small>が与えられた文字 + だけを保存するのに対し、ブランクを詰め込んでいつも同じ長さで文字列を + 保存するのに最適です。<small>BYTEA</small>は、部分的に + <small>NULL</small> のバイトを含むバイナリデータを保存するためのもの + です。これらのタイプは同じくらいの性能特性をもちます。</p> -<H4><A NAME="4.4">4.4</A>) テーブルからカラムの削除、あるいは、データ型を変更するにはどうしますか? -</H4> -<P> <SMALL>DROP COLUMN</SMALL>機能が、<SMALL>ALTER TABLE DROP COLUMN</SMALL> としてリリース7.3 -に加えられました。それまでのバージョンでは、その代わりにこうします: -</P> +<h4><a name="4.11.1">4.11.1</a>) 通番(serial)/自動増分フィールドはどのようにつくりますか?</h4> -<PRE> - BEGIN; - LOCK TABLE old_table; - SELECT ... -- 削除したいカラム以外のカラムをすべて選択します。 - INTO TABLE new_table - FROM old_table; - DROP TABLE old_table; - ALTER TABLE new_table RENAME TO old_table; - COMMIT; -</PRE> + <p> PostgreSQL は <small>SERIAL</small> データ型をサポートします。カ + ラム上にシーケンスを自動作成します。たとえば、</p> -<P>カラムのデータタイプは次の文で変えられます: -</P> +<pre> + CREATE TABLE person ( + id SERIAL, + name TEXT + ); +</pre> + は自動的に次のように翻訳されます: +<pre> + CREATE SEQUENCE person_id_seq; + CREATE TABLE person ( + id INT4 NOT NULL DEFAULT nextval('person_id_seq'), + name TEXT + ); + [訳注: + CREATE UNIQUE INDEX person_id_key ON person ( id ); + は、 7.3 以降は自動的には行なわれなくなりました。 + ] +</pre> + 通番についてのもっと詳しい情報は、オンラインマニュアルで + <i>create_sequence</i> をごらんください。 -<PRE> - BEGIN; - ALTER TABLE tab ADD COLUMN new_col <i>new_data_type</i>; - UPDATE tab SET new_col = CAST(old_col AS <i>new_data_type</i>); - ALTER TABLE tab DROP COLUMN old_col; - COMMIT; -</PRE> -<P>これを行なったときは、抹消された行が使っているディスク空間を回収するために<I>VACUUM FULL tab</I>をしたほうが良いかもしれません。 -</P> +<h4><a name="4.11.2">4.11.2</a>) <small>SERIAL</small>データ型に挿入される値は、どうすれば得られますか?</h4> -<H4><A NAME="4.5">4.5</A>) ロウ、テーブル、データベースの最大サイズは? -</H4> + <p>ひとつの方法は、<i>nextval()</i> 関数を使ってその値を挿入する<i> + 前(before)に</i> SEQUENCE オブジェクトから次の <small>SERIAL</small> + 値を取り出し、それから実際に挿入をすることです。<a + href="#4.11.1">4.11.1</a> のテーブルの例を使うとすると、疑似言語では + このようになります。</p> -<P> 制限は以下のとおりです。 -</P> -<PRE> -データベースの最大サイズ? 制限無し (32 TB のデータベースも存在します) -テーブルの最大サイズ? 32TB -ロウの最大サイズ? 1.6TB -フィールドの最大サイズ? 1GB -テーブル内での最大ロウ数? 制限無し -テーブル内での最大カラム数? カラムの型により250-1600 -テーブル内での最大インデックス数? 制限無し -</PRE> +<pre> + new_id = execute("SELECT nextval('person_id_seq')"); + execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); +</pre> -<P> もちろん、これらは実際は無制限ではなく、ディスク容量とメモリーやスワップスペースの大きさにより制限されます。性能はこれらの値がことのほか大きな時に煽りを受けます。 -</P> + そうして、<tt>new_id</tt> に保存した新しい値を他のクエリ(たとえば、 + <tt>person</tt> テーブルに対する外部キー(foreign key)のように)使うと + よいでしょう。自動的に作られた<small>SEQUENCE</small>オブジェクトの + 名前は、<<i>table</i>>_<<i>serialcolumn</i>>_<i>seq</i> + のようになり、このうち、<i>table</i> と <i>serialcolumn</i> はそれぞ + れテーブルの名前と<small>SERIAL</small>カラムの名前です。 -<P> 最大テーブルサイズの32TBはオペレーティングシステムによる巨大ファイルのサポートは必要としません。巨大なテーブルは複数の1GBのファイルに分けて保存されますので、ファイルシステムの制限は重要ではありません。 -</P> + <p>あるいは、与えられた<small>SERIAL</small>値を、それが既定値として + 挿入された<i>後で(after)</i>、 <i>currval()</i> 関数を使って取り出す + こともできます。たとえば、 </p> -<P> デフォルトのブロックサイズを32kにすることで、最大テーブルサイズと最大カラム数とを4倍にすることができます。 -</P> +<pre> + execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); + new_id = execute("SELECT currval('person_id_seq')"); +</pre> -<H4><A NAME="4.6">4.6</A>) 一般的なテキストファイルからデータを保存するには、データベースのディスク容量はどのくらい必要です? -</H4> -<P> -普通のテキストファイルを PostgreSQL のデータベースに保存するには、最大で約5倍のディスク容量を必要とします。</P> +<h4><a name="4.11.3">4.11.3</a>) <i>currval()</i> は他のユーザとの競合状態に陥ることはないですか?</h4> -<P> 例題として、各行に整数とテキスト記述を持つ 100,000行のファイルを考え -てみましょう。テキストの文字列の平均長さを20バイトと仮定すると、フラット -ファイルの大きさは約2.8MB です。このデータを含む PostgreSQL データベース -ファイルの大きさは次のように約6.4MBと見積もることができます: -</P> + <p>それはありません。<i>currval()</i> は、すべてのユーザではありませ + んが、読者のセッションに与えられた現在の値を返します。 </p> -<PRE> - 32 bytes: 各ロウのヘッダ(概算) - 24 bytes: 整数(int)フィールドとテキスト(text)フィールド - + 4 bytes: ページ上のタップルへのポインタ - ---------------------------------------- - 60 bytes per row - PostgreSQL のデータページサイズは 8192バイト(8KB)なので: +<h4><a name="4.11.4">4.11.4</a>) トランザクションが中断したときにもういちどシーケンス番号が使われないのはなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか?</h4> - 8192 bytes per page - ------------------- = 136 rows per database page (切り捨て) - 60 bytes per row + <p>同時性を改善するために、実行中のトランザクションに、必要に応じてト + ランザクションが終了するまでロックされないようシーケンス値を与えてい + ます。このためトランザクションが中断されると番号割り当てにギャップを + 生じます。</p> - 100000 data rows - -------------------- = 782 database pages (切り上げ) - 128 rows per page - - 735 database pages * 8192 bytes per page = 6,021,120 bytes (6 MB) -</PRE> - -<P> -インデックスは、これほどのオーバヘッドは要求しませんが、インデックス付けされるデータを含む以上、それなりに大きくなります。 -</P> -<P><SMALL>NULL</SMALL>はビットマップとして保存されていて、それらがわずかにスペースを使います。 -</P> - -<H4><A NAME="4.7">4.7</A>) 定義されたテーブル、インデックス、データベース、および、ユーザをどのようにして見つけ出しますか? -</H4> - -<P> <I>psql</I> にはいろいろなバックスラッシュ・コマンドがあり、こうした情報を表示します。バックスラッシュ・コマンドの種類を見るには \? を使って下さい。また、<i>pg_</i> で始まるシステムテーブルにも記述されています。さらに、<i>psql -l</i> はすべてのデータベースをリスト表示します。 -</P> - -<P> また、<I>pgsql/src/tutorial/syscat.source</I> ファイルを走らせてみて下さい。それは、沢山の <SMALL>SELECT</SMALL> 文により必要な情報をデータベースのシステム・テーブルから取り出して例示してくれます。 -</P> - -<H4><A NAME="4.8">4.8</A>) 問い合わせが遅いうえ、インデックスを使っている様子がありません。なぜですか? -</H4> - -<P> -インデックスは自動的にすべての問い合わせで使われるわけではありません。テー -ブルが最小サイズより大きく、問い合わせでそのわずかなパーセンテージのロウを -選択する時だけ、インデックスは使われます。これはインデックススキャンによ -り起こされるランダムなディスクアクセスは、テーブルをストレートに読む順次 -走査よりも遅くなることがあるからです。 -</P> - - <P>インデックスを使うかを決定するために、PostgreSQL はテーブルについ -ての統計情報を持たなければなりません。この統計情報は、<SMALL>VACUUM -ANALYZE</SMALL>または、単に <SMALL>ANALYZE</SMALL> を使って収集すること -ができます。統計情報を使ってオブティマイザはテーブルの中にあるロウ数を知 -り、インデックスを使うべきかの決定をより正しくできます。統計情報は最適 -な結合順や結合方法を決める上でも貴重なものもあります。統計情報の収集は、 -テーブルの内容がかわると毎に繰返しなされるべきです。</P> - - <P> インデックスは、通常 <SMALL>ORDER BY</SMALL> や結合を行な -うためには使われません。順次スキャンに続く明示的ソートは、巨大なテーブル -のインデックススキャンよりも普通は高速です。</P> -<P> - しかし、<SMALL>ORDER BY</SMALL>と組み合わされた<SMALL>LIMIT</SMALL> -は、テーブルの小さな部分を返すためにたびたびインデックスを使うでしょう。 -実際、MAX() や MIN() がインデックスを使わないとしても、このような値を -ORDER BY と LIMIT を使ってインデックスを使って取り出すことが可能です: -</P> - -<PRE> - SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; -</PRE> - - <P>もし、オプティマイザが間違ってシーケンシャルスキャンを選択したことに疑いがなければ、<CODE>SET enable_seqscan TO 'off'</CODE>を使ってインデックススキャンでまちがいなく速くなっているかをテストをしてみてください。</P> - - <P> <SMALL>LIKE</SMALL> あるいは <I>~</I> のようなワイルドカード演算 -子は特別な環境でしか使えません: -</P> - <UL> - <LI>検索文字列が文字列の最初にききます。たとえば: - <UL> - <LI><SMALL>LIKE</SMALL> パターンが<I>%</I>で始まらない</LI> - <LI><I>~</I> (正規表現) パターンは<I>^</I>で始まらなければならない</LI> - </UL></LI> - <LI>検索文字列を文字クラスから始めることはできません。たとえば、[a-e]。</LI> - <LI><SMALL>ILIKE</SMALL> や <I>~*</I> のような大文字と小文字を区別し - ない検索は使えません。そのかわり、このFAQの<a href="#4.12">4.12</a>節で説明する関数のインデックスが使えます。</LI> - <LI><i>initdb</i> においては、デフォルトで<I>C</I>ロケールが使われな -くてはなりません。その理由は、Cロケール以外では次に大きな文字を知ること -ができないからです。このような場合、<code>LIKE</code>インデクシングにだけ -働くような、特別な<code>text_pattern_ops</code>インデックスを作成 -することもできます。 -</LI> - </UL> - - <P>8.0より前のリリースでは、インデックスは、データ型がちょうどインデックスのカラムの型と一致しなければ、使えないことがしばしばありました。おそらく、int2, int8, および numeric 等のカラムのインデックスがそうです。</P> -[訳注: - 強制的にインデックスを使うには SET enable_seqscan = off を実行します。 -] +<h4><a name="4.12">4.12</a>) <small>OID</small> とは何ですか? <small>CTID</small> とは何ですか?</h4> + <p>PostgreSQLでつくられるすべてのロウは、<small>WITHOUT OIDS</small> + でつくられないかぎり一意の<small>OID</small>を得ます。 + O<small>ID</small>は自動的に4バイトの整数で与えられ、それは、全イン + ストレーションを通して一意な値となります。しかし、約40億でオーバーフ + ローし、そして、O<small>ID</small>は重複をしはじめます。PostgreSQLは + 内部システムテーブルを一緒にリンクするtためにO<small>ID</small> を使 + います。 -<H4><A NAME="4.9">4.9</A>) 問い合わせオブティマイザがどのように問い合わせを評価するのかを見るにはどうしますか? -</H4> + <p>ユーザのテーブルのカラムに一意の番号を付けるためには、 + O<small>ID</small> ではなく <small>SERIAL</small> を使うのが最もよい + でしょう。<small>SERIAL</small>の連番は1つのテーブル内でのみ一意にな + るからで、オーバーフローを起こしにくいと考えられます。 + 8バイトのシーケンス値を保存するために、<small>SERIAL8</small>があり + ます。</p> -<P> オンラインマニュアルで <SMALL>EXPLAIN</SMALL> を見て下さい。 -</P> + <p>C<small>TID</small> は、特定の物理ロウをブロックとオフセットの値 + で識別するために使われます。C<small>TID</small>は、ロウが修正された + り再読込みされたときに変わります。また、物理ロウを差すためにインデッ + クスの記載に使われます。</p> -<H3><A NAME="4.10">4.10</A>) R-tree インデックスとは何ですか?</H3> -<P> R-tree インデックスは空間的なデータにインデックスを付けるために使われます。ハッシュインデックスでは範囲の検索ができません。また、B-tree インデックスでは、1次元でしか範囲の検索ができません。R-tree インデックスであれば多次元のデータを扱えます。たとえば、もし R-tree インデックスを <I>point</I> 型の属性に付けることができるとするとシステムは、「長方形に囲まれた点をすべて選択する」というような問い合わせに、より効率良く答えられます。 -</P> +<h4><a name="4.13">4.13</a>) エラーメッセージ <i>"ERROR: Memory exhausted in AllocSetAlloc()"</i>が出るのはなぜですか?</h4> -<P> R-Tree の設計の原典となる権威ある論文は: -</P> + <p>おそらく、システムの仮想メモリーを全て使い果たしてしまっている可 + 能性があるか、カーネルがあるリソースについてもつ制限値が低すぎる可能 + 性があります。<i>postmaster</i> を始動する前にこれを試してみてください:</p> -<P> Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial Searching." -Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57. -</P> +<pre> + ulimit -d 262144 + limit datasize 256m +</pre> -<P> この論文は、Stonebraker 教授の "Readings in Database Systems" -でも取り上げられています。 -</P> + シェルによって、どちらかひとつが成功するでしょうが、これはプロセスの + データセグメント制限をより高く設定し、たぶんクエリが完結するようにな + るでしょう。このコマンドは現行のプロセスと、このコマンドを走らせた後 + に作られる全てのサブプロセスについて適用されます。バックエンドがとて + も多くのデータを返すために<small>SQL</small> クライアントで問題が続 + いているのであれば、クライアントを開始する前にこれを試してみてくださ + い。 -<PRE> - [訳注: - 奈良先端大の石川佳治さんよりR-Tree関係の文献を紹介して頂きました。 - 日本語 Postgres ML のアーカイブから "Subject: [postgres95 801] spatial data structures" - <A HREF="http://www.sra.co.jp/people/t-ishii/PostgreSQL/mhonarc/pgsql-jp/1996Oct/msg00007.html">http://www.sra.co.jp/people/t-ishii/PostgreSQL/mhonarc/pgsql-jp/1996Oct/msg00007.html</A> - をご覧下さい。 - ] -</PRE> +<h4><a name="4.14">4.14</a>) どのバージョンの PostgreSQL を走らせているかを調べるにはどうしますか?<br /></h4> -<P> 組込みの R-Tree でポリゴンやボックスを操作できます。理論的にはR-Tree はもっと高い次元を操作するようにも拡張できます。実質的には、R-Tree の拡張にはちょっとした作業が必要でして、現在、我々はそれをどのようにするかについての文書を持っていません。 -</P> + <p><i>psql</i> から <CODE>SELECT version();</CODE> をタイプします。</p> -<PRE> - [訳注: - R-Tree インデックスはGiSTで開発されています。 - <a href="http://www.sai.msu.su/~megera/postgres/gist/">http://www.sai.msu.su/~megera/postgres/gist/</a> - ] -</PRE> +<h4><a name="4.15">4.15</a>) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか?<br /></h4> -<H4><A NAME="4.11">4.11</A>) 遺伝的問い合わせ最適化とは何ですか? -</H4> + <p><i>CURRENT_TIMESTAMP</i>を使います:</p> +<pre> + CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); +</pre> -<P> GEQO モジュールは、沢山のテーブルを結合するときに、遺伝的アルゴリズム(GA)で問合わせを高速化します。これにより、しらみつぶしに探索を行なわなくても、大きな結合(join queries)を扱うことができるようになります。 -</P> -<H4><A NAME="4.12">4.12</A>) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使いますか? -</H4> +<h4><a name="4.16">4.16</a>) <i>外部</i>結合(<i>outer</i> join)はどのように実現しますか?<br /></h4> -<P> -<I>~</I>演算子は正規表現照合を行ない、<I>~*</I> は大文字と小文字を区別しない(case-insensitive)正規表現照合を行います。 大文字と小文字を区別しない <SMALL>LIKE</SMALL> 演算子を <SMALL>ILIKE</SMALL> といいます。 -</P> + <p>PostgreSQL は SQL 標準構文を使う外部結合(アウタージョイン)をサポー + トします。ここに 2つの例題があります。</p> -<P>大文字と小文字を区別しない等値比較は次のように表現できる: -</P> - -<PRE> +<pre> SELECT * - FROM tab - WHERE lower(col) = 'abc'; -</PRE> -<P> -標準インデックスでは使われず、しかしながら、もし関数インデックスを -作ったならそれが使われるでしょう。 -</P> - <PRE> - CREATE INDEX tabindex ON tab (lower(col)); - </PRE> - - -<H4><A NAME="4.13">4.13</A>) 問い合わせの中で、フィールドが <SMALL>NULL</SMALL> であることを検出するにはどうしますか? -</H4> - - <P>カラムを <SMALL>IS NULL</SMALL> と <SMALL>IS NOT NULL</SMALL> -とで試してみます。</P> - -<H4><A NAME="4.14">4.14</A>) 様々な文字型のそれぞれの違いは何ですか? -</H4> - -<PRE> -Type Internal Name Notes --------------------------------------------------- -VARCHAR(n) varchar 最大長のサイズを指定する、詰め物無し -CHAR(n) bpchar 指定された固定長となるように空白が詰められる -TEXT text 長さに上限の無いテキスト -BYTEA bytea 可変長のバイト配列(null-byte safe) -"char" char 1文字 -</PRE> - -<P> 内部名にお目にかかるのは、システム・カタログを調べるときや、エラーメッセージを受け取るときです。 -</P> - -<P> 上記の型のうち最初の4つの型は "varlena" 型です(すなわち、ディスクの最初の4バイトがデータ長で、それの後に実際のデータが続きます)。このように実際の空間は宣言された大きさよりも少し大きくなります。しかし、これらのデータ型は<SMALL>TOAST</SMALL>により圧縮されたり複数ロウに渡って保存されたりして、ディスク上の空間は思ったより小さくなります。 -</P> - -<P><SMALL>VARCHAR(n)</SMALL> は可変長の文字列を保存するのに最適ですが、保存できる文字列の長さに制限があります。<SMALL>TEXT</SMALL> は長さに制限の無い文字列の保存のためのもので、最大で 1ギガバイトです。 <SMALL>CHAR(n)</SMALL>は、<SMALL>VARCHAR(n)</SMALL>が与えられた文字だけを保存するのに対し、ブランクを詰め込んでいつも同じ長さで文字列を保存するのに最適です。<SMALL>BYTEA</SMALL>は、部分的に<SMALL>NULL</SMALL> のバイトを含むバイナリデータを保存するためのものです。これらのタイプは同じくらいの性能特性をもちます。</P> - -<H4><A NAME="4.15.1">4.15.1</A>) 通番(serial)/自動増分フィールドはどのようにつくりますか? -</H4> - -<P> PostgreSQL は <SMALL>SERIAL</SMALL> データ型をサポートします。カラム上にシーケンスを自動作成します。たとえば、 -</P> - -<PRE> - CREATE TABLE person ( - id SERIAL, - name TEXT - ); -</PRE> -<P> -は自動的に次のように翻訳されます: -</P> -<PRE> - CREATE SEQUENCE person_id_seq; - CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT - ); - - [訳注: - CREATE UNIQUE INDEX person_id_key ON person ( id ); - は、 7.3 からは自動的には行なわれなくなりました。 - ] -</PRE> -<P> -通番についてのもっと詳しい情報は、オンラインマニュアルで <I>create_sequence</I> をご覧下さい。 -</P> -<P> また、各ロウの<I>OID</I>フィールドを一意値として使うこともできます。しかしながら、もしもデータベースをダンプしてリロードする必要がある場合は、<SMALL>OID</SMALL>を温存するために<I>pg_dump</I> で <I>-o</I>オプションを使うか、または、<SMALL>COPY WITH OIDS</small>オプションを使う必要があります。 -</P> - -<H4><A NAME="4.15.2">4.15.2</A>) <SMALL>SERIAL</SMALL>データ型に挿入される値は、どうすれば得られますか? -</H4> - <P>ひとつの方法は、<I>nextval()</I> 関数を使ってその値を挿入する<I>前(before)に</I> SEQUENCE オブジェクトから次の <SMALL>SERIAL</SMALL> 値を取り出し、それから実際に挿入をすることです。<A HREF="#4.15.1">4.15.1</A> のテーブルの例を使うとすると、疑似言語ではこのようになります。 -</P> - -<PRE> - new_id = execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); -</PRE> - -<P> -そうして、<tt>new_id</tt> に保存した新しい値を他の問い合わせに(たとえば、<tt>person</tt> テーブルに対する外部キー(foreign key)のように)使うとよいでしょう。自動的に作られた<SMALL>SEQUENCE</SMALL>オブジェクトの名前は、<<I>table</I>>_<<I>serialcolumn</I>>_<I>seq</I> のようになり、このうち、<I>table</I> と <I>serialcolumn</I> はそれぞれテーブルの名前と<SMALL>SERIAL</SMALL>カラムの名前です。 -</P> -<P> -あるいは、与えられた<SMALL>SERIAL</SMALL>値を、それが既定値として挿入された<I>後で(after)</I>、 <I>currval()</I> 関数を使って取り出すこともできます。たとえば、 -</P> - -<PRE> - execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - new_id = execute("SELECT currval('person_id_seq')"); -</PRE> - -<P> -最後に、<SMALL>INSERT</SMALL>文から返る<A HREF="#4.17"><SMALL>OID</SMALL></A>を使って、既定値をみつけることもできますが、しかし、oidの値は40億に達するともとに戻ってしまい、最も移植性の低いやり方となるでしょう。Perl DBI の DBD::Pg モジュールを使えば、$sth->execute() の後に $sth->{pg_oid_status} を経由してその OID 値を使えるようにすることはできます。 -</P> - -<H4><A NAME="4.15.3">4.15.3</A>) <I>currval()</I> は他のユーザとの競合状態に陥ることはないですか? -</H4> - - <P>それはありません。<I>currval()</I> は、すべてのユーザではありませんが、あなたのバックエンドに与えられた現在の値を返します。 -</P> - -<H4><A name="4.15.4">4.15.4</A>) トランザクションが中断したときにもういちどシーケンス番号が使われないのはなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか? -</H4> - - <P>同時性を改善するために、実行中のトランザクションに、必要でトランザクションが終了するまでロックされないシーケンス値を与えています。このためトランザクションが中断されると番号割り当てにギャップを生じます。 -</P> - -<H4><A NAME="4.16">4.16</A>) <SMALL>OID</SMALL> とは何ですか? <SMALL>TID</SMALL> とは何ですか? -</H4> - -<P> <SMALL>OID</SMALL> とは一意のロウID に対する PostgreSQL の答えです。PostgreSQL の中でつくられるすべてのロウは一意の <SMALL>OID</SMALL> を得ます。<I>initdb</I> で発生される <SMALL>OID</SMALL> はすべて 16384 (<I>include/access/transam.h</I> から)より小さな値です。<I>initdb</I> 後のすべての <SMALL>OID</SMALL> (ユーザ作成)はそれ以上の値になります。 -既定では、これらすべての <SMALL>OID</SMALL>は一つのデーブルやデータベース内に留まらず、PostgreSQL インストレーション全体の中で一意です。 -</P> - -<P> PostgreSQL はテーブル間のロウを結びつけるために、そのシステムテーブル内に <SMALL>OID</SMALL> を使います。この <SMALL>OID</SMALL> は特定のユーザのロウを識別するためや結合の中で使われることができます。<SMALL>OID</SMALL> の値を保存するためには <I>OID</I> 型をカラムに使うことを奨めます。より速くアクセスするために <I>OID</I> フィールドにインデックスを作ることができます。 - - O<SMALL>ID</SMALL> は、全てのデータベースで使われる中央領域から、全ての新しいロウに割り当てられます。<SMALL>OID</SMALL> を他の何かに変えたい、あるいは元の <SMALL>OID</SMALL> もテーブルと一緒にコピーしたいのなら、できなくはありません。 - -</P> - -<PRE> - CREATE TABLE new_table(mycol int); - SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table; - COPY tmp_table TO '/tmp/pgtable'; - COPY new_table WITH OIDS FROM '/tmp/pgtable'; - DROP TABLE tmp_table; -</PRE> - -<P> O<SMALL>ID</SMALL> は、4バイトの整数として保存されているので、40億を越えると溢れてしまうでしょう。誰もこれが起きたと報告してくる人はいませんでしたが、そうなる前にこの制限を取り除くことを計画しています。 -</P> - -<P> T<SMALL>ID</SMALL> は特定の物理ロウをそのブロックとオフセット値で識別するために使われます。<SMALL>TID</SMALL> はロウが修正されたり再ロードされると変わります。それらの <SMALL>TID</SMALL> は、物理ロウを指すためにインデックス記載で使われます。 -</P> - -<H4><A NAME="4.17">4.17</A>) PostgreSQL で使われるいくつかの用語の意味は何ですか? -</H4> - -<P> いくつかのソースコードや古い文書の中には、それぞの専門分野の中でもっと一般的に使われる専門用語が使われています。 -</P> - -<UL> -<LI> テーブル(table)、関係(relation)、クラス(class)</LI> -<LI> ロウ(row)、レコード(record)、タップル(tuple)</LI> -<LI> カラム(column)、フィールド(field)、属性(attribute)</LI> -<LI> 取得(retrieve)、選択(select)</LI> -<LI> 置換(replace)、更新(update)</LI> -<LI> 追加(append)、挿入(insert)</LI> -<LI> <SMALL>OID</SMALL>, 連番(serial value)</LI> -<LI> ポータル(portal), カーソル(cursor)</LI> -<LI> 領域変数(range variable)、テーブル名(table name)、テーブル別名(table alias)</LI> -</UL> -<P>一般的なデータベース用語のリストは:<a -href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A> -で見つけられます。</P> - -<H4><A NAME="4.18">4.18</A>) エラーメッセージ <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>が出るのはなぜですか? -</H4> -<P> -おそらく、システムの仮想メモリーを全て使い果たしてしまっている可能性があるか、カーネルがあるリソースについてもつ制限値が低すぎる可能性があります。 -<I>postmaster</I> を始動する前にこれを試してみて下さい: -</P> - -<PRE> - ulimit -d 262144 - limit datasize 256m -</PRE> - -<P> -シェルによって、どちらかひとつが成功するでしょうが、これはプロセスのデータセグメント制限をより高く設定し、たぶん問い合わせが完結するようになるでしょう。このコマンドは現行のプロセスと、このコマンドを走らせた後に作られる全てのサブプロセスについて適用されます。バックエンドがとても多くのデータを返すために<SMALL>SQL</SMALL> クライアントで問題が続いているのであれば、クライアントを開始する前にこれを試してみてください。 -</P> - -<H4><A NAME="4.19">4.19</A>) どのバージョンの PostgreSQL を走らせているかを調べるにはどうしますか?<BR> -</H4> -<P> -<I>psql</I> から <CODE>SELECT version();</CODE> をタイプします。 -</P> - -<H4><A NAME="4.20">4.20</A>) ラージ・オブジェクトの操作で<I>invalid large obj descriptor</I> を受け取りました。なぜでしょうか? -</H4> - -<P>ラージ・オブジェクト操作をするときは、前後に<tt>BEGIN WORK</tt>と<tt>COMMIT</tt>を付ける必要があります。すなわち、<tt>lo_open</tt> ... <tt>lo_close</tt>をはさみ込みます。 -</P> - -<P>現在は、PostgreSQLのトランザクションのコミット時にラージ・オブジェクト・ハンドルを閉じることにより、<I>lo_open</I>コマンドが完了した直後に強制的にルールを実行します。このため、最初にハンドルに対して何かをしようとすると、<I>invalid large obj descriptor(ラージ・オブジェクトの記述子が不正)</I>となります。それで、もし、トランザクションを使うのを忘れると、(少なくともほとんどの時間)働いていたコードがエラーメッセージを出すのです。 -</P> - -<P>もし、<SMALL>ODBC</SMALL>のようなクライアントインターフェイスをお使いなら、<tt>auto-commit off</tt>を設定する必要があるかもしれません。 -</P> - - -<H4><A NAME="4.21">4.21</A>) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか?<BR></H4> - -<P><i>CURRENT_TIMESTAMP</i>を使います: -</P> -<PRE> - CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); -</PRE> - -<H4><A NAME="4.22">4.22</A>) なぜ、<SMALL>IN</SMALL>を使う副問い合わせがとても遅いのですか? -</H4> -<P> - 7.4 より前のバージョンでは、副問い合わせは、副問い合わせの結果を外部問い合わせの各ロウについて順次走査することによって、外部の問い合わせに結合させられる。 -副問い合わせがわずかなロウしか返さず、外部問い合わせが沢山のロウを返す場合は、<CODE><SMALL>IN</SMALL></CODE>が最も早いです。他の問い合わせを高速化するには、<CODE>IN</CODE>を<CODE>EXISTS</CODE>に置換します: -</P> - -<PRE> - SELECT * - FROM tab - WHERE col IN (SELECT subcol FROM subtab) -</PRE> -<P> -を、置き換えて: -</P> -<PRE> - SELECT * - FROM tab - WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col) -</PRE> -<P> -とします。 -これが手っ取り早いですが、<CODE>subcol</CODE>は索引付きカラムであるべきです。 -</P> -<P>バージョン7.4以降では、<CODE>IN</CODE>は、通常の問い合わせと同様の洗練されたジョインの技術を実際に使い、<CODE>EXISTS</CODE>を使うことを好みます。 -</P> - - - -<H4><A NAME="4.23">4.23</A>) <i>外部</i>結合(<i>outer</i> join)はどのように実現しますか?<BR></H4> -<P> -PostgreSQL は SQL 標準構文を使う外部結合(アウタージョイン)をサポートします。ここに 2つの例題があります。 -</P> - -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -</PRE> -<P> + FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); +</pre> あるいは -</P> -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN t2 USING (col); -</PRE> -<P> -これらの象徴的な問い合わせでは t1.col を t2.col と結合して、t1 の結合されなかったロウ(t2 と一致しなかったロウ)も返しています。<SMALL>RIGHT</SMALL> 結合は t2 の結合されなかったロウを加えるでしょう。<SMALL>FULL</SMALL> 結合は、一致したロウに t1 と t2 からは結合されなかったロウを返すでしょう。<SMALL>OUTER</SMALL> という言葉はオプションで <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL>, または <SMALL>FULL</SMALL> などの結合を仮定されています。通常、結合は<SMALL>INNER</SMALL>結合と呼ばれます。 -</P> -<P> -以前のリリースでは外部結合(outer join)を<SMALL>UNION</SMALL> と <SMALL>NOT IN</SMALL> を使ってシミュレートできます。 -たとえば、<i>tab1</i> と <i>tab2</i> を結合するときは、次の問い合わせで二つのテーブルを<i>外部</i>結合します。 -</P> -<PRE> - SELECT tab1.col1, tab2.col2 - FROM tab1, tab2 - WHERE tab1.col1 = tab2.col1 - UNION ALL - SELECT tab1.col1, NULL - FROM tab1 - WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2) - ORDER BY col1 -</PRE> - -<H4><A NAME="4.24">4.24</A>) 複数のデータベースを使う問い合わせはどのようにすればできますか?<BR></H4> - -<P> -現行のデータベース以外への問い合わせ方法はありません。というのもPostgreSQLがデータベース仕様のシステムカタログを読み込むためで、そこには、たとえそのふりをするだけにしろ、データベースを越えて問い合わせをするすべがありません。 -</P><P> -<I>contrib/dblink</I> はデータベース間(cross-database)の問い合わせを関数呼出しにより許します。もちろん、クライアントは同時に接続を別のデータベースへも張らなくてはならず、結果をクライアント側でマージしなくてはなりません。</P> - - -<H4><A NAME="4.25">4.25</A>) 関数で複数のロウまたはカラムを返すにはどうしますか?<BR></H4> - -<P>7.3では関数から、複数のロウや複数カラムを簡単に返せます。 -<a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</a>。 -</P> - -<H4><A name="4.26">4.26</A>)なぜ、PL/PgSQL 関数の中から一時テーブルを確実に create/drop することができないのでしょうか?</H4> -<P> -PL/PgSQL は関数の内容をキャッシュし、その不幸な副作用のため、もし PL/PgSQL 関数が一時テーブルにアクセスすると、そのテーブルはあとでドロップされ再作成されますが、関数が再び呼び出されると、キャッシュされているその関数の内容はまだ古い一時テーブルを依然として指しているからです。解決策は、 PL/PgSQL の中で <SMALL>EXECUTE</SMALL> を一時テーブルアクセスのために使うことです。これで、毎回問い合わせをパースし直すことになるでしょう。</P> - - -<H4><A name="4.27">4.27</A>) どのような暗号化オプションを利用できますか? -</H4> -<UL> -<LI><I>contrib/pgcrypto</I>には<SMALL>SQL</SMALL>問い合わせの中で使うための沢山の暗号化を含みます。 -</LI> -<LI>クライアントとサーバとの間の伝送を暗号化するには、サーバでは<I>postgresql.conf</I>の<I>ssl</I>オプションを<I>true</I> に設定し、<I>pg_hba.conf</I>には適用する<I>host</I>あるいは<I>hostssl</I>の行がなくてはなりません。そして、クライアントでは<I>sslmode</I>を<I>disable</I>にしてはなりません。 -(PostgreSQL純正のSSL接続のかわりに、stunnel や ssh サードパーティ製の暗号化転送を使うことも可能であることも記しておきます。) -</LI> -<LI>バージョン7.3 ではデータベースユーザのパスワードは保存される時に自動的に暗号化されます。 それより前のバージョンでは<I>postgresql.conf</I>中で<I>PASSWORD_ENCRYPTION</I>を有効にする必要があります。 -</LI> - -<LI>サーバーを走らせるのに暗号化ファイルシステムを使うこともできます。</LI> -</UL> - - <pre> -[訳注 - レプリケーション関連の項目がなくなりましたが、訳注のみ残してあります。 + SELECT * + FROM t1 LEFT OUTER JOIN t2 USING (col); +</pre> - Jan Wieckさんによるカスケード可能なマスター・スレーブ型のレプリケーション Slony-I - http://gborg.postgresql.org/project/slony1/projdisplay.php +これらの象徴的なクエリでは t1.col を t2.col と結合して、t1 の結合されなかったロウ(t2 と一致しなかったロウ)も返しています。<small>RIGHT</small> 結合は t2 の結合されなかったロウを加えるでしょう。<small>FULL</small> 結合は、一致したロウに t1 と t2 からは結合されなかったロウを返すでしょう。<small>OUTER</small> という言葉はオプションで <small>LEFT</small>, <small>RIGHT</small>, または <small>FULL</small> などの結合を仮定されています。通常、結合は<small>INNER</small>結合と呼ばれます。 - 石井達夫さんによるコネクションプール サーバ PGPool - http://www2b.biglobe.ne.jp/~caco/pgpool/ - 三谷篤さんによるマルチマスタ方式の同期レプリケーション PGCluster - http://www.csra.co.jp/~mitani/jpug/pgcluster/index.html +<h4><a name="4.17">4.17</a>) 複数のデータベースを使う問い合わせはどのようにすればできますか?</h4> - JPUG 分散トランザクション開発分科会では、永安悟史さんが2相コミット - の実装を行いました。 - http://www.postgresql.jp/wg/dt/index.html -] -</pre> + <p>現行のデータベース以外への問い合わせの方法はありません。というの + もPostgreSQLがデータベース仕様のシステムカタログを読み込むためで、そ + こには、たとえそのふりをするだけにしろ、データベースを越えて問い合わ + せをするすべがありません。 </p> + <p><i>contrib/dblink</i> はデータベース間(cross-database)の問い合わ + せを関数呼出しにより許します。もちろん、クライアントは同時に接続を別 + のデータベースへも張らなくてはならず、結果をクライアント側でマージし + なくてはなりません。</p> -<HR> -<H2 align="center">PostgreSQLの拡張についての質問</H2> -<H4><A NAME="5.1">5.1</A>) 自分で書いたユーザ定義関数を psql の中で実行するとコア・ダンプしてしまうのはなぜですか? -</H4> +<h4><a name="4.18">4.18</a>) 関数から複数のロウまたはカラムを返すにはどうしますか?</h4> -<P> 問題は色々と考えられますが、まず最初に、作成したユーザ定義関数を単独のテストプログラムにして試してみて下さい。 -</P> + <p>集合を返す関数(Set Returning Functions): + <a href="http://techdocs.postgresql.org/guides/SetReturningFunctions"> + http://techdocs.postgresql.org/guides/SetReturningFunctions</a> + を使うと簡単です</p>。 -<H4><A NAME="5.2">5.2</A>) PostgreSQL 用に書いたちょっと素敵な新しい型や関数を提供してプロジェクトに貢献したいのですが? -</H4> -<P> 皆さんの行なった拡張を、<I>pgsql-hackers</I> メーリング・リストに送ってください。そして、ゆくゆくはそうした拡張が <I>contrib/</I> サブディレクトリの中に入ることになるでしょう。 -</P> +<h4><a name="4.19">4.19</a>) PL/PgSQL の関数の中で一時テーブルにアクセスするとき、どうして "relation with OID ##### does not exist" というエラーを受け取るのでしょうか?</h4> -<H4><A NAME="5.3">5.3</A>) タプルを返す C言語の関数はどのように書きますか? -</H4> + <p>PL/PgSQL は関数スクリプトをキャッシュし、不幸にもその副作用で、 + PL/PgSQL関数が一時テーブルにアクセスする場合、後でそのテーブルを消し + て作りなおされ、関数がもう一度呼び出されると、その関数はキャッシュし + ている関数の内容はまだ古い一時テーブルを差し示したままだからです。 + この、解決策として、PL/PgSQLの中で <small>EXECUTE</small> を一時テー + ブルへのアクセスのために使います。そうすると、クエリは毎回パースをや + り直しされるようになります。</p> -<P>バージョン7.3以降のPostgreSQLでは、テーブルを返す関数を C, PL/PgSQL、そして SQL にて完全にサポートします。詳しくはプログラマガイドの情報を見てください。Cで定義された表を返す関数の例題が<I>contrib/tablefunc</I>の中にあります。 -</P> +<h4><a name="4.20">4.20</a>) どのようなレプリケーションのソリューションがありますか?</h4> + <p>「レプリケーション」と一言で言いますすが、レプリケーションをする + ための技術はいくつかあり、それぞれ、利点と欠点があります。</p> -<H4><A NAME="5.4">5.4</A>) ソース・ファイルを変更しました。再コンパイルしても変化が見られないのはなぜですか? -</H4> + <p>マスタ/スレーブのレプリケーションは、読み/書きのクエリを受け取 + るシングルマスタが可能で、スレーブでは 読み/<small>SELECT</small>の + 問い合わせだけを受け付けることができます。最も人気がある、フリーで利 + 用できる、マスタ-スレーブのPosrgreSQLレプリケーションソリューション + は、<a + href="http://gborg.postgresql.org/project/slony1/projdisplay.php"> + Slony-I</a> です。</p> -<P> いくつかの <I>Makefile</I> がインクルード・ファイルに対して適切な依存関係を持っていません。<I>make clean</I> をしてからもう一度 <I>make</I> を行なわなくてはなりません。もし、<SMALL>GCC</SMALL> をお使いであれば <i>configure</i> の <i>--enable-depend</i> オプションを使って、コンパイラに依存関係を自動的に調べさせることもできます。 -</P> + <p>マルチ-マスタのレプリケーションは、読み/書きのクエリを受けと + り、複数のレプリケートさせるコンピュータに送ることができます。この機 + 能は、サーバ間の変更の同期が必要なため、性能に重大な衝撃を与えます。 + <a href="http://pgfoundry.org/projects/pgcluster/">Pgcluster</a> は、 + このようなソリューションとしてPosrgreSQLのためにフリーで利用できるも + のとして、最も人気があります。</p> -<HR> -<PRE> + <p>この他にも、商用やハードウェア-ベースのレプリケーションソリュー + ションがいろいろなレプリケーションモデルをサポートしています。</p> + +<hr /> +<small><pre> [訳注: 日本語版の製作については以下の通りです。 - 最終更新日: 2005年01月12日 - 翻訳者: 桑村 潤 (<A HREF="mailto:juk at PostgreSQL.jp">Jun Kuwamura <juk at PostgreSQL.jp></A>) + 最終更新日: 2005年05月18日 + 翻訳者: 桑村 潤 (<a href="mailto:juk at PostgreSQL.jp">Jun Kuwamura <juk at PostgreSQL.jp></a>) このFAQの和訳の作成にあたり協力をしてくださった方々(敬称は略させていただきます): - 田仲 稔(<A HREF="mailto:Tanaka.Minoru at keiken.co.jp">Minoru TANAKA <Tanaka.Minoru at keiken.co.jp></A>) - 石井 達夫(<A HREF="mailto:t-ishii at sra.co.jp">Tatsuo ISHII <t-ishii at sra.co.jp></A>) - 齊藤 知人(<A HREF="mailto:tomos at elelab.nsc.co.jp">Tomohito SAITOH <tomos at elelab.nsc.co.jp></A>) - 馬場 肇(<A HREF="mailto:baba at kusastro.kyoto-u.ac.jp">Hajime BABA <baba at kusastro.kyoto-u.ac.jp></A>) - 岡本 一幸(<A HREF="mailto:kokamoto at itg.hitachi.co.jp">Kazuyuki OKAMOTO <kokamoto at itg.hitachi.co.jp></A>) - 小菅 昭一(<A HREF="mailto:s-kosuge at str.hitachi.co.jp">Shoichi Kosuge <s-kosuge at str.hitachi.co.jp></A>) - 山下 義之(<A HREF="mailto:dica at eurus.dti.ne.jp">Yoshiyuki YAMASHITA <dica at eurus.dti.ne.jp></A>) - 境 真太郎(<A HREF="mailto:s_sakai at mxn.mesh.ne.jp">Sintaro SAKAI <s_sakai at mxn.mesh.ne.jp></A>) - 生越 昌己(<A HREF="mailto:ogochan at zetabits.com">Masami OGOSHI <ogochan at zetabits.com></A>) - 石川 俊行(<A HREF="mailto:tosiyuki at gol.com">Toshiyuki ISHIKAWA <tosiyuki at gol.com></A>) - 本田 茂広(<A HREF="mailto:fwif0083 at mb.infoweb.ne.jp">Shigehiro HONDA <fwif0083 at mb.infoweb.ne.jp></A>) - せせ じゅん(<A HREF="mailto:sesejun at linet.gr.jp">Jun SESE <sesejun at linet.gr.jp></A>) - 神谷 英孝(<A HREF="mailto:hkamiya at catvmics.ne.jp">Hidetaka KAMIYA <hkamiya at catvmics.ne.jp></A>) - 菅原 敦(<A HREF="mailto:asugawar at f3.dion.ne.jp">Atsushi SUGAWARA <asugawar at f3.dion.ne.jp></A>) - 稲葉 香理(<A HREF="mailto:i-kaori at sra.co.jp">Kaori Inaba <i-kaori at sra.co.jp></A>) - 石井 達夫(<A HREF="mailto:t-ishii at sra.co.jp">Tatsuo Ishii <t-ishii at sra.co.jp></A>) - - をはじめ、ポストグレスに関する話題豊富な<A HREF="http://www.sra.co.jp/people/t-ishii/PostgreSQL/ML/info.html">日本語ポストグレス・メーリングリスト</A>、 -和訳のきっかけを作ってくれた <A HREF="http://jf.linux.or.jp/">JF(Linux Japanese FAQ Mailing List)プロジェクト</A>、FreeBSD ドキュメンテーションプロジェクト、 -その他、直接あるいは間接的にかかわっているすべてのオープンソースコミュニティーの皆さんに感謝します。 - - 日本語版のこの文書は、以下からもたどれます。 - <A HREF="http://www.rccm.co.jp/~juk/pgsql/">http://www.rccm.co.jp/~juk/pgsql/</A>(FAQ和訳 PostgreSQL についてよくある質問) - <A HREF="http://www.PostgreSQL.jp/wg/jpugdoc/">http://www.PostgreSQL.jp/wg/jpugdoc/</A>JPUG文書・書籍関連分科会 - <A HREF="http://www.linux.or.jp/JF/">http://www.linux.or.jp/JF/</A>Linux JFプロジェクト - - なお、この和訳に関するご意見は(<A HREF="mailto:juk at PostgreSQL.jp">juk at PostgreSQL.jp</A>)までお寄せ下さい。 + 田仲 稔(<a href="mailto:Tanaka.Minoru at keiken.co.jp">Minoru TANAKA <Tanaka.Minoru at keiken.co.jp></a>) + 石井 達夫(<a href="mailto:t-ishii at sra.co.jp">Tatsuo ISHII <t-ishii at sra.co.jp></a>) + 齊藤 知人(<a href="mailto:tomos at elelab.nsc.co.jp">Tomohito SAITOH <tomos at elelab.nsc.co.jp></a>) + 馬場 肇(<a href="mailto:baba at kusastro.kyoto-u.ac.jp">Hajime BABA <baba at kusastro.kyoto-u.ac.jp></a>) + 岡本 一幸(<a href="mailto:kokamoto at itg.hitachi.co.jp">Kazuyuki OKAMOTO <kokamoto at itg.hitachi.co.jp></a>) + 小菅 昭一(<a href="mailto:s-kosuge at str.hitachi.co.jp">Shoichi Kosuge <s-kosuge at str.hitachi.co.jp></a>) + 山下 義之(<a href="mailto:dica at eurus.dti.ne.jp">Yoshiyuki YAMASHITA <dica at eurus.dti.ne.jp></a>) + 境 真太郎(<a href="mailto:s_sakai at mxn.mesh.ne.jp">Sintaro SAKAI <s_sakai at mxn.mesh.ne.jp></a>) + 生越 昌己(<a href="mailto:ogochan at zetabits.com">Masami OGOSHI <ogochan at zetabits.com></a>) + 石川 俊行(<a href="mailto:tosiyuki at gol.com">Toshiyuki ISHIKAWA <tosiyuki at gol.com></a>) + 本田 茂広(<a href="mailto:fwif0083 at mb.infoweb.ne.jp">Shigehiro HONDA <fwif0083 at mb.infoweb.ne.jp></a>) + せせ じゅん(<a href="mailto:sesejun at linet.gr.jp">Jun SESE <sesejun at linet.gr.jp></a>) + 神谷 英孝(<a href="mailto:hkamiya at catvmics.ne.jp">Hidetaka KAMIYA <hkamiya at catvmics.ne.jp></a>) + 菅原 敦(<a href="mailto:asugawar at f3.dion.ne.jp">Atsushi SUGAWARA <asugawar at f3.dion.ne.jp></a>) + 稲葉 香理(<a href="mailto:i-kaori at sra.co.jp">Kaori Inaba <i-kaori at sra.co.jp></a>) + 石井 達夫(<a href="mailto:t-ishii at sra.co.jp">Tatsuo Ishii <t-ishii at sra.co.jp></a>) + + をはじめ、ポストグレスに関する話題豊富な日本語ポストグレス・メーリングリ + スト、 和訳のきっかけを作ってくれた <a + href="http://jf.linux.or.jp/">JF(Linux Japanese FAQ Mailing List)プロジェ + クト</a>、FreeBSD ドキュメンテーションプロジェクト、 その他、直接あるい + は間接的にかかわっているすべてのオープンソースコミュニティーの皆さんに + 感謝します。 + + 日本語版のこの文書は <a href="http://www.postgresql.org/docs/faq/">本家 "Frequently Asked Questions" </a> のページに "Japanese FAQ" という見出であります。 + また、最新版は以下のサイトにあります。 + <a href="http://www.PostgreSQL.jp/wg/jpugdoc/">http://www.PostgreSQL.jp/wg/jpugdoc/</a>JPUG文書・書籍関連分科会 + <a href="http://www.linux.or.jp/JF/">http://www.linux.or.jp/JF/</a>Linux JFプロジェクト + <a href="http://www.rccm.co.jp/~juk/pgsql/">http://www.rccm.co.jp/~juk/pgsql/</a>(FAQ和訳 PostgreSQL についてよくある質問) + + なお、この和訳に関するご意見・ご質問は(<a href="mailto:juk at PostgreSQL.jp">juk at PostgreSQL.jp</a>)までお寄せください。 ] -</PRE> +</pre></small> +</p> + +</div> + </BODY> </HTML> -- GitLab