diff --git a/doc/FAQ_japanese b/doc/FAQ_japanese index 34c84dc713..12fb7cbdd0 100644 --- a/doc/FAQ_japanese +++ b/doc/FAQ_japanese @@ -1,13 +1,14 @@ PostgreSQL(ポストグレス・キュー・エル)についてよくある質問とその解答(FAQ) -原文最終更新日: Sat Sep 22 20:07:41 EDT 2001 +原文最終更新日: Mon Mar 18 14:34:57 EST 2002 現在の維持管理者: Bruce Momjian (pgman@candle.pha.pa.us) +Maintainer of Japanese Translation: Jun Kuwamura (juk@postgresql.jp) この文書の最新版は http://www.PostgreSQL.org/docs/faq-english.html で見ることが できます。 -プラットホームに特有の質問については:http://www.PostgreSQL.org/users-lounge/ +プラットホームに特有の質問については: http://www.PostgreSQL.org/users-lounge/ docs/faq.html に回答があります。 @@ -28,7 +29,7 @@ docs/faq.html ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 一般的な質問 -1.1) PostgreSQLとは何ですか? +1.1) PostgreSQLとは何ですか?何と読みますか? 1.2) PostgreSQLの著作権はどうなってますか? 1.3) PostgreSQLの動作するUnixプラットホームは? 1.4) Unix以外の移植版で使えるものは? @@ -42,13 +43,14 @@ docs/faq.html 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 と通信するにはどんな言語が使えますか? 管理上の質問 @@ -60,55 +62,54 @@ docs/faq.html か? 3.4) postmasterを走らせようとすると、 IpcSemaphoreCreate エラーが出ます。なぜで すか? -3.5) 他のホストから自分のPostgreSQLデータベースへのアクセスを防ぐにはどうします -か? -3.6) なぜ、他のマシンから自分のデータベースに接続できないのでしょうか? -3.7) より良い性能を得るためには、データベース・エンジンをどのように調整すれば良 +3.5) 他のホストからの接続はどのように制御しますか? +3.6) より良い性能を得るためには、データベース・エンジンをどのように調整すれば良 いですか? -3.8) どのようなデバグ機能が使えますか? -3.9) 接続しようとするときに 'Sorry, too many clients' が出ます。なぜですか? -3.10) 自分のデータベース・ディレクトリにある pg_sorttemp.XXX ファイルは何ですか +3.7) どのようなデバグ機能が使えますか? +3.8) 接続しようとするときに 'Sorry, too many clients' が出るのはなぜですか? +3.9) 自分のデータベース・ディレクトリにある pg_sorttemp.XXX ファイルは何ですか ? 操作上の質問 -4.1) なぜ、システムはカンマや小数点や日付フォーマットで混乱するのですか? -4.2) バイナリ・カーソルと通常カーソルとの厳密な違いは何ですか? -4.3) 最初の数行のみを select するにはどうしますか? -4.4) テーブルやその他の情報のリストを psql で見るにはどうしますか? -4.5) テーブルから列の削除はどのようにしますか? -4.6) 行、テーブル、データベースの最大サイズは? -4.7) 一般的なテキストファイルからデータを保存するには、データベースのディスク容 +4.1) バイナリ・カーソルと通常カーソルとの違いは何ですか? +4.2) 最初の数行のみを select するにはどうしますか? +4.3) テーブルやその他の情報のリストを psql で見るにはどうしますか? +4.4) テーブルから列の削除はどのようにしますか? +4.5) 行、テーブル、データベースの最大サイズは? +4.6) 一般的なテキストファイルからデータを保存するには、データベースのディスク容 量はどのくらい必要ですか? -4.8) データベース内に定義されたテーブルやインデックスをどのようにして見つけ出し +4.7) データベース内に定義されたテーブルやインデックスをどのようにして見つけ出し ますか? -4.9) 問い合わせが遅いうえ、インデックスを使っている様子がありません。なぜですか +4.8) 問い合わせが遅いうえ、インデックスを使っている様子がありません。なぜですか ? -4.10) 問い合わせオブティマイザがどのように問い合わせを評価するかを見るにはどう -しますか? -4.11) R-tree インデックスとは何ですか? -4.12) 遺伝的問い合わせ最適化とは何ですか? -4.13) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実 +4.9) 問い合わせオブティマイザがどのように問い合わせを評価するかを見るにはどうし +ますか? +4.10) R-tree インデックスとは何ですか? +4.11) 遺伝的問い合わせ最適化とは何ですか? +4.12) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実 現しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使 いますか? -4.14) 問い合わせの中で、フィールドが NULL であることを検出するにはどうしますか +4.13) 問い合わせの中で、フィールドが NULL であることを検出するにはどうしますか ? -4.15) 色々な文字型のそれぞれの違いは何ですか? -4.16.1) 通番(serial)/自動増分フィールドはどのようにつくりますか? -4.16.2) SERIALデータ型に挿入される値は、どうすれば得られますか? -4.16.3) 他のユーザとの競合状態を避けるためには、currval() と nextval() は使わな +4.14) 色々な文字型のそれぞれの違いは何ですか? +4.15.1) 通番(serial)/自動増分フィールドはどのようにつくりますか? +4.15.2) SERIALデータ型に挿入される値は、どうすれば得られますか? +4.15.3) 他のユーザとの競合状態を避けるためには、currval() と nextval() は使わな いほうがよいのでしょうか? -4.17) OID とは何ですか? TID とは何ですか? -4.18) PostgreSQL で使われるいくつかの用語の意味は何ですか? -4.19) エラーメッセージ "ERROR: Memory exhausted in AllocSetAlloc()"が出るのはな +4.15.4) トランザクションが中断したときにもういちどシーケンス番号が使われないの +はなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか? +4.16) OID とは何ですか? TID とは何ですか? +4.17) PostgreSQL で使われるいくつかの用語の意味は何ですか? +4.18) エラーメッセージ "ERROR: Memory exhausted in AllocSetAlloc()"が出るのはな ぜですか? -4.20) どのバージョンの PostgreSQL を走らせているのかを調べるにはどうしますか? -4.21) ラージオブジェクトの操作で、invalid large obj descriptorと出ます。なぜで +4.19) どのバージョンの PostgreSQL を走らせているのかを調べるにはどうしますか? +4.20) ラージオブジェクトの操作で、invalid large obj descriptorと出るのはなぜで すか? -4.22) 現在の時刻がデフォルトとなるような列はどのようにつくりますか? -4.23) なぜ、INを使う副問い合わせがとても遅いのですか? -4.24) 外部結合(outer join)はどのように実現しますか? -4.25) 複数のデータベースを使う問い合わせはどのようにすればできますか? +4.21) 現在の時刻がデフォルトとなるような列はどのようにつくりますか? +4.22) なぜ、INを使う副問い合わせがとても遅いのですか? +4.23) 外部結合(outer join)はどのように実現しますか? +4.24) 複数のデータベースを使う問い合わせはどのようにすればできますか? PostgreSQLの拡張についての質問 @@ -125,6 +126,8 @@ docs/faq.html 1.1) PostgreSQL とは何ですか? +Post-Gres-Q-L.(ポスト - グレス - キュー - エル) と発音します。 + PostgreSQL は次世代 DBMS 研究用のプロトタイプであった POSTGRES データベース管理 システムの改良版です。PostgreSQL は POSTGRES の強力なデータ・モデルと豊富なデー タ・タイプ(型)を保持しながら、POSTGRES で使われた PostQuel 問い合わせ言語を、拡 @@ -144,8 +147,7 @@ PostgreSQL バークレイにおけるこのソフトウェアのもとの名前は Postgres でしたが、SQL の機能 が追加された 1995 年にその名前は Postgres95 に変更され、1996 年の終りにその名前 -は PostgreSQL に変更されました。 Post-Gres-Q-L.(ポスト - グレス - キュー - エ -ル) と発音します。 +は PostgreSQL に変更されました。 1.2) PostgreSQL の著作権はどうなってますか? @@ -157,7 +159,7 @@ PostgreSQL PostgreSQL Data Base Management System -Portions Copyright (c) 1996-2000, PostgreSQL Global Development Group Portions +Portions Copyright (c) 1996-2002, 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 @@ -179,7 +181,7 @@ SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. POSTGRESQL データベース管理システム - 部分的著作権 (c) 1996-2001, PostgreSQL国際開発チーム + 部分的著作権 (c) 1996-2002, PostgreSQL国際開発チーム 部分的著作権 (c) 1994-6 カリフォルニア大学本校 @@ -205,6 +207,10 @@ SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ] +上記はBSDライセンスで古きオープンソースのライセンスです。ソースコードがどのよう +に使われようとも制限しません。好ましいことなので、我々もそれを変えるつもりはあ +りません。 + 1.3) PostgreSQL の動作環境は? 著者らは PostgreSQL のコンパイルとテストを次のプラットホーム上で行ないました。 @@ -308,13 +314,14 @@ PostgreSQL http://www.PostgreSQL.org -EFNet に #PostgreSQL という IRC チャンネルもあります。 unix コマンドでirc -c '# -PostgreSQL' "$USER" irc.phoenix.net/ を使います。 +EFNet に #PostgreSQL という IRC チャンネルもあります。 UNIX コマンドでirc -c '# +PostgreSQL' "$USER" irc.phoenix.net を使います。 [訳注: 1999年7月23日、日本PostgreSQLユーザー会(にほん ぽすとぐれす ゆーざー かい)、略称JPUGが設立されました。 JPUG は非営利組織で、PostgreSQLを利用する人達の相互協力の場です。 - 正会員の会費は無料ですが、会員の積極的な貢献が会の運営を助けています。詳しくは、JPUGのWeb サイト: + 正会員の会費は無料ですが、協賛会員の会費と会員の積極的な貢献が会の運営を助けています。 + 詳しくは、JPUG のWeb サイト: http://www.postgresql.jp/ をご覧ください。会員登録も可能となっています。 1990年代中ごろより、ポストグレスの日本語メーリング・リストを石井 達夫さんが主催しています。詳細は、 @@ -336,7 +343,7 @@ commercial-support.html 1.7) 最新版はどれですか -PostgreSQL の最新版はバージョン 7.2 です。 +PostgreSQL の最新版はバージョン 7.2.1 です。 我々は、4カ月毎にメジャーリリースを行なうことを計画しています。 @@ -346,15 +353,23 @@ PostgreSQL よびいくつかの小さなテスト例題が含まれます。/doc ディレクトリをご覧下さい。また 、マニュアルは、 http://www.PostgreSQL.org/users-lounge/docs/ でオンラインでも 閲覧できます。 - -PostgreSQL の本もあります。 http://www.PostgreSQL.org/docs/awbook.html - [訳注: - 日本ポストグレスユーザー会のPostgreSQL Book翻訳分科会で、 - 翻訳作業が進行中。 + (株)SRAと日本ポストグレスユーザー会で翻訳され、 + 「PostgreSQL オフィシャルマニュアル」 + として出版されています。 ] +オンラインで参照できる PostgreSQL の本も2冊あります。http://www.PostgreSQL.org/ +docs/awbook.html + [訳注: + 日本ポストグレスユーザー会の 「PostgreSQL Book翻訳分科会」 + にて翻訳されました。 + ] +および、 http://www.commandprompt.com/ppbook/ です。購入可能な書籍の目録は、 +http://www.postgresql.org/books/ にあります。 PostgreSQL 技術情報記事も、http:/ +/techdocs.postgresql.org/ にあります。 + psql も、型、演算子、関数、集約、その他の情報をお見せする、いくつかの素晴らしい \d コマンドを持ちます。 @@ -369,12 +384,19 @@ PostgreSQL http://www.PostgreSQL.org/docs/awbook.html にあるPostgreSQL本で SQL を教えてい ます。 + [訳注: + 日本ポストグレスユーザー会の 「PostgreSQL Book翻訳分科会」 + にて翻訳され出版されています。 + ] -素晴らしい学習書には、 http://w3.one.net/~jhoffman/sqltut.htm と http:// -ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM. -とがあります。その他に、 "Teach Yourself SQL in 21 Days, Second Edition" が、 -http://members.tripod.com/er4ebus/sql/index.htm にあります。 +その他にも 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., @@ -392,7 +414,7 @@ McGraw-Hill ではオンラインマニュアルの検索ができます。 丸山不二夫氏のUNIX データベース入門 http://www.wakhok.ac.jp/DB/DB.html - はオンラインで読むことができます。 + もオンラインで読むことができます。 ] 1.11) PostgreSQLは西暦2000年問題(Y2K)に対応していますか? @@ -412,8 +434,8 @@ pgsql-patches 1.13) バグレポートはどのように発信しますか? -"bug-template" ファイルの項目を満たして、pgsql-bugs@PostgreSQL.orgに送って下さ -い。 +バグを報告する仕方についてのガイドラインと方向づけがあるPostgreSQL BugTool (バ +グツール)のページを訪れてみて下さい。 その前に http://postgreSQL.orgにある最新の FAQ をチェックして下さい。 @@ -426,13 +448,11 @@ pgsql-patches です。 機能(Features) - PostgreSQLは、トランザクション、副問い合わせやトリガーやビューや外部キー参 - 照や、そして、洗練されたロック機構など、大規模商用DBMSが持つ機能をほとんど - 持っています。PostgreSQLは、さらに、ユーザ定義型や継承やマルチ- バージョン - ・コンテンションなど、商用DBMSが持ち合わせない機能をいくつか持ち合わせてい - ます。外部キーの参照整合性(foreign key referential integrity)やロック・コン - テンションを減らすための外部競合状態制御 (outer concurrency control)は持ち - 合わせません。 + PostgreSQLは、トランザクション、副問い合わせ、トリガー、ビュー、外部キー整 + 合性参照、および、洗練されたロック機構など、大規模商用 DBMSが持つ機能をほと + んど持っています。さらに PostgreSQLは、ユーザ定義型、継承、ルール、それから + 、ロック競合を縮小するマルチバージョン同時性制御など、商用DBMSも持ち合わせ + ないような機能をいくつか持ち合わせています。 性能(Performance) @@ -482,7 +502,26 @@ pgsql-patches 込むことができます。 +1.15) PostgreSQLを資金面で援助するにはどうすればよいですか? + +PostgreSQLは、我々が6年前に始めたとき以来、最高クラスの基盤を持っています。これ +はすべて、Marc Fournieさんのおかげで、彼はこの基盤を何年にもわたって創造し管理 +してきました。 + +質の良い基盤はオープンソース・プロジェクトにとってはとても大切なもので、前進す +る勢いを失うプロジェクトの分裂を回避します。 + +もちろん、この基盤は安いものではありません。維持し続けるためには毎月あるいは一 +時の経費がかかります。もし、あなたやあなたの会社に、こうした努力のための資金を +助けるために施すことができるようでしたら、http://www.pgsql.com/pg_goodies から +寄付をお願いします。 + +また、Webページには PostgreSQL,Inc とありますが、そこの"義援 (contributions)"ア +イテムは PostgreSQL プロジェクトをサポートするためだけのためで、決して特定の会 +社のための資金のためではありません。もし、手形 (check)の方が都合がよければ連絡 +先の住所へお送り下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + ユーザー・クライアントの質問 2.1) PostgreSQL のための ODBC ドライバーはありますか? @@ -503,13 +542,14 @@ OpenLink ODBC Mac, Unix, VMS)から PostgreSQL の ODBC が利用できます。 たぶん彼らは、商用品質のサポートの必要な人々に売っていると思いますが、フリーウ -ェア版はいつでも入手可能のようです。質問は、postgres95@openlink.co.ukにお願いし -ます。 Programmer's Guide の ODBC の章もご覧ください。 +ェア版はいつでも入手可能のようです。質問は、postgres95@openlink.co.uk へ送って +下さい。 +Programmer's Guide の ODBC の章もご覧ください。 2.2) PostgreSQL を Web ページと連携させるにはどんなツールがありますか? データベースを裏に持つ Web ページについての素晴らしい紹介が、 -http://www.webtools.com にあります。 +http://www.webreview.comにあります。 http://www.phone.net/home/mwm/hotlist/にも、もう一つあります。 @@ -519,7 +559,7 @@ www.php.net/ PHPに関する日本語の情報は、2000年4月19日に発足した日本PHPユーザ会のサイト http://www.php.gr.jp/ あるいは、廣川 類さんのサイト - http://www.cityfujisawa.ne.jp/~louis/apps/phpfi/index.html + http://www.geocities.jp/rui_hirokawa/php/ にかなりまとめられています。 前田 充宏さんにより作られたPHP/FIの日本語パッチが様々な人の手を経てPHP3.0.7に適用されました。 現在はPHPJ-DEVにて、 @@ -544,8 +584,8 @@ www.php.net/ ] -2.3) PostgreSQL にグラフィカル・ユーザインターフェースはありますか?レポート・ -ジェネレータは?埋め込み問い合わせ言語へのインターフェースは? +2.3) PostgreSQL にグラフィカル・ユーザインターフェースはありますか?レポートジ +ェネレータや埋め込み問い合わせ言語インターフェースはありますか? pgaccess と呼ばれる素晴らしいグラフィカル・ユーザ・インターフェースがあり、この 配布と共に出荷されます。Pgaccess にはレポート・ジェネレータもあります。Web ペー @@ -617,12 +657,14 @@ Postgres 制限をすることです。既定値の32より小さな数のパラメータを-Nで使います。より恒久 的な解決策は、カーネルのSEMMNS と SEMMNI パラメータを増やすことです。 +操作不能のセマフォも過度なデータベースアクセスの間にクラッシュを起こす可能性が +あります。 + もし、エラーメッセージがなにか他のものであれば、カーネルの構成でまったくセマフ ォのサポートをしていないかもしれません。 PostgreSQL Administrator's Gide に共有 メモリーとセマフォについての情報の詳細があります。 -3.5) 他のホストから自分の PostgreSQL データベースへのアクセスを防ぐにはどうしま -すか? +3.5) 他のホストからの接続はどのように制御しますか? 既定値では、PostgreSQL は unix ドメインソケットを使うローカルマシンからの接続し か許しません。postmaster 起動に -i フラッグを加え、$PGDATA/pg_hba.conf ファイル @@ -632,14 +674,7 @@ Postgres 操作不能なセマフォも過度のデータベースアクセス中にクラッシュを引き起こすことが あります。 -3.6) 他のマシンから自分のデータベースに接続できないのはなぜですか? - -既定の設定ではローカルマシンからの unix ドメインのソケット接続しか許しません。 -TCP/IP 接続を可能にするには postmaster が -i オプションで開始されていて、pgsql/ -data/pg_hba.conf ファイルに適切なホストの記載が追加されていることを確認してくだ -さい。 - -3.7) より良い性能を得るためには、データベース・エンジンをどのように調整すれば良 +3.6) より良い性能を得るためには、データベース・エンジンをどのように調整すれば良 いですか? 確かにインデックスは問い合わせの速度を増します。EXPLAINコマンドで PostgreSQL が @@ -672,7 +707,7 @@ postmaster -B グループ化することもできます。詳しくは、オンラインマニュアルで CLUSTER を見て下 さい。 -3.8) どのようなデバグ機能が使えますか? +3.7) どのようなデバグ機能が使えますか? PostgreSQL は、デバグのために意味のある、状態情報を報告するいくつかの機能を持ち ます。 @@ -701,12 +736,13 @@ Postmaster わけではないので、独立な環境で走っているのではなくロック/バックエンドとの対話 の問題が重複することはありません。 -もし、postmasterが走っていれば、あるウィンドウでpsqlを開始すると、psql で使われ -る postgresプロセスのPIDが見つかります。デバッガを使ってpostgresのPIDにアタッチ -(attach)します。デバッガの中からブレーク・ポイントをセットし、psqlから問い合わ -せを発行します。デバグのためにpostgresを始動する場合は、PGOPTIONS="-W n" を設定 -でき、それから、psql を開始します。これにより、n 秒開始を遅らせるはずなので、デ -バッガでアタッチして始動を順を追って見ることができます。 +もし、postmasterが走っていれば、あるウィンドウで psqlを開始すると、psql で使わ +れる postgres プロセスのPIDが見つかります。デバッガを使って postgresのPIDにアタ +ッチ(attach)します。デバッガの中からブレーク・ポイントをセットし、psql から問い +合わせを発行します。デバグのためにpostgresを始動する場合は、PGOPTIONS="-W n" を +設定でき、それから、psql を開始します。これにより、n 秒開始を遅らせるはずなので +、デバッガでプロセスにアタッチして、ブレークポイントを設定し、開始から順を追っ +て見てゆくことができます。 postgreSQL プログラムには、デバグと性能測定にとても役に立つ -sや -Aや -t 等のオ プションがあります。 @@ -716,7 +752,7 @@ postgreSQL ル・ファイルは pgsql/data/base/dbname ディレクトリに格納されるでしょう。クライ アントのプロフィールはクライアントの現行ディレクトリに置かれるでしょう。 -3.9) 接続しようとするときに 'Sorry, too many clients' が出ます。なぜですか? +3.8) 接続しようとするときに 'Sorry, too many clients' が出るのはなぜですか? postmasterが同時始動できるバックエンドプロセスに対する制限数を増やす必要があり ます。 @@ -741,10 +777,9 @@ config.h には、include/storage/sinvaladt.hの中のMaxBackendId定数を修正した後に再構築が必 要でした。 -3.10) 自分のデータベース・ディレクトリにある pg_sorttemp.XXXファイルは何ですか -? +3.9) 自分のデータベース・ディレクトリにある pg_sorttemp.XXXファイルは何ですか? -問い合わせ実行モジュールによって生成された一時的なファイルです。例えば、もし +問い合わせ実行モジュールによって生成された一時的なファイルです。例えば、もし ORDER BY 句を満たすためにバックエンドの -S パラメータで許可した値よりも大きなス ペースがソートの際に必要だとすると、溢れたデータを保持するために一時的なファイ ルがいくつか生成されます。 @@ -766,17 +801,11 @@ ORDER BY ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 操作上の質問 -4.1) なぜ、システムはカンマや小数点や日付フォーマットで混乱するのですか? - -ロケールの設定を確かめて下さい。PostgreSQL は postmaster プロセスを走らせたユー -ザーのロケールの設定を使います。postgres とpsql には SET コマンドがあり、データ -書式を制御できます。これらをあなたの操作環境に合わせて設定して下さい。 - -4.2) バイナリ・カーソルと通常カーソルとの厳密な違いは何ですか? +4.1) バイナリ・カーソルと通常カーソルとの厳密な違いは何ですか? 詳述は、オンラインマニュアルで DECLARE を見て下さい。 -4.3) 最初の数行のみを SELECT するにはどうしますか? +4.2) 最初の数行のみを SELECT するにはどうしますか? オンラインマニュアルでFETCHを見てください。あるいは、SELECT ... LIMIT....を使っ てみて下さい。 @@ -787,14 +816,14 @@ ORDER BY きるかもしれませんが、でなれば、PostgreSQL は意図した行が生成されるまですべての 行を評価しなければならないかもしれません。 -4.4) テーブルやその他の情報のリストを psql で見るにはどうしますか? +4.3) テーブルやその他の情報のリストを psql で見るにはどうしますか? psqlのソースコードとして書かれた pgsql/src/bin/psql/describe.c ファイルを読むこ とがその答えです。そこには、psqlのバックスラッシュコマンドによる出力のためのSQL コマンドが含まれています。 psql に -E オプションをつけて起動すれば、与えたコマ ンドを実行するための問い合わせが出力されます。 -4.5) テーブルから列の削除はどのようにしますか? +4.4) テーブルから列の削除はどのようにしますか? ALTER TABLE DROP COLUMN はサポートしていませんが、その代わりにこうします: SELECT ... -- 削除したい列以外の列をすべて選択します。 @@ -804,10 +833,10 @@ ALTER TABLE DROP COLUMN ALTER TABLE new_table RENAME TO old_table; [訳注:列の追加は ALTER TABLE ADD COLUMN で行えます。] -4.6) 行、テーブル、データベースの最大サイズは? +4.5) 行、テーブル、データベースの最大サイズは? 制限は以下のとおりです。 -データベースの最大サイズ? 制限無し (60GB のデータベースも存在します) +データベースの最大サイズ? 制限無し (500GB のデータベースも存在します) テーブルの最大サイズ? 16TB 行の最大サイズ? 7.1以降で制限無し フィールドの最大サイズ? 7.1以降で1GB @@ -826,37 +855,38 @@ ALTER TABLE DROP COLUMN デフォルトのブロックサイズを32kにすると最大テーブルサイズと最大カラム数とが増加 します。 -4.7) 一般的なテキストファイルからデータを保存するには、データベースのディスク容 +4.6) 一般的なテキストファイルからデータを保存するには、データベースのディスク容 量はどのくらい必要です? -PostgreSQL のデータベースに保存するには、普通のファイルの約6.5倍のディスク容量 -を必要とします。 +普通のテキストファイルを PostgreSQL のデータベースに保存するには、最大で約5倍の +ディスク容量を必要とします。 -各行に二つずつ整数を持つ 300,000行のファイルを考えてみましょう。ただのファイル -では 2.4MB です。このデータを含む PostgreSQL データベースファイルの大きさは次の -ように約14MBと見積もることができます: +例題として、各行に整数とテキスト記述を持つ 100,000行のファイルを考えてみましょ +う。テキストの文字列の平均長さを20バイトと仮定すると、フラットファイルの大きさ +は約2.8MB です。このデータを含む PostgreSQL データベースファイルの大きさは次の +ように約6.4MBと見積もることができます: 36 bytes: 各行のヘッダ(概算) - + 8 bytes: 各4バイトの二つの整数(int)フィールド + 24 bytes: 整数(int)フィールドとテキスト(text)フィールド + 4 bytes: ページ上のタップルへのポインタ ---------------------------------------- - 48 bytes per row + 64 bytes per row PostgreSQL のデータページサイズは 8192バイト(8KB)なので: 8192 bytes per page - ------------------- = 171 rows per database page (切り上げ) - 48 bytes per row + ------------------- = 128 rows per database page (切り上げ) + 64 bytes per row - 300000 data rows - -------------------- = 1755 database pages - 171 rows per page + 100000 data rows + -------------------- = 782 database pages + 128 rows per page -1755 database pages * 8192 bytes per page = 14,376,960 bytes (14MB) +782 database pages * 8192 bytes per page = 6,406,144 bytes (6.4 MB) インデックスは、これほどのオーバヘッドは要求しませんが、インデックス付けされる データを含む以上、それなりに大きくなります。 -4.8) データベース内に定義されたテーブルやインデックスをどのようにして見つけ出し +4.7) データベース内に定義されたテーブルやインデックスをどのようにして見つけ出し ますか? psql にはいろいろなバックスラッシュ・コマンドがあり、こうした情報を表示します。 @@ -866,37 +896,40 @@ psql 山の SELECT 文により必要な情報をデータベースのシステム・テーブルから取り出して 例示してくれます。 -4.9) 問い合わせが遅いうえ、インデックスを使っている様子がありません。なぜですか +4.8) 問い合わせが遅いうえ、インデックスを使っている様子がありません。なぜですか ? -PostgreSQL は統計情報を自動的には保守しません。統計情報を更新するためには、 -VACUUM を走らせなくてはなりません。統計情報が更新された後は、オブティマイザがテ -ーブルに何行あるかを知って、インデックスを使うべきかの決定をより良く下します。 -オブティマイザはテーブルが小さくて連続スキャンの方が速いであろう場合はインデッ -クスを使わないことにご注意下さい。 +インデックスは自動的にすべての問い合わせで使われるわけではありません。テーブル +が最小サイズより大きく、問い合わせでそのわずかなパーセンテージの行を選択する時 +だけ、インデックスは使われます。これはインデックススキャンにより起こされるラン +ダムなディスクアクセスは、テーブルをストレートに読む順次走査よりも遅くなること +がときどきあるからです。 -列特定の最適化統計のためにVACUUM ANALYZEを使います。VACUUM ANALYZEは複雑な複合 -結合(multi-join)問い合わせのために大切ですので、オブティマイザはそれぞれのテー -ブルから返される行の数を見積ることができ、特定の結合順序を選びます。バックエン -ドはそれ自身では列の統計を保持しないので、定期的にそれらを集めるためには VACUUM -ANALYZE を走らせなくてはなりません。 +インデックスを使うかを決定するために、PostgreSQL はテーブルについての統計情報を +持たなければなりません。この統計情報は、VACUUM ANALYZEまたは、単に ANALYZE を使 +って収集することができます。統計情報を使ってオブティマイザはテーブルの中に何行 +あるかを知り、インデックスを使うべきかのの決定をより正しくできます。統計情報は +最適な結合順や結合方法を決める上でも貴重なものもあります。統計情報の収集は、テ +ーブルの内容がかわると毎に繰返しなされるべきです。 -普通、インデックスは ORDER BY や結合の操作のためには使われません。ランダムなデ -ィスクアクセスはとても遅いので、順次スキャンに続く明示的ソートは、巨大なテーブ -ルの全件をインデックススキャンするよりも高速です。 +インデックスは、通常 ORDER BY や結合を行なうためには使われません。順次スキャン +に続く明示的ソートは、巨大なテーブルのインデックススキャンよりも普通は高速です +。 +しかし、ORDER BYと組み合わされたLIMIT は、テーブルの小さな部分を返すためにたび +たびインデックスを使うでしょう。 -LIKE あるいは ~ のようなワイルドカード演算子(wild-card operators)を使うとき、検 -索の開始が文字列の始めの部分に固定されているときにのみ、インデックスが使われま -す。そういうわけで、インデックスを使うためには、LIKE 検索では%で始めないように -して、また、~(正規表現検索)は^ で始めるようにするべきです。 [訳注:強制的にイン -デックスを使うには SET enable_seqscan = off を実行します] +LIKE あるいは ~ のようなワイルドカード演算子を使うとき、検索の開始が文字列の始 +めの部分に固定されているときにのみ、インデックスが使われます。そういうわけで、 +インデックスを使うためには、 LIKE パターンは%で始めないようにして、また、 ~(正 +規表現)パターンは^ で始めなくてはなりません。 [訳注:強制的にインデックスを使う +には SET enable_seqscan = off を実行します ] -4.10) 問い合わせオブティマイザがどのように問い合わせを評価するのかを見るにはど -うしますか? +4.9) 問い合わせオブティマイザがどのように問い合わせを評価するのかを見るにはどう +しますか? オンラインマニュアルで EXPLAIN を見て下さい。 -4.11) R-tree インデックスとは何ですか? +4.10) R-tree インデックスとは何ですか? R-tree インデックスは空間的なデータにインデックスを付けるために使われます。ハッ シュインデックスでは範囲の検索ができません。また、B-tree インデックスでは、1次 @@ -907,8 +940,8 @@ R-tree R-Tree の設計の原典となる権威ある論文は: -Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial Searching." Proc of -the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57. +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" でも取り上げられ ています。 @@ -933,13 +966,13 @@ the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57. ] -4.12) 遺伝的問い合わせ最適化とは何ですか? +4.11) 遺伝的問い合わせ最適化とは何ですか? GEQO モジュールは、沢山のテーブルを結合するときに、遺伝的アルゴリズム(GA)で問合 わせを高速化します。これにより、しらみつぶしに探索を行なわなくても、大きな結合 (join queries)を扱うことができるようになります。 -4.13) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実 +4.12) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実 現しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使 いますか? @@ -958,12 +991,12 @@ GEQO WHERE lower(textfield) LIKE lower(pattern) -4.14) 問い合わせの中で、フィールドが NULL であることを検出するにはどうしますか +4.13) 問い合わせの中で、フィールドが NULL であることを検出するにはどうしますか ? -IS NULLのカラムを IS NOT NULL で試してみて下さい。 +カラムを IS NULL と IS NOT NULL とで試してみます。 -4.15) 様々な文字型のそれぞれの違いは何ですか? +4.14) 様々な文字型のそれぞれの違いは何ですか? Type Internal Name Notes -------------------------------------------------- @@ -971,7 +1004,7 @@ Type Internal Name Notes CHAR(#) bpchar 指定された固定長となるように空白が詰められる VARCHAR(#) varchar 長さの上限の無いテキスト TEXT text 長さの制限は最大行長による -BYTEA bytea 可変長のバイト配列 +BYTEA bytea 可変長のバイト配列(null-byte safe) 内部名にお目にかかるのは、システム・カタログを調べるときや、エラーメッセージを 受け取るときです。 @@ -982,7 +1015,12 @@ BYTEA bytea れたり複数行に渡って保存されたりして、ディスク上の空間は思ったより小さくなりま す。 -4.16.1) 通番(serial)/自動増分フィールドはどのようにつくりますか? +CHAR()はいつも長さが同じ文字列を保存するのに最適です。VARCHAR() は可変長の文字 +列を保存するのに最適ですが、保存できる文字列の長さに制限があります。TEXT は長さ +に制限の無い文字列の保存ためのもので、最大1ギガバイトです。 BYTEAは、部分的に +NULL のバイトを含むバイナリデータを保存するためのものです。 + +4.15.1) 通番(serial)/自動増分フィールドはどのようにつくりますか? PostgreSQL は SERIAL データ型をサポートします。列上に通番とインデックスを自動作 成します。たとえば、 @@ -1006,33 +1044,41 @@ pg_dump ります。 Bruce Momjian の(http://www.PostgreSQL.org/docs/aw_pgsql_book)の Numbering Rowsの章にありあます。 -4.16.2) SERIALデータ型に挿入される値は、どうすれば得られますか? +4.15.2) SERIALデータ型に挿入される値は、どうすれば得られますか? ひとつの方法は、nextval() 関数を使ってその値を挿入する前(before)に SEQUENCE オ -ブジェクトから次の SERIAL 値を取り出し、それから実際に挿入をすることです。 -4.16.1 の例で使ったテーブルを使うとすると、次のようになります。 - $newSerialID = nextval('person_id_seq'); - INSERT INTO person (id, name) VALUES ($newSerialID, 'Blaise Pascal'); -そうして、$newSerialID に保存した新しい値を他の問い合わせに(たとえば、person テ -ーブルに対する外部キー(foreign key)のように)使うとよいでしょう。自動的に作られ -たSEQUENCEオブジェクトの名前は、