1 <!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN">
4 <TITLE>PostgreSQL FAQ in Japanese
</TITLE>
6 <BODY BGCOLOR=
"#FFFFFF" TEXT=
"#000000" LINK=
"#FF0000" VLINK=
"#A00000" ALINK=
"#0000FF">
7 <META http-equiv=
"Content-Type" content=
"text/html; charset=utf-8">
9 <h1>PostgreSQL(ポストグレス・キュー・エル)についてよくある質問とその解答(FAQ)
</h1>
10 <p>原文最終更新日: Thu Jan
01 14:
01:
00 EDT
2009</p>
11 <p>現在の維持管理者: Bruce Momjian (
<A
12 href=
"mailto:bruce@momjian.us">bruce@momjian.us
</a>)
<br />
13 Maintainer of Japanese Translation: Jun Kuwamura (
<A
14 href=
"mailto:juk at postgresql.jp">juk at postgresql.jp
</a>)
<br /></p>
16 "http://www.postgresql.org/docs/faqs.FAQ.html">
17 http://www.postgresql.org/docs/faqs.FAQ.html
</a>
19 <p>プラットホームに特有の質問については:
<a href=
20 "http://www.postgresql.org/docs/faq/">
21 http://www.postgresql.org/docs/faq/
</a>
26 (以下、訳者による注釈を [訳注: と ] とで囲んで記します。)
29 http://www.postgresql.org/docs/faqs.FAQ_japanese.html
31 最新の日本語版については、この文書の最後にある
<a
32 href=
"#item-japanese">「日本語版について」
</a>をごらんください。
39 <h2 align=
"center">一般的な質問
</h2>
41 <a href=
"#item1.1">1.1</a>) PostgreSQLとは何ですか? その呼び方は? Postgresとは?
<br />
42 <a href=
"#item1.2">1.2</a>) 誰が PostgreSQL をコントロールしていますか?
<br />
43 <a href=
"#item1.3">1.3</a>) PostgreSQLの著作権はどうなってますか?
<br />
44 <a href=
"#item1.4">1.4</a>) PostgreSQLをサポートするプラットホームは?
<br />
45 <a href=
"#item1.5">1.5</a>) PostgreSQLはどこから入手できますか?
<br />
46 <a href=
"#item1.6">1.6</a>) 最新のリリースはどれですか?
<br />
47 <a href=
"#item1.7">1.7</a>) サポートはどこで受けられますか?
<br />
48 <a href=
"#item1.8">1.8</a>) バグレポートはどのように発信しますか?
<br />
49 <a href=
"#item1.9">1.9</a>) 既知のバグや未だ無い機能はどうやって見つけますか?
<br />
50 <a href=
"#item1.10">1.10</a>) どのような文書がありますか?
<br />
51 <a href=
"#item1.11">1.11</a>)
<small>SQL
</small>はどうすれば学べますか?
<br />
52 <a href=
"#item1.12">1.12</a>) パッチを提供したり、開発チーム参加するにはどうすればよいですか?
<br />
53 <a href=
"#item1.13">1.13</a>) 他の
<small>DBMS
</small>と比べてPostgreSQL はどうなのですか? PostgreSQLを組み込みに使えますか?
<br />
54 <a href=
"#item1.14">1.14</a>) PostgreSQLは国毎の最新の夏時間の変更を扱いますか?
<br />
55 <a href=
"#item1.15">1.15</a>) PostgreSQLのメーリングリストの購読をやめるにはどうすればよいですか?また、電子メールを重複して受け取らないようにするにはどうしますか?
<br />
57 <h2 align=
"center">ユーザ・クライアントの質問
</h2>
59 <a href=
"#item2.1">2.1</a>) PostgreSQL にはどんなインターフェースが使えますか?
<br />
60 <a href=
"#item2.2">2.2</a>) PostgreSQL を Web ページと連携させるにはどんなツールがありますか?
<br />
61 <a href=
"#item2.3">2.3</a>) PostgreSQL にグラフィカル・ユーザインターフェースはありますか?
<br />
64 <h2 align=
"center">管理上の質問
</h2>
66 <a href=
"#item3.1">3.1</a>) どうすれば、PostgreSQLを
<i>/usr/local/pgsql
</i> 以外の場所にインストールできますか?
<br />
67 <a href=
"#item3.2">3.2</a>) 他のホストからの接続はどのように制御しますか?
<br />
68 <a href=
"#item3.3">3.3</a>) より良い性能を得るためには、データベース・エンジンをどのように調整しますか?
<br />
69 <a href=
"#item3.4">3.4</a>) どのようなデバグ機能が使えますか?
<br />
70 <a href=
"#item3.5">3.5</a>) 接続しようとするときに
<i>'Sorry, too many clients'
</i> が出るのはなぜですか?
<br />
71 <a href=
"#item3.6">3.6</a>) PostgreSQLのアップグレードの手順はどうなりますか?
<br />
72 <a href=
"#item3.7">3.7</a>) ハードウェアにはどのようなコンピュータを使えばよいですか?
<br />
75 <h2 align=
"center">操作上の質問
</h2>
77 <a href=
"#item4.1">4.1</a>) 最初のいくつかのロウのみを
<small>select
</small> するにはどうしますか? ランダムなロウ?
<br />
78 <a href=
"#item4.2">4.2</a>) 定義されたテーブル、インデックス、データベース、および、ユーザをどのようにして見つけ出しますか?
<br />
79 <a href=
"#item4.3">4.3</a>) カラムのデータタイプを変更するにはどうしますか?
<br />
80 <a href=
"#item4.4">4.4</a>) ロウ、テーブル、データベースの最大サイズは?
<br />
81 <a href=
"#item4.5">4.5</a>) 一般的なテキストファイルのデータを保存するには、データベースのディスク容量はどのくらい必要ですか?
<br />
82 <a href=
"#item4.6">4.6</a>) クエリが遅いのはなぜでしょう? なぜ、インデックスが使われないのでしょうか?
<br />
83 <a href=
"#item4.7">4.7</a>) クエリオプティマイザが、どのようにクエリを評価していかを、見るにはどうしますか?
<br />
84 <a href=
"#item4.8">4.8</a>) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使いますか?
<br />
85 <a href=
"#item4.9">4.9</a>) クエリの中で、フィールドが
86 <small>NULL
</small> であることを検出するにはどうしますか?
87 <small>NULL
</small>の可能性のあるものをどのようすれば連結できますか?
88 フィールドが
<small>NULL
</small>かどうかでどのようにソートができますか?
<br />
89 <a href=
"#item4.10">4.10</a>) いろいろな文字型のそれぞれの違いは何ですか?
<br />
90 <a href=
"#item4.11.1">4.11.1</a>) 通番(serial)/自動増分フィールドはどのようにつくりますか?
<br />
91 <a href=
"#item4.11.2">4.11.2</a>)
<small>SERIAL
</small>データ型に挿入される値は、どうすれば得られますか?
<br />
92 <a href=
"#item4.11.3">4.11.3</a>)
<i>currval()
</i> は他のユーザとの競合状態に陥ることはないですか?
<br />
93 <a href=
"#item4.11.4">4.11.4</a>) トランザクションが中断したときにもういちどシーケンス番号が使われないのはなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか?
<br />
94 <a href=
"#item4.12">4.12</a>)
<small>OID
</small> とは何ですか?
<small>TID
</small> とは何ですか?
<br />
95 <a href=
"#item4.13">4.13</a>) エラーメッセージ
<i>"ERROR: Memory exhausted in AllocSetAlloc()"</i>が出るのはなぜですか?
<br />
96 <a href=
"#item4.14">4.14</a>) どのバージョンの PostgreSQL を走らせているのかを調べるにはどうしますか?
<br />
97 <a href=
"#item4.15">4.15</a>) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか?
<br />
98 <a href=
"#item4.16">4.16</a>)
<i>外部
</i>結合(
<i>outer
</i> join)はどのように実現しますか?
<br />
99 <a href=
"#item4.17">4.17</a>) 複数のデータベースを使う問い合わせはどのようにすればできますか?
<br />
100 <a href=
"#item4.18">4.18</a>) 関数から複数のロウまたはカラムを返すにはどうしますか?
<br />
101 <a href=
"#item4.19">4.19</a>) PL/PgSQL の関数の中で一時テーブルにアクセスするとき、どうして
"relation with OID ##### does not exist" というエラーを受け取るのでしょうか?
<br />
102 <a href=
"#item4.19">4.20</a>) どのようなレプリケーションのソリューションがありますか?
<br />
103 <a href=
"#item4.20">4.21</a>) テーブルとカラムの名前がクエリーの中で認識
104 されないのはなぜですか? なぜ大文字化(キャピタライズ)は温存されないのですか?
<br />
106 <h2 align=
"center">日本語に関する質問
</h2>
108 <a href=
"#item5.1">5.1</a>) 日本語がうまく扱えないのはなぜですか?
<br />
109 <a href=
"#item5.2">5.2</a>) psql でWindowsからアクセスしたときに、日本語が文字化けするのですが?
<br />
110 <a href=
"#item5.3">5.3</a>) PostgreSQLで日本語の全文検索はできますか?
<br />
115 <h2 align=
"center">一般的な質問
</h2>
117 <h4 id=
"item1.1">1.1</a>) PostgreSQLとは何ですか? その呼び方は? Postgresとは?
</h4>
119 <p>PostgreSQLは
<i>Post-Gres-Q-L
</i>(ポスト・グレス・キュー・エル)
120 と発音しますが、会話の中では単純に
<i>Postgres
</i> と呼ばれることも
121 あります。(
"PostgreSQL"をどう発音するか気になる人のために、
122 <a href=
"http://www.postgresql.org/files/postgresql.mp3">
123 音声ファイル
</a>を用意してあります。
</p>
125 <p>PostgreSQL はオブジェクト-リレーショナルデータベースシステムで、
126 伝統的な商用データベースシステムに、次世代
<small>DBMS
</small>システ
127 ムに見られるような改良が施された特徴を有します。PostgreSQLは、無料で
128 完全なソースコードを手に入れることができます。
</p>
130 <p>PostgreSQL の開発は、ほとんどが、世界中にひろがったボランティアの
131 開発者によって、インターネットを通したコミュニケーションによって行わ
132 れています。コミュニティによるプロジェクトであるため、どの企業の制御
133 もうけません。開発に参加したければ、
<a href=
134 "http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
135 http://www.postgresql.org/docs/faqs.FAQ_DEV.html
</a>
139 <p>PostgresはPostgreSQLの広く使われている愛称です。また、バークレー
140 でのプロジェクトでもともと使われていた名前で、ほかのいずれの愛称に
141 比べても遥かに好ましいです。'PostgreSQL' の発音が難しいと思うのであ
142 れば、そのかわりに 'Postgres' と呼ぶようにしましょう。
</p>
145 <h4 id=
"item1.2">1.2</a>) 誰が PostgreSQL をコントロールしていますか?
</h4>
147 <p>PostgreSQLの門番、中央委員会、あるいは、コントロールをする会社を
148 探そうとしても、諦めざるをえず ---- 存在しないのです。我々は、中心
149 となるコミッティとCVSコミッタを持ちますが、これらのグループはコン
150 トロールするためというよりも、管理上のものです。ここでは、プロジェ
151 クトは、だれでも参加ができる開発者とユーザのコミュニティにより方向
152 付けられます。読者がやらなければならないことは、メーリングリストを
153 サブスクライブして、議論に 参加することです。(
<a
154 href=
"http://wiki.postgresql.org/wiki/Developer_FAQ">Developer's
155 FAQ
</a>には、PostgreSQL開発に加わり方についての情報があります。)
</p>
158 <h4 id=
"item1.3">1.3</a>) PostgreSQL の著作権はどうなってますか?
</h4>
160 <p> PostgreSQL は下記の著作権に従います。
</p>
161 <p> PostgreSQLは古くからのBSDライセンスの下で配布されています。それ
162 は基本的には、利用者がそのコードを好き勝手に利用することが許されて
163 います。制限があるとすれば、このソフトウェアに伴ういかなる問題にお
164 いても法的に責任を我々に負わせることができないということです。
165 また、この著作権表示がこのソフトウェアのすべての複製に表示すること
166 も必要です。以下に、我々が実際に使っているBSD使用許諾書を示します:
171 正文は英語です。参考として、訳文を併記掲載します。
174 <p>PostgreSQL Data Base Management System
</p>
176 Portions Copyright (c)
1996-
2009, PostgreSQL Global Development Group
177 Portions Copyright (c)
1994-
1996 Regents of the University of California
</p>
179 Permission to use, copy, modify, and distribute this software and its
180 documentation for any purpose, without fee, and without a written
181 agreement is hereby granted, provided that the above copyright notice
182 and this paragraph and the following two paragraphs appear in all
185 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
186 FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
187 INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
188 DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF
189 THE POSSIBILITY OF SUCH DAMAGE.
</p>
191 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
192 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
193 AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER
194 IS ON AN
"AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO
195 OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
199 POSTGRESQL データベース管理システム
201 部分的著作権 (c)
1996-
2009, PostgreSQL国際開発グループ
202 部分的著作権 (c)
1994-
1996 カリフォルニア大学本校
205 本ソフトウェアおよびその文書一式は上記の著作権表示と、この文章
206 およびこれに続く二つの段落が全ての複製に添付されている限りにおい
207 て、使用、複製、修正および配付の許可を、いかなる目的であっても、
208 無償でかつ同意書無しに行なえることをここに認めます。
210 カリフォルニア大学は、いかなる当事者にたいしても、利益の壊失を
211 含む、直接的、間接的、特別、偶然あるいは必然的にかかわらず生じた
212 損害について、たとえカリフォルニア大学がこれらの損害について訴追
213 を受けていたとしても、一切の責任を負いません。
215 カリフォルニア大学は、商用目的における暗黙の保証と、特定目的で
216 の適合性に関してはもとより、これらに限らず、いかなる保証も放棄す
217 ることを明言します。以下に用意されたソフトウェアは「そのまま」を
218 基本原理とし、カリフォルニア大学はそれを維持、支援、更新、改良あ
222 著作権に関する正文は上記の英語による表記です。日本語訳はあくまで
227 <h4 id=
"item1.4">1.4</a>) PostgreSQLをサポートするプラットホームは?
</h4>
229 <p>一般的に、最近のUnix互換プラットホームであればPostgreSQLを稼働さ
230 せられるはずです。リリースの時点で実際にテストを行なったことの報告が
231 なされたプラットホームについてはインストール手引書に列挙してあります。
234 <p>PostgreSQL は、Win2000 SP4, WinXP, そして、Win2003 など Microsoft
235 Windows NTベースのオペレーティングシステムで、ネイティブに走ります。
236 あらかじめパッケージにされたインストーラが
<a href=
237 "http://www.postgresql.org/download/windows">
238 http://www.postgresql.org/download/windows
</a>
240 MSDOSベースのWindowsのバージョン(Win95, Win98, WinMe)では、Cygwinを
241 使って PostgreSQL を走らせることができます。
</p>
245 日本語での情報は、次の Windows版に関するFAQの和訳をごらんくださ
247 http://old.postgresql.jp/wg/jpugdoc/FAQ_windows.ja.html
251 <p>次のサイトに Novell Netware
6 への移植版もあります。
252 <a href=
"http://developer.novell.com/wiki/index.php/Postgresql">
253 http://developer.novell.com/wiki/index.php/Postgresql
</a>
254 また、OS/
2 (eComStation) バージョンは、
<a href=
255 "http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F">
256 http://hobbes.nmsu.edu/cgi-bin/h-search?sh=
1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%
2F
</a>にあります。
</p>
260 <h4 id=
"item1.5">1.5</a>) PostgreSQL はどこから入手できますか?
</h4>
262 <p>Webブラウザ経由だと、
<a href=
"http://www.postgresql.org/ftp/">
263 http://www.postgresql.org/ftp/
</a>、それから、ftp経由だと、
264 <a href=
"ftp://ftp.postgresql.org/pub/">
265 ftp://ftp.postgresql.org/pub/
</a> を使います。
</p>
268 <h4 id=
"item1.6">1.6</a>) 最新のリリースはどれですか?
</h4>
270 <p>PostgreSQL の最新版はバージョン
8.3.5 です。
</p>
271 <p>我々は、
1年毎にメジャーリリースを、数ヵ月ごとのマイナーリリースを
276 バージョン番号の x.y.z の最初の x.y がメジャーリリースの番号に相
277 当し、最後の z がマイナーリリースの番号になります。メジャーリリー
278 スの番号が同じであれば、データベース・クラスタに互換性があります。
283 <h4 id=
"item1.7">1.7</a>) サポートはどこで受けられますか?
</h4>
285 <p>PostgreSQL コミュニティは多くのユーザのために、電子メール経由の支
286 援を提供しています。電子メールリストをサブスクライブするためのメイン
288 <a href=
"http://www.postgresql.org/community/lists/">
289 http://www.postgresql.org/community/lists/
</a>です。これから、始める
290 のであれば
<i>general
</i> または、
<i>bugs
</i> といったリストがよいで
293 <p>メジャーなIRC チャンネルは、Freenode (
<i>irc.freenode.net
</i>)の
294 <i>#postgresql
</i> というチャンネルです。UNIX コマンドでは、
295 <code>irc -c '#PostgreSQL'
"$USER" irc.freenode.net
</code> を使って
296 参加できます。同じネットワークに、スペイン語のチャンネル
297 (
<i>#postgresql-es
</i>)、フランス語のチャンネル
298 (
<i>#postgresqlfr
</i>)、ブラジル語チャンネル (
<i>#postgresql-br
</i>)
299 もあります。また、EFNetにもPostgreSQLチャンネルがあります。
</p>
303 1999年
7月
23日、日本ポストグレスユーザー会、略称JPUGが設立されました。
304 JPUG は非営利組織で、PostgreSQLを利用する人達の相互協力の場となっています。
305 (
2006年 特定非営利活動(NPO)法人日本PostgreSQLユーザ会になりました。
306 Web会員と正会員の会費は無料ですが、協賛会員の会費と会員の貢献で
309 <a href=
"http://www.postgresql.jp/">http://www.postgresql.jp/
</a>
312 日本語のIRCチャンネル '#PostgreSQL:*.jp' も存在します。
317 href=
"http://www.postgresql.org/support/professional_support">
318 http://www.postgresql.org/support/professional_support
</a>にあります。
</p>
321 <h4 id=
"item1.8">1.8</a>) バグレポートはどのように発信しますか?
325 "http://www.postgresql.org/support/submitbug">
326 http://www.postgresql.org/support/submitbug
</a>
327 のPostgreSQL バグフォームを訪れてください。 バグレポートを提出する仕方
330 <p> それと同時に ftp サイト
<A
331 href=
"ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/
</a>
332 で、最新バージョンの PostgreSQL を探してみてください。
</p>
335 <h4 id=
"item1.9">1.9</a>) 既知のバグや未だ無い機能はどうやって見つけますか?
338 <p>PostgreSQLは拡張された
<small>SQL:
2003</small>のサブセットをサポート
340 href=
"http://www.PostgreSQL.org/docs/todo.html">TODO
</a> リストに、
341 既知のバグや欠落機能や将来計画についての記述があります。
</p>
344 <p>特徴の要求は普通次のいずれかの解答の中にあります:
</p>
347 <a href=
"http://www.postgresql.org/docs/faqs.TODO.html">TODO
</a>
349 <li>次のような機能は目論まれていません。それは:
351 <li>SQL規格に準ずる既存の機能と重複するもの
</li>
352 <li>コードの複雑性ばかりを高めて、得るものが少ない機能
</li>
353 <li>安全性が確められない機能
</li>
357 <a href=
"http://www.postgresql.org/docs/faqs.TODO.html">TODO
</a>
361 <p>我々は、PostgreSQL に関して、電子メールで直接対応して
362 <a href=
"http://www.postgresql.org/docs/faqs.TODO.html">TODO
</a>
363 リストを最新に更新してゆくほうがより効果的であることを知っています
365 現実に、このソフトウェアの中でバグはそれほど長くはい続けませんし、
366 多くのユーザに影響するバグは早急に修正されます。PostgreSQLのリリース
367 で、すべての変更点、改良点、そして、修正点を知りたければ、
368 <a href=
"http://www.postgresql.org/developer/sourcecode/">CVS
</a>
369 のログメッセージを見てください。リリースノートにさえ、このソフトウェア
370 に加えられたすべての変更点は網羅されていません。
</p>
373 <h4 id=
"item1.10">1.10</a>) どのような文書がありますか?
</h4>
375 <p> 配付の中に、いくつかのマニュアルとオンライン・マニュアル(マニュ
376 アル・ページ)およびいくつかの小さなテスト例題が含まれます。
377 <i>/doc
</i>ディレクトリをごらんください。また、マニュアルは、
<A
378 href=
"http://www.postgresql.org/docs/">
379 http://www.postgresql.org/docs/
</a>でオンラインでも閲覧できます。
385 JPUG 文書・書籍関連分科会で翻訳されたマニュアルもあります。
386 <a href=
"http://www.postgresql.jp/document/pg835doc/">
387 http://www.postgresql.jp/document/pg830doc/
</a>
389 <a href=
"http://home.impress.co.jp/reference/2108.htm">
390 PostgreSQLオフィシャルマニュアル
</a>として出版されています。
395 <p>オンラインで参照できる PostgreSQL の本も
2冊あります。
<a href=
396 "http://www.postgresql.org/docs/books/awbook.html">
397 http://www.postgresql.org/docs/books/awbook.html
</a>
401 この本は、JPUG
<a href=
"http://www.postgresql.jp/wg/psqltrans/">「PostgreSQL Book翻訳分科会」
402 </a>で翻訳され、ピアソンから
<a href=
"http://www.seshop.com/detail.asp?pid=2587">
403 「はじめてのPostgreSQL」
</a>として出版されています。
408 "http://www.commandprompt.com/ppbook/">
409 http://www.commandprompt.com/ppbook/
</a>です。
413 邦訳は
<a href=
"http://www.oreilly.co.jp/books/4873111021/">「実践 PostgreSQL」
414 </a>がオライリーから出版されています。
419 "http://www.postgresql.org/docs/books/">http://www.postgresql.org/docs/books/
</a>
422 PostgreSQL 技術情報記事も、
<a href=
423 "http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides%2C_and_Documentation">http://wiki.postgresql.org/wiki/Community_Generated_Articles%
2C_Guides%
2C_and_Documentation
</a>
428 日本語の書籍等については、日本PostgreSQLユーザ会の、
<A
429 href=
"http://old.postgresql.jp/PostgreSQL/references.html">http://www.postgresql.jp/PostgreSQL/references.html
</a>
434 <p> コマンドラインのクライアントプログラム
<i>psql
</i> にも、型、
435 演算子、関数、集約、その他の情報を調べるために、素晴らしい \d コマンド
436 がいくつかあります。 \? を入力すると利用可能なコマンドが表示されます。
</p>
438 <p> 我々の Web サイトには、さらに沢山の文書があります。
</p>
442 2008年
11月
18日、PostgreSQL普及のために一般向けの情報を扱う
443 「Let's Postgres」というポータルサイトがオープンしました。
<A
444 href=
"http://lets.postgresql.jp/">http://lets.postgresql.jp/
</a>
449 <h4 id=
"item1.11">1.11</a>)
<small>SQL
</small> はどうすれば学べますか?
</h4>
451 <p>まず、 上記で述べた PostgreSQL についての本を読むことを検討してください。
452 <i>The Practical SQL Handbook
</i>, Bowman Judith S. et al.,
453 Addison-Wesley も多くのユーザに好評です。 ほかでは、
<i>The Complete
454 Reference SQL
</i >, Groff et al., McGraw-Hill も好評です。
</p>
457 <p>素晴らしい手引書は、
<a href=
459 <li> <a href=
"http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm
</a>
462 <a href=
"http://sqlcourse.com/">http://sqlcourse.com
</a>
466 <a href=
"http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp
</a>
469 "http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html
</a>
472 "http://sqlzoo.net">http://sqlzoo.net
</a>
480 日本PostgreSQLユーザ会の日本語の参考文献の紹介ページ
481 <a href=
"http://www.postgresql.jp/PostgreSQL/references.html">
482 http://www.postgresql.jp/PostgreSQL/references.html
</a>
484 堀田倫英氏の「PostgreSQL日本語マニュアル」
485 <a href=
"http://www.net-newbie.com/">http://www.net-newbie.com/
</a>
486 ではオンラインマニュアルの検索ができます。
488 <a href=
"http://www.wakhok.ac.jp/DB/DB.html">http://www.wakhok.ac.jp/DB/DB.html
</a>
490 Nikkei BP IT Pro にある石井達夫氏の
<a href=
"http://itpro.nikkeibp.co.jp/article/COLUMN/20060120/227628/">PostgreSQL ウォッチ
</a>
495 <h4 id=
"item1.12">1.12</a>) パッチを提供したり、開発チーム参加するにはどうすればよいですか?
</h4>
497 <p><a href=
"http://www.postgresql.org/docs/faqs.FAQ_DEV.html">
498 (開発者向けの)Developer's FAQ
</a>をごらんください。
</p>
501 <h4 id=
"item1.13">1.13</a>) 他の
<small>DBMS
</small>と比べPostgreSQLはどうなのですか? PostgreSQLを組み込みに使えますか?
</h4>
503 <p>ソフトウェアを評価する方法にはいくつかあります。機能と性能と信頼性と
507 <dt> <b>機能(Features)
</b></dt>
509 PostgreSQLは、トランザクション、サブクエリ、トリガー、ビュー、外
510 部キー整合性参照、および、洗練されたロック機構など、大規模商用
511 <small>DBMS
</small>が持つ機能をほとんど持っています。さらに
512 PostgreSQLは、ユーザ定義型、継承、ルール、それから、ロック競合を縮
513 小するマルチバージョン同時性制御など、商用
<small>DBMS
</small>も持
514 ち合わせないような機能をいくつか持ち合わせています。
<br />
518 <dt> <b>性能(Performance)
</b></dt>
520 PostgreSQLは他の商用あるいはオープンソースのデータベースと互角の性
521 能も持ちます。ある面ではより早かったり、ほかの面ではより遅かったり
522 します。他のデータベースに比べた性能は、ふつう +/-
10% くらいでしょう。
525 <dt> <b>信頼性(Reliability)
</b></dt>
527 我々は、
<small>DBMS
</small>の信頼性が高くなくてはその価値が無いこ
528 とを理解してます。十分テストして、安定したコードをバグを最小にして
529 からリリースするように努めてます。それぞれのリリースは少なくとも
1
530 カ月以上のベータ・テストを行ない、これまでのリリースの履歴が、製品
531 版として安定した堅固なリリースであることを物語っています。この分野
532 では、他のデータベースと比べても遜色がないことに自信を持っています。
536 <dt> <b>サポート(Support)
</b></dt>
538 我々のメーリングリストは、遭遇するいかなる問題についても解決への手
539 助けをしてくれる、開発者やユーザの大きな集まりへの接点を提供してい
540 ます。我々は問題の解決を保証することはできませんが、商用データベー
541 スであっても常に解決されるわけではありません。開発者や、ユーザ・コ
542 ミュニティ、マニュアル類、それに、ソースコードなどへ直接アクセスで
543 きることによって、PostgreSQLのサポートは、他の
<small>DBMS
</small>
544 サポートよりも優れたものとなっています。御要望に答えて、事柄毎の商
545 用サポートなどもあります(
<a href=
"#item1.7">FAQ1.7節
</a>をごらんくだ
550 <dt> <b>価格(Price)
</b></dt>
552 PostgreSQLの利用は、商用でも非商用でも、すべて無料です。上記に示し
553 てあるBSDスタイルの使用許諾に外れない限り、PostgreSQLのコードを制
554 限無しで商品に組み込むことができます。
<br />
557 PostgreSQLはクライアント/サーバ・アーキテクチャで設計されていて、
558 クライアントとサーバおよびそれを補助するいろいろなプロセスが別々に走
559 ることが要求されます。多くの組み込みアーキテクチャはこのような要求を
560 サポート可能です。しかし、お使いになっている組み込みアーキテクチャに
561 よっては、データベースサーバがアプリケーション・プロセスの中で走るこ
562 とを要求される場合があり、Postgresを使うことはできないので、軽量のデー
566 <h3 id=
"item1.14">1.14) PostgreSQLは国毎の最新の夏時間の変更を扱いますか?
</h3>
568 <p>合州国の夏時間の変更は、PostgreSQLのリリース
8.0.4以降[
4+]と、その
569 後のメジャーリリース、たとえば
8.1 には含まれています。カナダとオー
570 西部ストラリアの変更は、
8.0.[
10+],
8.1.[
6+] および、その後のメジャー
571 リリースのすべてに含まれます。
8.0より前のPosrgreSQLではオペレーティ
572 ングシステムのタイムゾーンデータベースを夏時間情報のために使ってい
577 <h3 id=
"item1.15">1.15) PostgreSQLのメーリングリストの購読をやめるにはどうすればよいですか?また、電子メールを重複して受け取らないようにするにはどうしますか?
581 href=
"http://mail.postgresql.org/mj/mj_wwwusr/domain=postgresql.org?user=&passw=&func=login">Majordomo
</a>
582 ページから、PostgreSQLに関する複数のメーリングリストの購読の開始と中止
583 ができるようになっています。(ログインするためにはMajaordomoから送ら
584 れる御本人のパスワードが必要になります。)
</p>
586 <p>PostgreSQLnoすべてのメーリングリストでは、返信はメーリングリスト
587 と
<i>かつ
</i>元のメールの投稿者へ送られるように構成してあります。こ
588 れにり利用者は、もっとも迅速にメールへの返信を受けられるようになって
589 います。既に直接受け取っているメールを、リストから重複して受け取りた
590 くない場合は、Majordomo の
<i>Change Settings
</i>ページから、
591 <i>eliminatecc
</i>をチェックします。また、
<i>selfcopy
</i>のチェック
592 をはずすことで、自分の送ったメールのコピーを受け取らないようにもでき
596 <h2 align=
"center">ユーザ・クライアントの質問
</h2>
599 <h4 id=
"item2.1">2.1</a>) PostgreSQL にはどんなインターフェースが使えますか?
</h4>
601 <p>PostgreSQL のインストールに含まれる物は
<small>C
</small>と組込み
602 <small>C
</small>のインターフェースだけです。その他のインターフェース
603 は独立したプロジェクトで、別々にダウンロードされます。分かれることで、
604 それぞれの開発チームが独自のリリーススケジュールを持つことが許されま
607 <p><small>PHP
</small> のようないくつかのプログラミング言語は、
608 PostgreSQLのインターフェースを含んでいます。Perl,
<small>TCL
</small>,
609 Python, そして、そのほかの利用可能な言語のインターフェースは、
<a
610 href=
"http://pgfoundry.org">http://pgfoundry.org
</a>
611 の
<i>Drivers/Interfaces
</i> の節の中とインターネットの検索でみつけ
616 <h4 id=
"item2.2">2.2</a>) PostgreSQL を Web ページと連携させるにはどんなツールがありますか?
</h4>
618 <p> データベースを裏に持つ Web ページについての素晴らしい紹介が、
<br />
619 <a href=
"http://www.webreview.com">http://www.webreview.com
</a>にあります。
</p>
620 <p> Web への拡張のためには、PHP(
<a href=
"http://www.php.net">http://www.php.net/
</a>)
621 が卓越したインターフェースとなっています。
</p>
625 PHPに関する日本語の情報は、
2000年
4月
19日に発足した日本PHPユーザ会のサイト
626 <a href=
"http://www.php.gr.jp/">http://www.php.gr.jp/
</a>
628 <a href=
"http://www.geocities.jp/rui_hirokawa/php/">http://www.geocities.jp/rui_hirokawa/php/
</a>
633 <p> 処理が複雑な場合、多くの人は Perl インターフェースと CGI.pm か
637 <h4 id=
"item2.3">2.3</a>) PostgreSQL にグラフィカル・ユーザインターフェースはありますか?
</h4>
640 <p>商用とオープンソース開発者によるもの両方で、PostgreSQLには多くのGUIツールが利用可能で、詳細なリストは、
<a
641 href=
"http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools">
642 PostgreSQL GUI ツールについてのコミュニティガイド
</a> にてごらんください。
</p>
646 pgAdmin3 はPostgreSQL標準GUI管理ツールで、Windows版(PostgreSQL
647 for Windows) に同梱されています。詳しい情報は、
648 <a href=
"http://www.pgadmin.org/">http://www.pgadmin.org/
</a>にあります。
654 <h2 align=
"center">管理上の質問
</h2>
656 <h4 id=
"item3.1">3.1</a>) どのようにすれば
<i>/usr/local/pgsql
</i> 以外の場所にインストールできますか?
</h4>
658 <p> 簡単な方法は、
<i>configure
</i> を走らせるときに --prefix オプショ
662 <h4 id=
"item3.2">3.2</a>) 他のホストからの接続はどのように制御しますか?
</h4>
664 <p>既定値では、PostgreSQL は Unix ドメインソケット、または、TCP/IP接
665 続のローカルマシンからの接続しか許しません。postgresql.conf の中の
666 listen_addresses を修正し、
<b>かつ
</b>、
<i>$PGDATA/pg_hba.conf
</i>
667 ファイルを適切に直し、データベースサーバを再起動して、ホストベース
668 の認証を有効にしないかぎりは、他のマシンからは接続できないでしょう。
</p>
671 <h4 id=
"item3.3">3.3</a>) より良い性能を得るためには、データベース・エンジンをどのように調整しますか?
</h4>
673 <p>性能改善の可能性のありそうな主な領域が
3つあります:
</p>
675 <dt><b>クエリの変更
</b></dt>
677 <dd>クエリを修正してより良い性能を得ることを含みます:
679 <li>式および部分インデックスを含む、インデックスを作成
</li>
680 <li>複数の
<small>INSERT
</small>のかわりにCOPYを使用
</li>
681 <li>複数の文をグループ化し、
1つのトランザクションにしてコミットのオーバヘッドを削減
</li>
682 <li>インデックスからから沢山のロウを取り出すときは
<small>CLUSTER
</small>を使用
</li>
683 <li>クエリの出力のサブセットを返すために
<small>LIMIT
</small>を使用
</li>
684 <li>準備されているクエリを使用
</li>
685 <li>オプティマイザの正確な統計を維持するために
<small>ANALYZE
</small>を使用
</li>
686 <li><small>VACUUM
</small> または
<i>pg_autovacuum
</i> の常用
</li>
687 <li>大きなデータ変更のあるときはインデックスを削除
</li>
692 <dt><b>サーバ構成
</b></dt>
694 <dd><i>postgresql.conf
</i>の設定のいくつかは性能に影響します。
696 "http://www.postgresql.org/docs/current/static/runtime-config.html">
697 Administration Guide/Server Run-time Environment/Run-time
698 Configuration
</a> の全件リストをごらんください(
<a
699 href=
"http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">
700 JPUGサイトの日本語版、サーバの構成
</a>)。
702 href=
"http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">
703 http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html
</a>
704 および、
<a href=
"http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">
705 http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html
</a> を
711 <dt><b>ハードウェアの選定
</b></dt>
714 <a href=
"http://www.powerpostgresql.com/PerfList/">
715 http://www.powerpostgresql.com/PerfList/
</a> と、
<a
716 href=
"http://momjian.us/main/writings/pgsql/hw_performance/index.html">
717 http://momjian.us/main/writings/pgsql/hw_performance/index.html
</a>
718 (
<a href=
"http://www.postgresql.jp/wg/psqltrans/hw_performance_j/index.html">JPUGサイトの日本語版
</a>)
728 JPUG理事長の片岡裕生氏による、「今すぐできるPostgreSQLチューニング」
729 というコーナーが ThinkIT サイトにあり、実作業の参考になります。
730 http://www.thinkit.co.jp/free/tech/
10/
1/
1.html
735 <h4 id=
"item3.4">3.4</a>) どのようなデバグ機能が使えますか?
</h4>
738 href=
"http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html">http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html
</a>
739 に示されるように多くの
<code>log_*
</code> があり、クエリとプロセス
740 の統計情報を出力することができ、デバグや性能測定にはとても便利です。
</p>
743 <h4 id=
"item3.5">3.5</a>) 接続しようとするときに
<i>'Sorry, too many clients'
</i> が出るのはなぜですか?
</h4>
745 <p> 既定での制限である
100 のデータベースセッションに達してしまって
746 います。サーバーの同時接続できるバックエンドプロセスの制限値を増やす
747 必要があります。
<i>postgresql.conf
</i> の中の
<i>max_connections
</i>
748 の値を変更してサーバを再起動することで可能になります。
</p>
751 <h4 id=
"item3.6">3.6</a>) PostgreSQLのアップグレードの手順はどうなりますか?
</h4>
753 <p>バージョン番号付けの方針について、更新全般についての解説は
<a
754 href=
"http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning
</a> を、
755 そして、アップグレードについての一般的な説明は
<a
756 href=
"http://www.postgresql.org/docs/current/static/install-upgrading.html">
757 http://www.postgresql.org/docs/current/static/install-upgrading.html
</a>
762 アップグレードについての和訳版は下記にあります。
763 <a href=
"http://www.postgresql.jp/document/current/html/install-upgrading.html">http://www.postgresql.jp/document/current/html/install-upgrading.html
</a>
770 原文では、下記の内容は
<a href=
"http://www.postgresql.org/support/versioning">独立したページに移され
</a>、削除されています。
773 <p>新しい機能を盛り込むPostgreSQLのメジャーリリースはだいたい年に
1回
774 程度行ないます。メジャーリリースは、たとえば、
8.1から
8.2へのように、
775 バージョン番号の
1番目か
2番目の部分を増やしてゆきます。
</p>
777 <p>PostgreSQLのメジャーリリースは通常、システムテーブルとデータの内
778 部フォーマットを変更します。これらの変更はたいていは複雑なのでで、デー
779 タファイルの後方互換性を維持したりはしません。メジャーアップグレード
780 のためには、データベースのダンプ/リロードが必要になります。
</p>
782 <p>マイナーリリースは、たとえば、
8.1.5 から
8.1.6へのように、バージョ
783 ン番号の
3番目の値を増やします。PostgreSQLチームは、マイナーリリース
784 に対しては、バグフィクスしか行ないません。すべてのユーザは、できるだ
785 け最新のマイナーリリースに更新すべきです。アップグレードには、常にリ
786 スクがつきものですから、PostgreSQLのマイナー修正リリースでは、頻繁に
787 発生したり、
<a href=
"http://www.postgresql.org/support/security">セキュリティ
</a>に関係したり、データがつぶれるバグだけを修正
788 し、アップグレードのリスクを最小限にとどめます。我々のコミュニティで
789 は、アップグレードするリスクよりも、アップグレード
<i>しないリスク
</i>
792 <p>マイナーリリースのアップグレードにはダンプとリストアの必要はなく、
793 データベースサーバを停止して、アップデートされたバイナリをインストー
800 <h4 id=
"item3.7">3.7</a>) ハードウェアにはどのようなコンピュータを使えばよいですか?
</h4>
802 <p>PCハードウェアはほとんど互換性がありますので、ほとんどの人は、す
803 べてのPCハードウェアが同じ品質だと思い込む傾向があります。しかし、そ
804 れは間違いです。ECC RAM、SCSI、および、高品質マザーボードは、安いハー
805 ドウェアに比べると、より信頼性が高く、より性能も良いのです。
806 PostgreSQL はほとんどのハードウェアで稼働しますが、信頼性や性能が重
807 要な場合は、使用中のハードウェアのオプションについて調査することが
808 賢明です。バッテリーバックアップ付きのキャッシュを持つディスクコント
809 ローラも役に立ちます。我々のメーリングリスト上でもハードウェアオプショ
810 ンのトレードオフについて議論することができます。
</p>
814 <h2 align=
"center">操作上の質問
</h2>
816 <h4 id=
"item4.1">4.1</a>) 最初の数ロウのみを
<small>SELECT
</small>するにはどうしますか?ランダムなロウ?
819 <p>取得したいロウがほんの数行で、
<small>SELECT
</small> の実行時に取得するロウの
820 数が分かっていれば
<small>LIMIT
</small> を使いましょう。インデックスが
821 <small>ORDER BY
</small> とマッチすれば、クエリ全体を(丸ごと)実行しなくても済む場合も
822 あります。
<small>SELECT
</small> する時点でロウの数が不明なら、カーソルを使って
823 <small>FETCH
</small> しましょう。
825 <p>ランダムにロウを
<small>SELECT
</small>するには、次の文を使います:
834 <h4 id=
"item4.2">4.2</a>) 定義されたテーブル、インデックス、データベース、および、ユーザをどのようにして見つけ出しますか?
<i>psql
</i>で使われているクエリを表示するにはどうしますか?
</h4>
836 <p><i>psql
</i> の中で \dtコマンドを使ってテーブルを見ることができ
837 ます。psqlの中で \? を使って、コマンドの全リストを調べることができま
838 す。一方で、
<i>psql
</i> のソースコードで、バックスラッシュコマンドを
839 出力する
<i>pgsql/src/bin/psql/describe.c
</i> ファイルを読むこともで
840 きます。その中には、
<small>SQL
</small> コマンドを生成する部分も含ま
841 れます。また、
<i>-E
</i> オプションを付けて
<i>psql
</i> を開始すると、
842 入力されたコマンドを実行するためのクエリを印字出力するようになります。
843 PostgreSQLは
<small>SQL
</small> 準拠の INFORMATION SCHEMA インター
844 フェースを提供しますので、データベースについての情報を問い合わせるこ
847 <p><i>pg_
</i> で始まるシステムテーブルでもこれらを記述することができ
850 <p><i>psql -l
</i>を使うと全てのデータベースをリストします。
</p>
852 <p>それと、
<i>pgsql/src/tutorial/syscat.source
</i> を試してみてくだ
853 さい。そこには、データベースのシステムテーブルから情報を得るために必
854 要な
<small>SELECT
</small> 文が沢山あります。
</p>
857 <h4 id=
"item4.3">4.3</a>) カラムのデータ型を変更するにはどうしますか?
</h4>
859 <p>カラムのデータ型の変更は
8.0 以降では、
860 <small>ALTER TABLE ALTER COLUMN TYPE
</small> を使うことにより間単に
863 <p>それより前のバージョンでは、以下のようにします:
</p>
866 ALTER TABLE tab ADD COLUMN new_col
<i>new_data_type
</i>;
867 UPDATE tab SET new_col = CAST(old_col AS
<i>new_data_type
</i>);
868 ALTER TABLE tab DROP COLUMN old_col;
872 <p>これを行なったときは、抹消された行が使っているディスク空間を回収
873 するために
<i>VACUUM FULL tab
</i>をしたほうが良いかもしれません。
</p>
875 <h4 id=
"item4.4">4.4</a>) ロウ、テーブル、データベースの最大サイズは?
</h4>
880 <tr><td>データベースの最大サイズ?
</td><td>制限無し (
32 TB のデータベースも存在します)
</td></tr>
881 <tr><td>テーブルの最大サイズ?
</td><td>32 TB
</td></tr>
882 <tr><td>ロウの最大サイズ?
</td><td>400 GB
</td></tr>
883 <tr><td>フィールドの最大サイズ?
</td><td>1 GB
</td></tr>
884 <tr><td>テーブル内での最大ロウ数?
</td><td>制限無し
</td></tr>
885 <tr><td>テーブル内での最大カラム数?
</td><td>カラムの型によって
250-
1600</td></tr>
886 <tr><td>テーブル内での最大インデックス数?
</td><td>制限無し
</td></tr>
890 <p> もちろん、これらは実際は無制限ではなく、ディスク容量とメモリーや
891 スワップスペースの大きさにより制限されます。性能はこれらの値がことの
894 <p> 最大テーブルサイズの
32TBはオペレーティングシステムによる巨大ファ
895 イルのサポートは必要としません。巨大なテーブルは複数の
1GBのファイル
896 に分けて保存されますので、ファイルシステムの制限は重要ではありません。
899 <p> デフォルトのブロックサイズを
32kに増加することで、最大テーブルサイズ
900 と行サイズと最大カラム数とを
4倍にすることができます。また、最大テーブル
901 サイズはテーブルパーティションを使って増やすこともできます。
</p>
903 <p>ひとつの制限は、約
2,
000文字以上の長さのカラムにインデックスを付
904 けることができないことです。 幸いにも、そのようなインデックスは実際
905 は必要ありません。長いカラムのMD5ハッシュの関数インデックスは一意性
906 がなによりの保険で、また、フルテキストのインデックスではカラム内の
909 <h4 id=
"item4.5">4.5</a>) 一般的なテキストファイルのデータを保存するには、データベースのディスク容量はどのくらい必要です?
</h4>
911 <p>普通のテキストファイルを PostgreSQL のデータベースに保存するには、
912 最大で約
5倍のディスク容量を必要とします。
</p>
915 <p> 例題として、各行に整数とテキスト記述を持つ
100,
000行のファイルを
916 考えてみましょう。テキストの文字列の平均長さを
20バイトと仮定すると、
917 フラットファイルの大きさは約
2.8MB です。このデータを含む PostgreSQL
918 データベースファイルの大きさは次のように約
5.2MBと見積もることができ
922 24 bytes: 各ロウのヘッダ(概算)
923 24 bytes: 整数(int)フィールドとテキスト(text)フィールド
924 +
4 bytes: ページ上のタップルへのポインタ
925 ----------------------------------------
928 PostgreSQL のデータページサイズは
8192バイト(
8KB)なので:
931 ------------------- =
146 rows per database page (切り捨て)
935 -------------------- =
633 database pages (切り上げ)
938 633 database pages *
8192 bytes per page =
5,
185,
536 bytes (
5.2 MB)
941 <p>インデックスは、これほどのオーバヘッドは要求しませんが、インデッ
942 クス付けされるデータを含む以上、それなりに大きくなります。
</p>
943 <p><small>NULL
</small>はビットマップとして保存されていて、それらがわ
947 <h4 id=
"item4.6">4.6</a>) クエリが遅いのはなぜでしょう? なぜ、インデックスが使われないのでしょうか?
</h4>
949 <p>インデックスは、すべてのクエリで使われるわけではありません。テー
950 ブルが最小サイズより大きく、クエリでそのわずかなパーセンテージのロウ
951 を選択する時だけ、インデックスは使われます。これはインデックススキャ
952 ンにより起こされるランダムなディスクアクセスは、テーブルをストレート
953 に読む順次走査よりも遅くなることがあるからです。
</p>
955 <p>インデックスを使うかを決定するために、PostgreSQL はテーブルについ
956 ての統計情報を持たなければなりません。この統計情報は、
957 <small>VACUUM ANALYZE
</small>または、単に
<small>ANALYZE
</small> を使っ
958 て収集することができます。統計情報を使ってオプティマイザはテーブルの
959 中にあるロウ数を知り、インデックスを使うべきかの決定をより正しくでき
960 ます。統計情報は最適な結合順や結合方法を決める上でも貴重なものもあり
961 ます。統計情報の収集は、テーブルの内容が変わる毎に繰返しなされるべ
964 <p> インデックスは、通常
<small>ORDER BY
</small> や結合を行なうため
965 には使われません。順次スキャンに続く明示的ソートは、巨大なテーブルの
966 インデックススキャンよりも普通は高速です。
</p>
968 しかし、
<small>ORDER BY
</small>と組み合わされた
<small>LIMIT
</small>
969 は、テーブルの小さな部分を返すためにたびたびインデックスを使うでしょ
972 <p>もし、オプティマイザが間違ってシーケンシャルスキャンを選択したこ
973 とに疑いがなければ、
<CODE>SET enable_seqscan TO 'off'
</CODE>に設定し
974 て、クエリをもう一度実行し、インデックススキャンがまちがいなく速くなっ
977 <p> <small>LIKE
</small> あるいは
<i>~
</i> のようなワイルドカード演算
980 <li>検索文字列が文字列の最初にききます。たとえば:
</li>
982 <li><small>LIKE
</small> パターンが
<i>%
</i>で始まらない
</li>
983 <li><i>~
</i> (正規表現) パターンは
<i>^
</i>で始まらなければならない
</li>
985 <li>検索文字列を文字クラスから始めることはできません。たとえば、[a-e]。
</li>
986 <li><small>ILIKE
</small> や
<i>~*
</i> のような大文字と小文字を区別し
987 ない検索は使えません。そのかわり、このFAQの
<a
988 href=
"#item4.8">4.8</a>節で説明する式インデックスが使えます。
990 <li><i>initdb
</i> においては、デフォルトで
<i>C
</i>ロケールが使われな
991 くてはなりません。その理由は、Cロケール以外では次に大きな文字を
992 知ることができないからです。このような場合、
<pre>LIKE
</pre>イン
993 デクシングにだけ働くような、特別な
<pre>text_pattern_ops
</pre>イ
994 ンデックスを作成することもできます。また、それを全文検索のフル
995 テキストのインデックス作成に使うことができます。
1001 <h4 id=
"ITEM4.7">4.7</a>) 問い合わせオプティマイザがどのように問い合わせを評価するのかを見るにはどうしますか?
</h4>
1003 <p>オンラインマニュアルで
<small>EXPLAIN
</small> を見てください。
</p>
1005 <h4 id=
"item4.8">4.8</a>) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使いますか?
</h4>
1007 <p><i>~
</i>演算子は正規表現照合を行ない、
<i>~*
</i> は大文字と小文字
1008 を区別しない(case-insensitive)正規表現照合を行います。 大文字と小文
1009 字を区別しない
<small>LIKE
</small> 演算子を
<small>ILIKE
</small> と
1012 <p>大文字と小文字を区別しない等値比較は次のように表現できる:
1016 WHERE lower(col) = 'abc';
1019 <p>標準インデックスでは使われず、しかしながら、もし、式インデックス
1020 を作ったならそれが使われるでしょう。
</p>
1023 CREATE INDEX tabindex ON tab (lower(col));
1026 <p>上記のインデックスが
<small>UNIQUE
</small>で作成された場合、カラム
1027 は大文字と小文字を格納できますが、その違いが文字ケースだけであっても
1028 同一にはなりません。あえて特定の文字ケースをカラムに格納するには
1029 <small>CHECK
</small>制約か、トリガーを使ってください。
</p>
1033 <h4 id=
"item4.9">4.9</a>) クエリの中で、フィールドが
<small>NULL
</small> であることを検出するにはどうしますか?
<small>NULL
</small> であることを検出するにはどうしますか? フィールドが
<small>NULL
</small>かどうかでどのようにソートができますか?
</h4>
1035 <p>以下のように、
<small>IS NULL
</small> と
<small>IS NOT
1036 NULL
</small>で、そのカラムをテストしてみます:
</p>
1044 <small>NULL
</small>の可能性のあるものを連結するには、
<i>COALESCE()
</i>を
1048 SELECT COALESCE(col1, '') || COALESCE(col2, '')
1052 <p><small>NULL
</small>状態でソートするには、
<small>IS NULL
</small> と
1053 <small>IS NOT NULL
</small> の修飾子を
<small>ORDER BY
</small> 句の中
1054 で使ってみます。
<i>true
</i> のものは
<i>false
</i> のものよりも高い値
1055 として並べられますので、次の例では NULL の記載が結果リストの上部に置
1061 ORDER BY (col IS NOT NULL)
1065 <h4 id=
"item4.10">4.10</a>) いろいろな文字型のそれぞれの違いは何ですか?
1070 <tr><th>型
</th><th>内部名
</th><th>備考
</th></tr>
1071 <tr><td>VARCHAR(n)
</td><td>varchar
</td><td>最大長のサイズを指定する、詰め物無し
</td></tr>
1072 <tr><td>CHAR(n)
</td><td>bpchar
</td><td>指定された固定長となるように空白が詰められる
</td></tr>
1073 <tr><td>TEXT
</td><td>text
</td><td>長さに特別な上限は無し
</td></tr>
1074 <tr><td>BYTEA
</td><td>bytea
</td><td>可変長のバイト配列(null-byte safe)
</td></tr>
1075 <tr><td>"char"</td><td>char
</td><td>1文字
</td></tr>
1079 <p> 内部名にお目にかかるのは、システム・カタログを調べるときや、エラー
1082 <p> 上記の型のうち最初の4つの型は
"varlena" 型です(すなわち、ディス
1083 クの最初の4バイトがデータ長で、それの後に実際のデータが続きます)。
1084 このように実際の空間は宣言された大きさよりも少し大きくなります。しか
1085 し、長い値は圧縮されるので、ディスク上の空間は思ったよりも小さくなります。
</p>
1087 <p><small>VARCHAR(n)
</small> は可変長の文字列を保存するのに最適です
1088 が、保存できる文字列の長さに制限があります。
<small>TEXT
</small> は長
1089 さに制限の無い文字列の保存のためのもので、最大で
1ギガバイトです。
1090 <small>CHAR(n)
</small>は、
<small>VARCHAR(n)
</small>が与えられた文字
1091 だけを保存するのに対し、ブランクを詰め込んでいつも同じ長さで文字列を
1092 保存するのに最適です。
<small>BYTEA
</small>は、部分的に
1093 <small>NULL
</small> のバイトを含むバイナリデータを保存するためのもの
1094 です。これらのタイプは同じくらいの性能特性をもちます。
</p>
1097 <h4 id=
"item4.11.1">4.11.1</a>) 通番(serial)/自動増分フィールドはどのようにつくりますか?
</h4>
1099 <p> PostgreSQL は
<small>SERIAL
</small> データ型をサポートします。カ
1100 ラム上にシーケンスを自動作成します。たとえば、
</p>
1103 CREATE TABLE person (
1110 CREATE SEQUENCE person_id_seq;
1111 CREATE TABLE person (
1112 id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
1119 CREATE UNIQUE INDEX person_id_key ON person ( id );
1120 は、
7.3 以降は自動的には行なわれなくなりました。
1125 <<i>table
</i>>_
<<i>serialcolumn
</i>>_
<i>seq
</i>
1126 と名付けられていて、
<i>table
</i> と
<i>serialcolumn
</i> は、それぞれ
1127 テーブルと
<small>SERIAL
</small> カラムの名前です。
1128 通番については、オンラインマニュアルで
<i>create_sequence
</i>
1132 <h4 id=
"item4.11.2">4.11.2</a>)
<small>SERIAL
</small>データ型に挿入される値は、どうすれば得られますか?
</h4>
1134 <p>最も簡単な方法は、割り当てられた
<small>SERIAL
</small>値を
1135 <small>RETURNING
</small>として取得することです。
1136 <a href=
"#item4.11.1">4.11.1</a>の例題テーブルを使うと次のように
1140 INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
1144 <h4 id=
"item4.11.3">4.11.3</a>)
<i>currval()
</i> は他のユーザとの競合状態に陥ることはないですか?
</h4>
1146 <p>それはありません。
<i>currval()
</i> は、すべてのユーザではありませ
1147 んが、読者のセッションに与えられた現在の値を返します。
</p>
1150 <h4 id=
"item4.11.4">4.11.4</a>) トランザクションが中断したときにもういちどシーケンス番号が使われないのはなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか?
</h4>
1152 <p>同時性を改善するために、実行中のトランザクションに、必要に応じてト
1153 ランザクションが終了するまでロックされないようシーケンス値を与えてい
1154 ます。このためトランザクションが中断されると番号割り当てにギャップを
1158 <h4 id=
"item4.12">4.12</a>)
<small>OID
</small> とは何ですか?
<small>CTID
</small> とは何ですか?
</h4>
1160 <p>テーブルが
<small>WITH OIDS
</small>でつくられた場合は、それぞれの
1161 ロウに一意な
<small>OID
</small>が取られます。
1162 <small>OID
</small>は自動的に
4バイトの整数で与えられ、それは、全イン
1163 ストレーションを通して一意な値となります。しかし、約
40億でオーバーフ
1164 ローし、そして、
<small>OID
</small>は重複をしはじめます。PostgreSQLは
1165 内部システムテーブルを一緒にリンクするために
<small>OID
</small> を使
1168 <p>ユーザのテーブルのカラムに一意の番号を付けるためには、
1169 <small>OID
</small> ではなく
<small>SERIAL
</small> を使うのが最もよい
1170 でしょう。
<small>SERIAL
</small>の連番は
1つのテーブル内でのみ一意にな
1171 るからで、オーバーフローを起こしにくいと考えられます。
1172 8バイトのシーケンス値を保存するために、
<small>SERIAL8
</small>があり
1175 <p><small>CTID
</small> は、特定の物理ロウをブロックとオフセットの値
1176 で識別するために使われます。
<small>CTID
</small>は、ロウが修正された
1177 り再読込みされたときに変わります。また、物理ロウを差すためにインデッ
1181 <h4 id=
"item4.13">4.13</a>) エラーメッセージ
<i>"ERROR: Memory exhausted in AllocSetAlloc()"</i>が出るのはなぜですか?
</h4>
1183 <p>おそらく、システムの仮想メモリーを全て使い果たしてしまっている可
1184 能性があるか、カーネルがあるリソースについてもつ制限値が低すぎる可能
1185 性があります。サーバを始動する前にこれを試してみてください:
</p>
1192 シェルによって、どちらかひとつが成功するでしょうが、これはプロセスの
1193 データセグメント制限をより高く設定し、たぶんクエリが完結するようにな
1194 るでしょう。このコマンドは現行のプロセスと、このコマンドを走らせた後
1195 に作られる全てのサブプロセスについて適用されます。バックエンドがとて
1196 も多くのデータを返すために
<small>SQL
</small> クライアントで問題が続
1197 いているのであれば、クライアントを開始する前にこれを試してみてくださ
1200 <h4 id=
"item4.14">4.14</a>) どのバージョンの PostgreSQL を走らせているかを調べるにはどうしますか?
<br /></h4>
1202 <p><i>psql
</i> から
<CODE>SELECT version();
</CODE> をタイプします。
</p>
1205 <h4 id=
"item4.15">4.15</a>) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか?
<br /></h4>
1207 <p><i>CURRENT_TIMESTAMP
</i>を使います:
</p>
1209 CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
1213 <h4 id=
"item4.16">4.16</a>)
<i>外部
</i>結合(
<i>outer
</i> join)はどのように実現しますか?
<br /></h4>
1215 <p>PostgreSQL は SQL 標準構文を使う外部結合(アウタージョイン)をサポー
1216 トします。ここに
2つの例題があります。
</p>
1220 FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1225 FROM t1 LEFT OUTER JOIN t2 USING (col);
1228 これらの象徴的なクエリでは 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>結合と呼ばれます。
1231 <h4 id=
"item4.17">4.17</a>) 複数のデータベースを使う問い合わせはどのようにすればできますか?
</h4>
1233 <p>現行のデータベース以外への問い合わせの方法はありません。というの
1234 もPostgreSQLがデータベース仕様のシステムカタログを読み込むためで、そ
1235 こには、たとえそのふりをするだけにしろ、データベースを越えて問い合わ
1238 <p><i>contrib/dblink
</i> はデータベース間(cross-database)の問い合わ
1239 せを関数呼出しにより許します。もちろん、クライアントは同時に接続を別
1240 のデータベースへも張らなくてはならず、結果をクライアント側でマージし
1244 <h4 id=
"item4.18">4.18</a>) 関数から複数のロウまたはカラムを返すにはどうしますか?
</h4>
1246 <p>集合を返す関数(Set Returning Functions):
1247 <a href=
"http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions">
1248 http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions
</a>
1252 <h4 id=
"item4.19">4.19</a>) PL/PgSQL の関数の中で一時テーブルにアクセスするとき、どうして
"relation with OID ##### does not exist" というエラーを受け取るのでしょうか?
</h4>
1254 <p>バージョン
8.3より前の PostgreSQL では、PL/PgSQL は関数スクリプトを
1255 キャッシュしたため、運悪くその副作用がありました。PL/PgSQL 関数が一時
1256 テーブルにアクセスして後でそのテーブルを消して作りした場合に、関数が
1257 もう一度呼び出されたときは、その関数のキャッシュしていた内容がまだ古い
1258 一時テーブルを指し示したままだったからです。
1259 この、解決策として、PL/PgSQLの中で
<small>EXECUTE
</small> を一時テー
1260 ブルへのアクセスのために使います。そうすると、クエリは毎回パースをや
1263 <p>この問題は、 PostgreSQL バージョン
8.3 以降では起きません。
</p>
1266 <h4 id=
"item4.20">4.20</a>) どのようなレプリケーションのソリューションがありますか?
</h4>
1267 <p>「レプリケーション」と一言でいいますが、レプリケーションをする
1268 ための技術はいくつかあり、それぞれ、利点と欠点があります。
</p>
1270 <p>マスタ/スレーブのレプリケーションは、読み/書きのクエリを受け取
1271 るシングルマスタが可能で、スレーブでは 読み/
<small>SELECT
</small>の
1272 問い合わせだけを受け付けることができます。最も人気がある、フリーで利
1273 用できる、マスタ−スレーブのPostgreSQLレプリケーションソリューション
1275 href=
"http://main.slony.info/">
1278 <p>マルチ−マスタのレプリケーションは、読み/書きのクエリを受けと
1279 り、複数のレプリケートさせるコンピュータに送ることができます。この機
1280 能は、サーバ間の変更の同期が必要なため、性能に重大な衝撃を与えます。
1281 <a href=
"http://pgfoundry.org/projects/pgcluster/">PGCluster
</a> は、
1282 このようなソリューションとしてPostgreSQLのためにフリーで利用できるも
1285 <p>この他にも、商用やハードウェア−ベースのレプリケーションソリュー
1286 ションがいろいろなレプリケーションモデルをサポートしています。
</p>
1288 <h3 id=
"item4.21">4.21</a>)テーブルとカラムの名前がクエリーの中で認識されないのはなぜですか?なぜ大文字化(キャピタライズ)は温存されないのですか?
</h3>
1290 <p>名前が認識されない、最も一般的な原因は、テーブルを作成する際に、
1291 テーブルやカラムを囲う二重引用符の使用です。
1292 二重引用符を使うと、テーブルとカラムの名前(識別子といいます)は
<a
1293 href=
"http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS">大文字と小文字の区別
</a>
1294 をして格納されます。したがって、pgAdminのようにテーブル作成のときに
1295 自動的に二重引用符を使うものはクエリの中でそれらの名前を使うときに
1296 二重引用符を付けなくてはならないことを意味します。このため、識別子
1297 を認識させるためには以下のいずれかを心がけます。
1300 <li>テーブルを作成するときに二重引用符で識別子を囲うことを避ける
</li>
1301 <li>識別子には小文字だけを使う
</li>
1302 <li>クエリの中で参照するときは二重引用符で識別子を囲う
</li>
1308 <h2 align=
"center">日本語に関する質問
</h2>
1310 <h3 id=
"item5.1">5.1</a>)日本語がうまく扱えないのはなぜですか?
</h3>
1313 <p><i>createdb -E
</i>コマンドオプションに UTF8 あるいは EUC_JP
1314 のエンコーディングを指定してデータベースを作成するか、次のように
1315 エンコーディングを指定してデータベースを作成してください。
</p>
1317 CREATE DATABASE dbname WITH ENCODING 'UTF8';
1319 CREATE DATABASE dbname WITH ENCODING 'EUC_JP';
1323 <h3 id=
"item5.2">5.2</a>) psql でWindowsからアクセスしたときに、日本語が文字化けするのですが?
</h3>
1325 <p><i>psql
</i>の中でクライアントのエンコーディングを指定してください。
</p>
1327 SET client_encoding TO 'SJIS'
1329 <p>PostgreSQLデータベースのエンコーディングに使える日本語文字コード
1330 は EUC_JP か UTF-
8(UNICODE) であるため、Shift-JIS表示のコマンドプロ
1331 ンプトからは、client_encodingを設定しておかないと、日本語を表示する
1335 <h3 id=
"item5.3">5.3</a>) PostgreSQLで日本語の全文検索はできますか?
</h3>
1337 <p>バージョン
8.3では、
<i>TSearch2
</i>全文検索機能が本体に組み込まれ
1338 ましたが、そのままでは日本語のインデックスを作る事が難しい状況です。
1339 これを解決するために、Takahiro Itagaki氏によって、Mecabという形態素
1340 解析プログラムを利用する日本語全文検索モジュール
<a
1341 href=
"http://textsearch-ja.projects.postgresql.org/index-ja.html">textsearch_ja
</a>
1342 が開発されました。TSearch2対応の製品をわずかに改修することで日本語対
1348 <h4 id=
"item-japanese">「日本語版について」
</h4>
1351 日本語版の製作については以下の通りです。
1354 翻訳者: 桑村 潤 (
<a href=
"mailto:juk at postgresql.jp">Jun KUWAMURA
<juk at postgresql.jp
></a>)
1356 このFAQの和訳の作成にあたり協力をしてくださった方々(敬称は略させていただきます):
1358 田仲 稔(
<a href=
"mailto:Tanaka.Minoru at keiken.co.jp">Minoru TANAKA
<Tanaka.Minoru at keiken.co.jp
></a>)
1359 石井 達夫(
<a href=
"mailto:ishii at sraoss.co.jp">Tatsuo ISHII
<ishii at sraoss.co.jp
></a>)
1360 齊藤 知人(
<a href=
"mailto:tomos at elelab.nsc.co.jp">Tomohito SAITOH
<tomos at elelab.nsc.co.jp
></a>)
1361 馬場 肇(
<a href=
"mailto:baba at kusastro.kyoto-u.ac.jp">Hajime BABA
<baba at kusastro.kyoto-u.ac.jp
></a>)
1362 岡本 一幸(
<a href=
"mailto:kaz-okamoto at hitachi-system.co.jp">Kazuyuki OKAMOTO
<kaz-okamoto at hitachi-system.co.jp
></a>)
1363 小菅 昭一(
<a href=
"mailto:s-kosuge at str.hitachi.co.jp">Shoichi Kosuge
<s-kosuge at str.hitachi.co.jp
></a>)
1364 山下 義之(
<a href=
"mailto:dica at eurus.dti.ne.jp">Yoshiyuki YAMASHITA
<dica at eurus.dti.ne.jp
></a>)
1365 境 真太郎(
<a href=
"mailto:s_sakai at mxn.mesh.ne.jp">Sintaro SAKAI
<s_sakai at mxn.mesh.ne.jp
></a>)
1366 生越 昌己(
<a href=
"mailto:ogochan at zetabits.com">Masami OGOSHI
<ogochan at zetabits.com
></a>)
1367 石川 俊行(
<a href=
"mailto:tosiyuki at gol.com">Toshiyuki ISHIKAWA
<tosiyuki at gol.com
></a>)
1368 本田 茂広(
<a href=
"mailto:fwif0083 at mb.infoweb.ne.jp">Shigehiro HONDA
<fwif0083 at mb.infoweb.ne.jp
></a>)
1369 せせ じゅん(
<a href=
"mailto:sesejun at linet.gr.jp">Jun SESE
<sesejun at linet.gr.jp
></a>)
1370 神谷 英孝(
<a href=
"mailto:hkamiya at catvmics.ne.jp">Hidetaka KAMIYA
<hkamiya at catvmics.ne.jp
></a>)
1371 菅原 敦(
<a href=
"mailto:asugawar at f3.dion.ne.jp">Atsushi SUGAWARA
<asugawar at f3.dion.ne.jp
></a>)
1372 稲葉 香理(
<a href=
"mailto:i-kaori at sraoss.co.jp">Kaori Inaba
<i-kaori at sraoss.co.jp
></a>)
1373 芳賀 靖史(
<a href=
"mailto:yasufumi.haga at nifty.com">Yasufumi Haga
<yasufumi.haga at nifty.com
></a>)
1375 をはじめ、ポストグレスに関する話題豊富な日本語PostgreSQLメーリングリスト、
1376 和訳のきっかけを作ってくれたり、いつもチェックをしてくれる
1377 <a href=
"http://jf.linux.or.jp/">JF(Linux Japanese FAQ)プロジェクト
</a>、FreeBSD ドキュメンテーションプロジェクト
1378 の方々、それから、直接あるいは間接的にかかわってくださるすべてのオープンソース
1379 コミュニティのみなさまに感謝いたします。
1382 この翻訳文書は
<a href=
"http://www.postgresql.org/docs/faq/">本家
"Frequently Asked Questions" </a> のページに
"Japanese FAQ"
1387 href=
"http://www.postgresql.jp/wg/jpugdoc/">http://www.postgresql.jp/wg/jpugdoc/
</a> 「JPUG文書・書籍関連分科会」
1388 <a href=
"http://www.linux.or.jp/JF/JFdocs/INDEX-database.html">http://www.linux.or.jp/JF/JFdocs/INDEX-database.html
</a> 「Linux JFプロジェクト」
<a href=
"http://www.linet.gr.jp/~juk/pgsql/">http://www.linet.gr.jp/~juk/pgsql/
</a> 「PostgreSQL Notes for Japanese」(翻訳者ページ)
1390 なお、この和訳に関するご意見・ご質問は(
<a href=
"mailto:juk at
1391 postgresql.jp">juk at postgresql.jp
</a>)までお寄せください。
1392 (※ メールアドレスの
" at " は適切に直してください。半角の
"@" です。)