mirror of
https://github.com/postgres/postgres.git
synced 2025-05-09 18:21:05 +03:00
1173 lines
51 KiB
HTML
1173 lines
51 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||
<HTML>
|
||
<HEAD>
|
||
<TITLE>PostgreSQL FAQ in Japanese</TITLE>
|
||
</HEAD>
|
||
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#A00000" ALINK="#0000FF">
|
||
<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/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>
|
||
(以下、訳者による注釈を [訳注: と ] とで囲んで記します。)
|
||
[訳注:
|
||
日本語版の製作については、この文書の最後をごらんください。
|
||
|
||
2005年05月18日 桑村 潤
|
||
]
|
||
</pre></small>
|
||
</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>
|
||
|
||
<h4><a name="1.2">1.2</a>) PostgreSQL の著作権はどうなってますか?</h4>
|
||
|
||
<p> PostgreSQL は下記の著作権に従います。</p>
|
||
|
||
<small><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-2005, PostgreSQL国際開発チーム
|
||
部分的著作権 (c) 1994-1996 カリフォルニア大学本校
|
||
|
||
|
||
本ソフトウェアおよびその文書一式は上記の著作権表示と、この文章
|
||
およびこれに続く二つの段落が全ての複製に添付されている限りにおい
|
||
て、使用、複製、修正および配付の許可を、いかなる目的であっても、
|
||
無償でかつ同意書無しに行なえることをここに認めます。
|
||
|
||
カリフォルニア大学は、いかなる当事者にたいしても、利益の壊失を
|
||
含む、直接的、間接的、特別、偶然あるいは必然的にかかわらず生じた
|
||
損害について、たとえカリフォルニア大学がこれらの損害について訴追
|
||
を受けていたとしても、一切の責任を負いません。
|
||
|
||
カリフォルニア大学は、商用目的における暗黙の保証と、特定目的で
|
||
の適合性に関してはもとより、これらに限らず、いかなる保証も放棄す
|
||
ることを明言します。以下に用意されたソフトウェアは「そのまま」を
|
||
基本原理とし、カリフォルニア大学はそれを維持、支援、更新、改良あ
|
||
るいは修正する義務を負いません。
|
||
|
||
[訳注:
|
||
著作権に関する正文は上記の英語による表記です。日本語訳はあくまで
|
||
参考です。
|
||
]
|
||
</pre></small>
|
||
|
||
<h4><a name="1.3">1.3</a>) PostgreSQL の動作環境は?</h4>
|
||
|
||
<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>
|
||
|
||
<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></small>
|
||
|
||
<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.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>
|
||
をごらんください。会員登録も可能となっています。
|
||
|
||
日本語のIRCチャンネル '#PostgreSQL*jp' も存在します。
|
||
</pre></small>
|
||
|
||
<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>
|
||
|
||
<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.7">1.7</a>) 最新版はどれですか</h4>
|
||
|
||
<p>PostgreSQL の最新版はバージョン 8.0.3 です。</p>
|
||
<p>我々は、1年毎にメジャーリリースを行ない、数ヵ月ごとのマイナーリリー
|
||
スをを計画しています。</p>
|
||
|
||
|
||
<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>
|
||
[訳注:
|
||
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></small>
|
||
|
||
|
||
<p>オンラインで参照できる PostgreSQL の本も2冊あります。<a href=
|
||
"http://www.PostgreSQL.org/docs/awbook.html">
|
||
http://www.PostgreSQL.org/docs/awbook.html</a>
|
||
|
||
<small><pre>
|
||
[訳注:
|
||
JPUG<a href="http://www.PostgreSQL.jp/wg/psqltrans/">「PostgreSQL Book翻訳分科会」
|
||
</a>で翻訳され、ピアソンから<a href="http://www.seshop.com/detail.asp?pid=2587">
|
||
「はじめてのPostgreSQL」</a>として出版されました。
|
||
]
|
||
</pre></small>
|
||
|
||
および、 <a href=
|
||
"http://www.commandprompt.com/ppbook/">
|
||
http://www.commandprompt.com/ppbook/</a>です。
|
||
|
||
<small><pre>
|
||
[訳注:
|
||
邦訳は<a href="http://www.oreilly.co.jp/books/4873111021/">「実践 PostgreSQL」
|
||
</a>がオライリーから出版されています。
|
||
]
|
||
</pre></small>
|
||
|
||
購入可能な書籍の目録は、<a href=
|
||
"http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</a>
|
||
にあります。
|
||
|
||
PostgreSQL 技術情報記事も、<a href=
|
||
"http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</a>
|
||
にあります。</p>
|
||
|
||
<small><pre>
|
||
[訳注:
|
||
日本語の書籍等についてはは、日本PostgreSQLユーザ会の、<A
|
||
href="http://www.postgresql.jp/PostgreSQL/references.html">http://www.postgresql.jp/PostgreSQL/references.html</a>
|
||
もごらんください。
|
||
]
|
||
</pre></small>
|
||
</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>
|
||
|
||
<h4><a name="1.10">1.10</a>) <small>SQL</small> はどうすれば学べますか?</h4>
|
||
|
||
<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>です。
|
||
|
||
<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>
|
||
|
||
|
||
<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>
|
||
<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> 処理が複雑な場合、多くの人は Perl インターフェイスと CGI.pm か
|
||
mod_perl を使います。 </p>
|
||
|
||
|
||
<h4><a name="2.3">2.3</a>) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか?</h4>
|
||
|
||
|
||
<p>もちろん、あります。
|
||
詳細は、<a href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a>
|
||
をごらんください。</p>
|
||
|
||
|
||
<hr />
|
||
|
||
<h2 align="center">管理上の質問</h2>
|
||
|
||
<h4><a name="3.1">3.1</a>) どのようにすれば <i>/usr/local/pgsql</i> 以外の場所にインストールできますか?</h4>
|
||
|
||
<p> 簡単な方法は、 <i>configure</i> を走らせるときに --prefix オプショ
|
||
ンを指定することです。 </p>
|
||
|
||
|
||
<h4><a name="3.2">3.2</a>) 他のホストからの接続はどのように制御しますか?</h4>
|
||
|
||
<p>既定値では、PostgreSQL は Unix ドメインソケット、または、TCP/IP接
|
||
続のローカルマシンからの接続しか許しません。postgresql.conf の中の
|
||
listen_addresses を修正し、<b>かつ</b>、<i>$PGDATA/pg_hba.conf</i>
|
||
ファイルを適切に直して、ホスト主導型認証を有効にしないかぎりは、他
|
||
のマシンからは接続できないでしょう。</p>
|
||
|
||
|
||
<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="4.2">4.2</a>) 定義されたテーブル、インデックス、データベース、および、ユーザをどのようにして見つけ出しますか?<i>psql</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><i>pg_</i> で始まるシステムテーブルでもこれらを記述することができ
|
||
ます。</p>
|
||
|
||
<p><i>psql -l</i>を使うと全てのデータベースをリスとします。</p>
|
||
|
||
<p>それと、<i>pgsql/src/tutorial/syscat.source</i> を試してみてくだ
|
||
さい。そこには、データベースのシステムテーブルから情報を得るために必
|
||
要な <small>SELECT</small> 文が沢山あります。</p>
|
||
|
||
|
||
<h4><a name="4.3">4.3</a>) カラムのデータ型を変更するにはどうしますか?</h4>
|
||
|
||
<p>カラムのデータ型の変更は 8.0 以降では、
|
||
<small>ALTER TABLE ALTER COLUMN TYPE</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>これを行なったときは、抹消された行が使っているディスク空間を回収
|
||
するために<i>VACUUM FULL tab</i>をしたほうが良いかもしれません。</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>
|
||
|
||
<p> もちろん、これらは実際は無制限ではなく、ディスク容量とメモリーや
|
||
スワップスペースの大きさにより制限されます。性能はこれらの値がことの
|
||
ほか大きな時に煽りを受けます。</p>
|
||
|
||
<p> 最大テーブルサイズの32TBはオペレーティングシステムによる巨大ファ
|
||
イルのサポートは必要としません。巨大なテーブルは複数の1GBのファイル
|
||
に分けて保存されますので、ファイルシステムの制限は重要ではありません。
|
||
</p>
|
||
|
||
<p> デフォルトのブロックサイズを32kにすることで、最大テーブルサイズ
|
||
と最大カラム数とを4倍にすることができます。</p>
|
||
|
||
|
||
<h4><a name="4.5">4.5</a>) 一般的なテキストファイルのデータを保存するには、データベースのディスク容量はどのくらい必要です?</h4>
|
||
|
||
<p>普通のテキストファイルを PostgreSQL のデータベースに保存するには、
|
||
最大で約5倍のディスク容量を必要とします。</p>
|
||
|
||
|
||
<p> 例題として、各行に整数とテキスト記述を持つ 100,000行のファイルを
|
||
考えてみましょう。テキストの文字列の平均長さを20バイトと仮定すると、
|
||
フラットファイルの大きさは約2.8MB です。このデータを含む PostgreSQL
|
||
データベースファイルの大きさは次のように約6.4MBと見積もることができ
|
||
ます:
|
||
|
||
<pre>
|
||
32 bytes: 各ロウのヘッダ(概算)
|
||
24 bytes: 整数(int)フィールドとテキスト(text)フィールド
|
||
+ 4 bytes: ページ上のタップルへのポインタ
|
||
----------------------------------------
|
||
60 bytes per row
|
||
|
||
PostgreSQL のデータページサイズは 8192バイト(8KB)なので:
|
||
|
||
8192 bytes per page
|
||
------------------- = 136 rows per database page (切り捨て)
|
||
60 bytes per row
|
||
|
||
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.6">4.6</a>) クエリが遅いのはなぜでしょう? なぜ、インデックスが使われないのでしょうか?</h4>
|
||
|
||
<p>インデックスは、すべてのクエリで使われるわけではありません。テー
|
||
ブルが最小サイズより大きく、クエリでそのわずかなパーセンテージのロウ
|
||
を選択する時だけ、インデックスは使われます。これはインデックススキャ
|
||
ンにより起こされるランダムなディスクアクセスは、テーブルをストレート
|
||
に読む順次走査よりも遅くなることがあるからです。 </p>
|
||
|
||
<p>インデックスを使うかを決定するために、PostgreSQL はテーブルについ
|
||
ての統計情報を持たなければなりません。この統計情報は、
|
||
<small>VACUUMANALYZE</small>または、単に <small>ANALYZE</small> を使っ
|
||
て収集することができます。統計情報を使ってオブティマイザはテーブルの
|
||
中にあるロウ数を知り、インデックスを使うべきかの決定をより正しくでき
|
||
ます。統計情報は最適な結合順や結合方法を決める上でも貴重なものもあり
|
||
ます。統計情報の収集は、テーブルの内容がかわると毎に繰返しなされるべ
|
||
きです。</p>
|
||
|
||
<p> インデックスは、通常 <small>ORDER BY</small> や結合を行なうため
|
||
には使われません。順次スキャンに続く明示的ソートは、巨大なテーブルの
|
||
インデックススキャンよりも普通は高速です。</p>
|
||
|
||
しかし、<small>ORDER BY</small>と組み合わされた<small>LIMIT</small>
|
||
は、テーブルの小さな部分を返すためにたびたびインデックスを使うでしょ
|
||
う。実際、MAX() や MIN() がインデックスを使わないとしても、このよう
|
||
な値をORDER BY と LIMIT を使ってインデックスを使って取り出すことが可
|
||
能です:
|
||
|
||
<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> のようなワイルドカード演算
|
||
子は特別な環境でしか使えません:
|
||
<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>標準インデックスでは使われず、しかしながら、もし、式インデックス
|
||
を作ったならそれが使われるでしょう。</p>
|
||
|
||
<pre>
|
||
CREATE INDEX tabindex ON tab (lower(col));
|
||
</pre>
|
||
|
||
|
||
<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>
|
||
|
||
<pre>
|
||
SELECT *
|
||
FROM tab
|
||
WHERE col IS NULL;
|
||
</pre>
|
||
|
||
<p><small>NULL</small>状態でソートするには、<small>IS NULL</small> と
|
||
<small>IS NOT NULL</small> の修飾子を <small>ORDER BY</small> 句の中
|
||
で使ってみます。<i>true</i> のものは <i>false</i> のものよりも高い値
|
||
として並べられますので、次の例では NULL の記載が結果リストの上部に置
|
||
かれます。
|
||
|
||
<pre>
|
||
SELECT *
|
||
FROM tab
|
||
ORDER BY (col IS NOT NULL)
|
||
</pre>
|
||
|
||
|
||
<h4><a name="4.10">4.10</a>) いろいろな文字型のそれぞれの違いは何ですか?
|
||
</h4>
|
||
|
||
<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> 内部名にお目にかかるのは、システム・カタログを調べるときや、エラー
|
||
メッセージを受け取るときです。</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.11.1">4.11.1</a>) 通番(serial)/自動増分フィールドはどのようにつくりますか?</h4>
|
||
|
||
<p> PostgreSQL は <small>SERIAL</small> データ型をサポートします。カ
|
||
ラム上にシーケンスを自動作成します。たとえば、</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> をごらんください。
|
||
|
||
|
||
<h4><a name="4.11.2">4.11.2</a>) <small>SERIAL</small>データ型に挿入される値は、どうすれば得られますか?</h4>
|
||
|
||
<p>ひとつの方法は、<i>nextval()</i> 関数を使ってその値を挿入する<i>
|
||
前(before)に</i> SEQUENCE オブジェクトから次の <small>SERIAL</small>
|
||
値を取り出し、それから実際に挿入をすることです。<a
|
||
href="#4.11.1">4.11.1</a> のテーブルの例を使うとすると、疑似言語では
|
||
このようになります。</p>
|
||
|
||
<pre>
|
||
new_id = execute("SELECT nextval('person_id_seq')");
|
||
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
|
||
</pre>
|
||
|
||
そうして、<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>あるいは、与えられた<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>
|
||
|
||
|
||
<h4><a name="4.11.3">4.11.3</a>) <i>currval()</i> は他のユーザとの競合状態に陥ることはないですか?</h4>
|
||
|
||
<p>それはありません。<i>currval()</i> は、すべてのユーザではありませ
|
||
んが、読者のセッションに与えられた現在の値を返します。 </p>
|
||
|
||
|
||
<h4><a name="4.11.4">4.11.4</a>) トランザクションが中断したときにもういちどシーケンス番号が使われないのはなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか?</h4>
|
||
|
||
<p>同時性を改善するために、実行中のトランザクションに、必要に応じてト
|
||
ランザクションが終了するまでロックされないようシーケンス値を与えてい
|
||
ます。このためトランザクションが中断されると番号割り当てにギャップを
|
||
生じます。</p>
|
||
|
||
|
||
<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> を使
|
||
います。
|
||
|
||
<p>ユーザのテーブルのカラムに一意の番号を付けるためには、
|
||
O<small>ID</small> ではなく <small>SERIAL</small> を使うのが最もよい
|
||
でしょう。<small>SERIAL</small>の連番は1つのテーブル内でのみ一意にな
|
||
るからで、オーバーフローを起こしにくいと考えられます。
|
||
8バイトのシーケンス値を保存するために、<small>SERIAL8</small>があり
|
||
ます。</p>
|
||
|
||
<p>C<small>TID</small> は、特定の物理ロウをブロックとオフセットの値
|
||
で識別するために使われます。C<small>TID</small>は、ロウが修正された
|
||
り再読込みされたときに変わります。また、物理ロウを差すためにインデッ
|
||
クスの記載に使われます。</p>
|
||
|
||
|
||
<h4><a name="4.13">4.13</a>) エラーメッセージ <i>"ERROR: Memory exhausted in AllocSetAlloc()"</i>が出るのはなぜですか?</h4>
|
||
|
||
<p>おそらく、システムの仮想メモリーを全て使い果たしてしまっている可
|
||
能性があるか、カーネルがあるリソースについてもつ制限値が低すぎる可能
|
||
性があります。<i>postmaster</i> を始動する前にこれを試してみてください:</p>
|
||
|
||
<pre>
|
||
ulimit -d 262144
|
||
limit datasize 256m
|
||
</pre>
|
||
|
||
シェルによって、どちらかひとつが成功するでしょうが、これはプロセスの
|
||
データセグメント制限をより高く設定し、たぶんクエリが完結するようにな
|
||
るでしょう。このコマンドは現行のプロセスと、このコマンドを走らせた後
|
||
に作られる全てのサブプロセスについて適用されます。バックエンドがとて
|
||
も多くのデータを返すために<small>SQL</small> クライアントで問題が続
|
||
いているのであれば、クライアントを開始する前にこれを試してみてくださ
|
||
い。
|
||
|
||
<h4><a name="4.14">4.14</a>) どのバージョンの PostgreSQL を走らせているかを調べるにはどうしますか?<br /></h4>
|
||
|
||
<p><i>psql</i> から <CODE>SELECT version();</CODE> をタイプします。</p>
|
||
|
||
|
||
<h4><a name="4.15">4.15</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.16">4.16</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>
|
||
あるいは
|
||
<pre>
|
||
SELECT *
|
||
FROM t1 LEFT OUTER JOIN t2 USING (col);
|
||
</pre>
|
||
|
||
これらの象徴的なクエリでは 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>結合と呼ばれます。
|
||
|
||
|
||
<h4><a name="4.17">4.17</a>) 複数のデータベースを使う問い合わせはどのようにすればできますか?</h4>
|
||
|
||
<p>現行のデータベース以外への問い合わせの方法はありません。というの
|
||
もPostgreSQLがデータベース仕様のシステムカタログを読み込むためで、そ
|
||
こには、たとえそのふりをするだけにしろ、データベースを越えて問い合わ
|
||
せをするすべがありません。 </p>
|
||
|
||
<p><i>contrib/dblink</i> はデータベース間(cross-database)の問い合わ
|
||
せを関数呼出しにより許します。もちろん、クライアントは同時に接続を別
|
||
のデータベースへも張らなくてはならず、結果をクライアント側でマージし
|
||
なくてはなりません。</p>
|
||
|
||
|
||
<h4><a name="4.18">4.18</a>) 関数から複数のロウまたはカラムを返すにはどうしますか?</h4>
|
||
|
||
<p>集合を返す関数(Set Returning Functions):
|
||
<a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
|
||
http://techdocs.postgresql.org/guides/SetReturningFunctions</a>
|
||
を使うと簡単です</p>。
|
||
|
||
|
||
<h4><a name="4.19">4.19</a>) PL/PgSQL の関数の中で一時テーブルにアクセスするとき、どうして "relation with OID ##### does not exist" というエラーを受け取るのでしょうか?</h4>
|
||
|
||
<p>PL/PgSQL は関数スクリプトをキャッシュし、不幸にもその副作用で、
|
||
PL/PgSQL関数が一時テーブルにアクセスする場合、後でそのテーブルを消し
|
||
て作りなおされ、関数がもう一度呼び出されると、その関数はキャッシュし
|
||
ている関数の内容はまだ古い一時テーブルを差し示したままだからです。
|
||
この、解決策として、PL/PgSQLの中で <small>EXECUTE</small> を一時テー
|
||
ブルへのアクセスのために使います。そうすると、クエリは毎回パースをや
|
||
り直しされるようになります。</p>
|
||
|
||
<h4><a name="4.20">4.20</a>) どのようなレプリケーションのソリューションがありますか?</h4>
|
||
<p>「レプリケーション」と一言で言いますすが、レプリケーションをする
|
||
ための技術はいくつかあり、それぞれ、利点と欠点があります。</p>
|
||
|
||
<p>マスタ/スレーブのレプリケーションは、読み/書きのクエリを受け取
|
||
るシングルマスタが可能で、スレーブでは 読み/<small>SELECT</small>の
|
||
問い合わせだけを受け付けることができます。最も人気がある、フリーで利
|
||
用できる、マスタ-スレーブのPosrgreSQLレプリケーションソリューション
|
||
は、<a
|
||
href="http://gborg.postgresql.org/project/slony1/projdisplay.php">
|
||
Slony-I</a> です。</p>
|
||
|
||
<p>マルチ-マスタのレプリケーションは、読み/書きのクエリを受けと
|
||
り、複数のレプリケートさせるコンピュータに送ることができます。この機
|
||
能は、サーバ間の変更の同期が必要なため、性能に重大な衝撃を与えます。
|
||
<a href="http://pgfoundry.org/projects/pgcluster/">Pgcluster</a> は、
|
||
このようなソリューションとしてPosrgreSQLのためにフリーで利用できるも
|
||
のとして、最も人気があります。</p>
|
||
|
||
<p>この他にも、商用やハードウェア-ベースのレプリケーションソリュー
|
||
ションがいろいろなレプリケーションモデルをサポートしています。</p>
|
||
|
||
<hr />
|
||
<small><pre>
|
||
[訳注:
|
||
日本語版の製作については以下の通りです。
|
||
|
||
最終更新日: 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://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></small>
|
||
</p>
|
||
|
||
</div>
|
||
|
||
</BODY>
|
||
</HTML>
|