postgresql/doc/FAQ_japanese

1219 lines
62 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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">
<H1>
PostgreSQL(ポストグレス・キュー・エル)についてよくある質問(FAQ)</H1>
<P>
原文最終更新日: Tue Oct 17 00:21:20 EDT 2000
(ファイル日付は 03/02/2001)
<P>
現在の維持管理者: Bruce Momjian (<A
HREF="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR><P>
<P>
この文書の最新版は
<A HREF="http://www.PostgreSQL.org/">http://www.PostgreSQL.org/</A>
で見ることができます。
<P>
プラットホームに特有の質問については:<A
HREF="http://www.PostgreSQL.org/docs/">http://www.PostgreSQL.org/users-lounge/docs/faq.html</A>
<BR>に回答があります。
<P>
<P>
<small><PRE>
[訳注:
(以下、訳者による注釈を [訳注: と ] とで囲んで記します。)
http://www.PostgreSQL.org/ にアクセスすると http://postgresql.nucba.ac.jp/
にリダイレクトされ、"Not Found" になってしまうことがあります。その場合は、
<A HREF="http://www.PostgreSQL.org/index.html">http://www.PostgreSQL.org/index.html</A>
にアクセスしてみてください。
日本語版については以下の通りです。
最終更新日: 2001年03月03日
訳者: 桑村 潤 (<A HREF="mailto:juk@jp.postgresql.org">Jun Kuwamura &lt;juk@jp.postgresql.org&gt;</A>)
このFAQの和訳の作成に協力をしてくださった以下の方々をはじめ、
田仲 稔さん(<A HREF="mailto:Tanaka.Minoru@keiken.co.jp">Minoru Tanaka &lt;Tanaka.Minoru@keiken.co.jp&gt;</A>)
石井 達夫さん(<A HREF="mailto:t-ishii@sra.co.jp">Tatsuo Ishii &lt;t-ishii@sra.co.jp&gt;</A>)
齊藤 知人さん(<A HREF="mailto:tomos@elelab.nsc.co.jp">Tomohito Saitoh &lt;tomos@elelab.nsc.co.jp&gt;</A>)
馬場 肇さん(<A HREF="mailto:baba@kusastro.kyoto-u.ac.jp">Hajime Baba &lt;baba@kusastro.kyoto-u.ac.jp&gt;</A>)
岡本 一幸さん(<A HREF="mailto:kokamoto@itg.hitachi.co.jp">Kazuyuki Okamoto &lt;kokamoto@itg.hitachi.co.jp&gt;</A>)
小菅 昭一さん(<A HREF="mailto:s-kosuge@str.hitachi.co.jp">Shoichi Kosuge &lt;s-kosuge@str.hitachi.co.jp&gt;</A>)
山下 義之さん(<A HREF="mailto:dica@eurus.dti.ne.jp">Yoshiyuki Yamashita &lt;dica@eurus.dti.ne.jp&gt;</A>)
境 真太郎さん(<A HREF="mailto:s_sakai@mxn.mesh.ne.jp">Sintaro Sakai &lt;s_sakai@mxn.mesh.ne.jp&gt;</A>)
生越 昌己さん(<A HREF="mailto:ogochan@zetabits.com">Masami Ogoshi &lt;ogochan@zetabits.com&gt;</A>)
石川 俊行さん(<A HREF="mailto:tosiyuki@gol.com">Toshiyuki Ishikawa &lt;tosiyuki@gol.com&gt;</A>)
本田 茂広さん(<A HREF="mailto:fwif0083@mb.infoweb.ne.jp">Shigehiro Honda &lt;fwif0083@mb.infoweb.ne.jp&gt;</A>)
ポストグレスに関する話題豊富な<A HREF="http://www.sra.co.jp/people/t-ishii/PostgreSQL/ML/info.html">日本語ポストグレス・メーリングリスト</A>、
和訳のきっかけを作ってくれた <A HREF="http://jf.linux.or.jp/">JF</A>(Linux Japanese FAQ Mailing List)プロジェクト、
その他、直接あるいは間接的にかかわっているすべてのオープンソース
コミュニティーの皆さんに感謝します。
日本語版のこの文書は
<A HREF="http://www.jp.postgresql.org/">http://www.jp.postgresql.org/</A>
<A HREF="http://www.rccm.co.jp/~juk/pgsql/">http://www.rccm.co.jp/~juk/pgsql/</A>
<A HREF="http://www.sra.co.jp/people/t-ishii/PostgreSQL/">http://www.sra.co.jp/people/t-ishii/PostgreSQL/</A>
<A HREF="http://www.linux.or.jp/JF/">http://www.linux.or.jp/JF/</A>
からもたどれます。
なお、この和訳に関するご意見は(<A HREF="mailto:juk@jp.postgresql.org">juk@jp.postgresql.org</A>)までお寄せ下さい。
]
</PRE></small>
<P>
<HR>
<P>
<H2><CENTER> 一般的な質問</CENTER></H2>
<A HREF="#1.1">1.1</A>) PostgreSQLとは何ですか<BR>
<A HREF="#1.2">1.2</A>) PostgreSQLの著作権はどうなってますか<BR>
<A HREF="#1.3">1.3</A>) PostgreSQLの動作するUnixプラットホームは<BR>
<A HREF="#1.4">1.4</A>) Unix以外の移植版で使えるものは<BR>
<A HREF="#1.5">1.5</A>) PostgreSQLはどこから手に入りますか<BR>
<A HREF="#1.6">1.6</A>) サポートはどこで受けられますか?<BR>
<A HREF="#1.7">1.7</A>) 最新版は何ですか<BR>
<A HREF="#1.8">1.8</A>) どのような文書がありますか?<BR>
<A HREF="#1.9">1.9</A>) 既知のバグや無い機能はどうやって見つけますか?<BR>
<A HREF="#1.10">1.10</A>) <font size=-1>SQL</font>はどうすれば学べますか?<BR>
<A HREF="#1.11">1.11</A>) PostgreSQLは西暦2000年問題(Y2K)に対応していますか?<BR>
<A HREF="#1.12">1.12</A>) 開発チームにはどのように参加しますか?<BR>
<A HREF="#1.13">1.13</A>) バグレポートはどのように発信しますか?<BR>
<A HREF="#1.14">1.14</A>) 他の<font size=-1>DBMS</font>のと比べてPostgreSQLはどうなのですか<BR>
<H2><CENTER>ユーザー・クライアントの質問</CENTER></H2>
<A HREF="#2.1">2.1</A>) PostgreSQL の <font size=-1>ODBC</font> ドライバーはありますか?<BR>
<A HREF="#2.2">2.2</A>) PostgreSQL を Web ページと連携させるにはどんなツールがありますか?<BR>
<A HREF="#2.3">2.3</A>) PostgreSQL はグラフィカル・ユーザインターフェースを持ちますか?
リポートジェネレータは? 埋め込み問い合わせ言語インターフェースは?<BR>
<A HREF="#2.4">2.4</A>) PostgreSQL と通信するにはどんな言語が使えますか?<BR>
<H2><CENTER>管理上の質問</CENTER></H2>
<A HREF="#3.1">3.1</A>) どのようにすれば <I>/usr/local/pgsql</I> 以外の場所にインストールできますか?<BR>
<A HREF="#3.2">3.2</A>) postmaster を走らせると、
<I>Bad System Call</I> とかコア・ダンプしたとのメッセージが出ます。なぜですか?<BR>
<A HREF="#3.3">3.3</A>) <I>postmaster</I> を走らせようとすると、
<I>IpcMemoryCreate</I> エラーが出ます。なぜですか?<BR>
<A HREF="#3.4">3.4</A>) <I>postmasterを</I>走らせようとすると、
<I>IpcSemaphoreCreate</I> エラーが出ます。なぜですか?<BR>
<A HREF="#3.5">3.5</A>) 他のホストから自分のPostgreSQLデータベースへのアクセスを防ぐにはどうしますか<BR>
<A HREF="#3.6">3.6</A>) なぜ、他のマシンから自分のデータベースに接続できないのでしょうか?<BR>
<A HREF="#3.7">3.7</A>) より良い性能を得るためには、データベース・エンジンをどのように調整すれば良いですか?<BR>
<A HREF="#3.8">3.8</A>) どのようなデバグ機能が使えますか?<BR>
<A HREF="#3.9">3.9</A>) 接続しようとするときに <I>'Sorry, too many clients'</I> が出ます。なぜですか?<BR>
<A HREF="#3.10">3.10</A>) 自分のデータベース・ディレクトリにある <I>pg_sorttemp.XXX</I> ファイルは何ですか?<BR>
<H2><CENTER>操作上の質問</CENTER></H2>
<A HREF="#4.1">4.1</A>) なぜ、システムはカンマや小数点や日付フォーマットで混乱するのですか?<BR>
<A HREF="#4.2">4.2</A>) バイナリ・カーソルと通常のカーソルとの厳密な違いは何ですか?<BR>
<A HREF="#4.3">4.3</A>) 最初の数行のみを <font size=-1>select</font> するにはどうしますか?<BR>
<A HREF="#4.4">4.4</A>) テーブルやその他の情報のリストを <I>psql</I> で見るにはどうしますか?<BR>
<A HREF="#4.5">4.5</A>) テーブルからの列の削除はどのようにしますか?<BR>
<A HREF="#4.6">4.6</A>) 行、テーブル、データベースの最大サイズは?<BR>
<A HREF="#4.7">4.7</A>) 一般的なテキストファイルからデータを保存するには、
データベースのディスク容量はどのくらい必要ですか?<BR>
<A HREF="#4.8">4.8</A>) データベース内に定義されたテーブルやインデックスをどのように見つけ出しますか?<BR>
<A HREF="#4.9">4.9</A>) 問い合わせが遅いうえ、インデックスを使っている様子がありません。なぜですか?<BR>
<A HREF="#4.10">4.10</A>) 問い合わせオブティマイザがどのように問い合わせを評価するかを見るにはどうしますか?<BR>
<A HREF="#4.11">4.11</A>) R-tree インデックスとは何ですか?<BR>
<A HREF="#4.12">4.12</A>) 遺伝的問い合わせ最適化とは何ですか?<BR>
<A HREF="#4.13">4.13</A>) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現しますか?<BR>
<A HREF="#4.14">4.14</A>) 問い合わせの中で、フィールドが <font size=-1>NULL</font> であることを検出するにはどうしますか?<BR>
<A HREF="#4.15">4.15</A>) 色々な文字型のそれぞれの違いは何ですか?<BR>
<A HREF="#4.16.1">4.16.1</A>) 通番(serial)/自動増分フィールドはどのようにつくりますか?<BR>
<A HREF="#4.16.2">4.16.2</A>) <font size=-1>SERIAL</font>インサートの値はどうすれば得られますか?<BR>
<A HREF="#4.16.3">4.16.3</A>) 他のユーザとの競合状態を避けるためには、<I>currval()</I> と <I>nextval()</I> は使わないほうがよいのでしょうか?<BR>
<A HREF="#4.17">4.17</A>) <font size=-1>OID</font> とは何ですか? <font size=-1>TID</font> とは何ですか?<BR>
<A HREF="#4.18">4.18</A>) PostgreSQL で使われるいくつかの用語の意味は何ですか?<BR>
<A HREF="#4.19">4.19</A>) エラーメッセージ <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>が出るのはなぜですか?<BR>
<A HREF="#4.20">4.20</A>) どのバージョンの PostgreSQL を走らせているのかを調べるにはどうしますか?<BR>
<A HREF="#4.21">4.21</A>) ラージオブジェクトの操作で、<I>invalid large obj descriptor</I>と出ます。なぜですか?<BR>
<A HREF="#4.22">4.22</A>) 現在の時刻がデフォルトとなるような列はどのようにつくりますか?<BR>
<A HREF="#4.23">4.23</A>) なぜ、<font size=-1>IN</font>を使う副問い合わせがとても遅いのですか?<BR>
<A HREF="#4.24">4.24</A>) <i>外部</i>結合(<i>outer</i> join)はどのように実現しますか?<BR>
<H2><CENTER>PostgreSQLの拡張についての質問</CENTER></H2>
<A HREF="#5.1">5.1</A>) 自分で書いたユーザ定義関数を psql の中で実行するとコア・ダンプしてしまうのはなぜですか?<BR>
<A HREF="#5.2">5.2</A>) PostgreSQL 用に書いた粋な新しい型や関数は、どうすれば寄贈できますか?<BR>
<A HREF="#5.3">5.3</A>) タプルを返す C言語の関数はどのように書きますか<BR>
<A HREF="#5.4">5.4</A>) ソース・ファイルを変更しました。再コンパイルしても変化が見られないのはなぜですか?<BR>
<P>
<HR>
<H2><CENTER>一般的な質問</CENTER></H2>
<P>
<H4><A NAME="1.1">1.1</A>) PostgreSQL とは何ですか?</H4>
<P>PostgreSQL は POSTGRES データベース管理システムの改良版で、次世代 <font size=-1>DBMS</font> 研究用のプロトタイプです。PostgreSQL は POSTGRES の強力なデータ・モデルと豊富なデータ・タイプ(型)を内包しつつ、POSTGRES で使われた PostQuel 問い合わせ言語を、拡張した <font size=-1>SQL</font> のサブセットに置き換えています。PostgreSQL は無料で完全なソースを利用できます。
<P>PostgreSQL のすべての開発は、PostgreSQL 開発メーリングリストに参加しているインターネット上の開発者チームで行なっています。現在の座長は Marc G. Fournier ( <A HREF="mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A> )です。(以下に参加の仕方があります。)現在、このチームが PostgreSQL開発のすべての 面倒を見ます。
<P>PostgreSQL 1.01 の著者は Andrew Yu と Jolly Chen でした。その他大勢の人々がこのコードの移植、テスト、デバグ、および、改良に貢献しました。PostgreSQL の派生元コードである POSTGRES はカリフォルニア大学バークレイ校において、 Michael Stonebraker 教授の指揮のもと、多くの学生、卒業生、職業プログラマたちの努力により作られました。
<P>バークレイにおけるこのソフトウェアのもとの名前は Postgres でした。<FONT SIZE=-1>SQL</FONT> の機能が追加された 1995 年にその名前は Postgres95 に変更されました。1996 年の終りにその名前は PostgreSQL に変更されました。
<I>Post-Gres-Q-L.</I>(ポスト - グレス - キュー - エル) と発音します。
<P>
<H4><A NAME="1.2">1.2</A>) PostgreSQL の著作権はどうなってますか?</H4>
<P> PostgreSQL は下記の著作権に従います。
<small><PRE>
[訳注:
正文は英語です。参考として、訳文を併記掲載します。
]
</PRE></small>
<P>
PostgreSQL Data Base Management System<P>
Portions copyright (c) 1996-2000, PostgreSQL Global Development Group
Portions Copyright (c) 1994-6 Regents of the University of California<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>
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>
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-2001, PostgreSQL国際開発チーム
部分著作権 (c) 1994-6 カリフォルニア大学本校
このソフトウェアとその文書を、如何なる目的でも、無料で、使用許諾書無しに、
使用、複写、修正、そして、配布することへの許可を、上記の著作権表示、この段
落、および、これに続く二つの段落が、すべての複写に添付される限りにおいて、
ここにそれを認めます.
たとえカリフォルニア大学が以下のような損害の可能性について言及していた
としても.このソフトウェア及び文書の使用上,直接的・間接的・特別・偶然
もしくは必然的に,生じた失われた利益を含む損害に於いて,いずれの当事者
に対してもカリフォルニア大学は一切の責任を負いません.
カリフォルニア大学は,特定目的のための商用性及び適合性の暗黙の保証を含
む,しかしそれに限定されることのない,いかなる保証も明確に放棄します.
ここにおいて用意されたソフトウェアは「あるがまま」ということを前提とし,
カリフォルニア大学は維持・補助・更新・改良・修正を用意する義務を負いま
せん.
]
</PRE></small>
<P>
<H4><A NAME="1.3">1.3</A>) PostgreSQL の動作環境は?</H4>
<P>著者らは PostgreSQL のコンパイルとテストを次のプラットホーム上で行ないました。(これらのうちのいくつかはコンパイルに gcc が必要です)
<P>一般的に、最近のUnix互換プラットホームならばPostgreSQLをはしらせられるはずです。リリースの時点で実際にテストを行なったことの報告がなされたプラットホームについてはインストール手引書に列挙してあります。
<P>
<H4><A NAME="1.4">1.4</A>) Unix以外の移植版で使えるものは</H4>
<h6>
クライアント</h6>
<P> MS Windows プラットホーム上で、<I>libpq</I> C ライブラリ、psql、それとその他のインターフェースは コンパイル可能で、バイナリーが走ります。この場合、クライアントを MS Windows 上で走らせて、TCP/IP 経由でサポートされている Unix プラットホーム上で走るサーバと通信します。
<P> Win32 <I>libpq</I> ライブラリと psql を作るために、<I>win31.mak</I> が配布に含まれてます。PostgreSQLは <font size=-1>ODBC</font> クライアントとも通信できます。
<h6>
サーバ</h6>
<P> 現在、Cygnus Unix/NT 移植ライブラリの Cygwin を使って、PostgreSQL データベースサーバは Windows NT と Win2k 上で稼働しています。配布に含まれる<I>pgsql/doc/FAQ_MSWIN</I>あるいはウェブサイトにある MS Windows FAQ をご覧下さい。Microsoft の素のプラットホームに移植する計画はありません。<P>
<P>
<H4><A NAME="1.5">1.5</A>) PostgreSQL はどこから手に入りますか?</H4>
<P> PostgreSQL の元の anonymous ftp サイトです:
<UL>
<LI> <A HREF="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A>
</UL>
<P> ミラーサイトについては、我々のメイン Web ページをご覧下さい。
<small><PRE>
[訳注:
以下は日本のミラーサイトです:
Japan: <A HREF="ftp://mirror.nucba.ac.jp/mirror/postgresql/pub/">ftp://mirror.nucba.ac.jp/mirror/postgresql/pub/</A>
Japan: <A HREF="ftp://ring.ip-kyoto.ad.jp/pub/misc/db/postgresql/">ftp://ring.ip-kyoto.ad.jp/pub/misc/db/postgresql/</A>
Japan: <A HREF="ftp://ring.crl.go.jp/pub/misc/db/postgresql/">ftp://ring.crl.go.jp/pub/misc/db/postgresql/</A>
Japan: <A HREF="ftp://ring.saitama-u.ac.jp/pub/misc/db/postgresql/">ftp://ring.saitama-u.ac.jp/pub/misc/db/postgresql/</A>
Japan: <A HREF="ftp://ring.astem.or.jp/pub/misc/db/postgresql/">ftp://ring.astem.or.jp/pub/misc/db/postgresql/</A>
Japan: <A HREF="ftp://ring.exp.fujixerox.co.jp/pub/misc/db/postgresql/">ftp://ring.exp.fujixerox.co.jp/pub/misc/db/postgresql/</A>
Japan: <A HREF="ftp://ring.jah.ne.jp/pub/misc/db/postgresql/">ftp://ring.jah.ne.jp/pub/misc/db/postgresql/</A>
Japan: <A HREF="ftp://ring.etl.go.jp.jp/pub/misc/db/postgresql/">ftp://ring.etl.go.jp.jp/pub/misc/db/postgresql/</A>
Japan: <A HREF="ftp://ring.asahi-net.or.jp/pub/misc/db/postgresql/">ftp://ring.asahi-net.or.jp/pub/misc/db/postgresql/</A>
Japan: <A HREF="ftp://ring.so-net.ne.jp/pub/misc/db/postgresql/">ftp://ring.so-net.ne.jp/pub/misc/db/postgresql/</A>
Japan: <A HREF="ftp://ring.aist.go.jp/pub/misc/db/postgresql/">ftp://ring.aist.go.jp/pub/misc/db/postgresql/</A>
]
</PRE></small>
<P>
<H4><A NAME="1.6">1.6</A>) サポートはどこで受けられますか?</H4>
<P> 主要なメーリング・リストは: <A HREF="mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>です。PostgreSQL に関することであれば議論ができます。このリストへの参加のは、電子メールの本文(Subject 行ではありません)に次の2行を書いて、
<PRE>
subscribe
end
</PRE>
<P> <A HREF="mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A> へ送って下さい。
<P> ダイジェスト版のメーリング・リストもあります。このリストへの参加は "本文"に:
<PRE>
subscribe
end
</PRE>
と書いて <A HREF="mailto:pgsql-general-digest-request@PostgreSQL.org"> pgsql-general-digest-request@PostgreSQL.org</A> へ電子メールを送って下さい。
<P> ダイジェスト版は、メインリストが受信するメッセージ 30k 程度溜る毎にダイジェスト版リストのメンバーに送付されます。
<P> バグのメーリングリストも利用できます。このリストへの参加は "本文"といっしょに:
<A
HREF="mailto:bugs-request@PostgreSQL.org">bugs-request@PostgreSQL.org</A>
へ電子メールを送って下さい。
<P> 開発者の議論のためのメーリングリストも利用できます。このリストへの参加は電子メールの本文に:
<P>
<PRE>
subscribe
end
</PRE>
<P> と書いて、<A HREF="mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A>へ電子メールを送って下さい。
<P> PostgreSQL についてもっと詳しく知りたければ、次の postgreSQL WWWホームページからたどれます
<BLOCKQUOTE>
<A HREF="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A>
</BLOCKQUOTE>
<P>
IRC チャンネルも EFNet にあります。そのチャンネルは <I>#PostgreSQL</I> です。
unix コマンドで<tt>irc -c '#PostgreSQL' "$USER" irc.phoenix.net</tt>
を使います。<P>
<small><PRE>
[訳注:
1999年7月23日、日本PostgreSQLユーザー会(にほん ぽすとぐれす ゆーざー かい)、略称JPUGが設立されました。
JPUG は非営利組織で、PostgreSQLを利用する人達の相互協力の場です。
正会員の会費は無料ですが、会員の積極的な貢献が会の運営を助けています。詳しくは、JPUGのWeb サイト:
<A HREF="http://www.jp.postgresql.org/">http://www.jp.postgresql.org/</A>
をご覧ください。会員登録も可能となっています。
1990年代中ごろより、ポストグレスの日本語メーリング・リストを石井 達夫さんが主催しています。詳細は、
<A HREF="http://www.sra.co.jp/people/t-ishii/PostgreSQL/ML/info.html">http://www.sra.co.jp/people/t-ishii/PostgreSQL/ML/info.html</A>
をご覧下さい。アーカイブを、いわきりさんのpgsql-jp ML検索システム
<A HREF="http://datula.mio.org/~iwakiri/pgsql_jp/">http://datula.mio.org/~iwakiri/pgsql_jp/</A>
で検索することもできます。
]
</PRE></small>
<P>商用サポート会社のリストは<a href="http://www.postgresql.org/users-lounge/commercial-support.html">http://www.postgresql.org/users-lounge/commercial-support.html</a>にあります。
<small><PRE>
[訳注:
日本では、<A HREF="http://osb.sra.co.jp/">SRA Inc. オープンシステム事業部</A> にて商用サポートが行なわれています。
<A HREF="http://www.miraclelinux.co.jp/">ミラクル・リナックス株式会社</A> で "Miracle Linux for PostgreSQL" の販売とサポートが
開始されました。
]
</PRE></small>
<P>
<H4><A NAME="1.7">1.7</A>) 最新版は何ですか</H4>
<P> PostgreSQL の最新版はバージョン 7.0.3 です。
<P>
我々は、4カ月毎にメジャーリリースを行なうことを計画しています。
<P>
<H4><A NAME="1.8">1.8</A>) どのような文書がありますか?</H4>
<P> 配付の中に、いくつかのマニュアルとオンライン・マニュアル(マニュアル・ページ)およびいくつかの小さなテスト例題が含まれます。<I>/doc</I> ディレクトリをご覧下さい。また、オンラインでのマニュアルを、<A
HREF="http://www.PostgreSQL.org/users-lounge/docs/">
http://www.PostgreSQL.org/users-lounge/docs/</A>
でも閲覧できます。
<P> PostgreSQL の本もあります。 <A
HREF="http://www.PostgreSQL.org/docs/awbook.html">
http://www.PostgreSQL.org/docs/awbook.html</A><P>
<small><PRE>
[訳注:
日本ポストグレスユーザー会の<A HREF="http://www.jp.postgresql.org/subcommittee/psqltrans/">PostgreSQL Book翻訳分科会</A>で、
翻訳作業が進行中。
]
</PRE></small>
<P> <I>psql</I> も、型、演算子、関数、集約、その他の情報をお見せする、いくつかの素晴らしい \d コマンドを持ちます。
<P> 我々の Web サイトには、もっと沢山の文書があります。
<P>
<H4><A NAME="1.9">1.9</A>) 既知のバグや無い機能はどうやって見つけますか?
</H4><P>
PostgreSQLは拡張されたSQL-92のサブセットをサポートします。
我々のページの
<A HREF="http://www.PostgreSQL.org/docs/todo.html">
TODO</A> リストに、既知のバグや欠落機能や将来計画についての記述があります。
<P>
<H3><A NAME="1.10">1.10</A>) <font size=-1>SQL</font> はどのように学べば良いですか?</H3>
<P>
<A HREF="http://www.PostgreSQL.org/docs/awbook.html">
http://www.PostgreSQL.org/docs/awbook.html</A>
にあるPostgreSQL本で <font size=-1>SQL</font> を教えています。
<P>
素晴らしい学習書には、
<A HREF="http://w3.one.net/~jhoffman/sqltut.htm">
http://w3.one.net/~jhoffman/sqltut.htm</A> と
<A HREF="http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM.</A><P>
とがあります。その他に、
"Teach Yourself SQL in 21 Days, Second Edition" が、
<A HREF="http://members.tripod.com/er4ebus/sql/index.htm">
http://members.tripod.com/er4ebus/sql/index.htm </A>
にあります。
<P>
多くのユーザに、
<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>
<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>
があります。
堀田倫英氏の「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>
はオンラインで読むことができます。
]
</PRE></small>
<H4><A NAME="1.11">1.11</A>) PostgreSQLは西暦2000年問題(Y2K)に対応していますか?
</H4><P>
対応してます。西暦2000年より後の日付も、紀元前2000年より前の日付も、簡単に扱えます。
<P>
<H4><A NAME="1.12">1.12</A>) 開発チームにはどのように参加しますか?<BR>
</H4><P>
まず最初(1番目)に、最新のソースをダウンロードし、我々の Web サイトか配布に含まれている
PostgreSQL Developersの文書を読みます。
2番目に、<I>pgsql-hackers</I> と <I>pgsql-patches</I> メーリング・リストを購読(subscribe)します。
番目に、高品質のパッチをpgsql-patchesに発信します。
およそ十人ちょっとの人達が、PostgreSQL <font size=-1>CVS</font>アーカイブにコミットする権限を持っています。
そのそれぞれの人達が沢山の高品質なパッチを発信するので、現在コミッターとなっている人達はそれに追い付くのが大変ですが、我々は彼らがコミットしたパッチは高品質であると確信しています。
<P>
<H4><A NAME="1.13">1.13</A>) バグレポートはどのように発信しますか?
</H4>
<P>"bug-template" ファイルの項目を満たして、<A HREF="mailto:pgsql-bugs@PostgreSQL.org">pgsql-bugs@PostgreSQL.org</A>に送って下さい。
<P> その前に <A HREF="http://postgreSQL.org">http://postgreSQL.org</A>にある最新の FAQ をチェックして下さい。
<P> それと同時に ftp サイト <A HREF="ftp://ftp.postgreSQL.org/pub/">ftp://ftp.postgreSQL.org/pub/</A>で、もっと新しいバージョンの PostgreSQL あるいはパッチをさがしてみて下さい。
<P>
<H4><A NAME="1.14">1.14</A>) 他の<font size=-1>DBMS</font>のと比べてPostgreSQLはどうなのですか
</H4><P>
ソフトウェアを計る方法にはいくつかあります。機能と性能と信頼性とサポートと価格です。
<DL>
<DT> <B>機能(Features)</B>
<DD>
PostgreSQLは、トランザクション、副問い合わせやトリガーやビューや外部キー
参照や、そして、洗練されたロック機構など、大規模商用<font size=-1>DBMS</font>が持つ機能をほ
とんど持っています。PostgreSQLは、さらに、ユーザ定義型や継承やマルチ-
バージョン・コンテンションなど、商用<font size=-1>DBMS</font>が持ち合わせない機能をいくつか
持ち合わせています。外部キーの参照整合性(foreign key referential
integrity)やロック・コンテンションを減らすための外部競合状態制御
(outer concurrency control)は持ち合わせません。
<BR><BR>
<DT> <B>性能(Performance)</B>
<DD>
PostgreSQLは二つのモードで走ります。普通の<I>fsync</I>モードは、OSがク
ラッシュしたり、数秒後に電源が落ちたりしたときのために、トランザクショ
ンが完了する毎にディスクに書き込み、すべてのデータをディスクに保存しま
す。このモードでは、ほとんどの商用データベースよりも遅くなりますが、そ
の部分的な理由として、商用のデータベースの中にはこのように保守的なディ
スク書き込みをデフォルトとしているものが少ないということもあります。
<I>no-fsync</I>モードで、普通、PostgreSQLは商用データベースよりも速く
なりますが、しかしながら、OSのクラッシュでデータが破壊されるかもしれま
せん。我々は、その中間モードを開発中で、それがうまくゆくと、完全fsync
モードほど性能を犠牲にすることなく、OSがクラッシュする30秒前までのデー
タ整合性を保てるようになります。
<BR><BR>
MySQLなどの特化型データベース・システムにくらべて、PostgreSQLの挿入
更新が遅いのは、トランザクションによるオーバーヘッドがあるからです。も
ちろん、MySQLには上記の<I>Features</I>の節に示すような機能はまったくあ
りません。我々は、PostgreSQLに柔軟性と機能性を組み込みながらも、絶えず、
プロファイラーに掛けたりソースコードを解析したりして、性能の改善を続け
ています。PostgreSQL と MySQL とを比較している面白い Web ページが
<a href="http://openacs.org/why-not-mysql.html">
http://openacs.org/why-not-mysql.html</a>
にあります。
<BR><BR>
PostgreSQLは、Unixプロセスを起動することによりユーザー接続を操作します。
複数のバックエンド・プロセスが情報をロックしながらデータ・バッファーを
共有します。マルチCPUでは、簡単に複数のバックエンドをそれぞれのCPUで走
らせることができます。<BR><BR>
<DT> <B>信頼性(Reliability)</B>
<DD>
我々は、<font size=-1>DBMS</font>の信頼性が高くなくてはその価値が無いことを理解してます。十
分テストして、安定したコードをバグを最小にしてからリリースするように勤
めてます。それぞれのリリースは少なくとも1カ月以上のベータ・テストを行
ない、これまでのリリースの履歴が、製品版として安定した堅固なリリースで
あることを物語っています。この分野では、他のデータベースと比べても遜色
がないことに自信を持っています。
<DT> <B>サポート(Support)</B>
<DD>
我々のメーリングリストは、遭遇するどんな問題についても解決を助けてくれ
る、開発者やユーザの膨大なグループを擁しています。我々は問題の解決を保
証することはできませんが、商用データベースであっても常に解決されるわけ
ではありません。開発者達、ユーザ・コミュニティ、マニュアル類、それに、
ソースコードなどに直接アクセスできることよって、PostgreSQLのサポートは、
他の<font size=-1>DBMS</font>サポートよりも優れたものとなっています。御要望に答えて、事柄毎
の商用サポートもありますサポートFAQ項目をご覧下さい
<DT> <B>価格(Price)</B>
<DD>
PostgreSQLの使用は、商用でも非商用でも、すべて無料です。上記に示してあ
るBSDスタイルの使用許諾に外れない限り、PostgreSQLのコードを制限無しで
商品に組み込むことができます。
<BR><BR>
</DL>
<P>
<HR>
<H2><CENTER>ユーザー・クライアントの質問</CENTER></H2>
<P>
<H4><A NAME="2.1">2.1</A>) PostgreSQL のための <font size=-1>ODBC</font> ドライバーはありますか?
</H4>
<P> PsqlODBC と OpenLink <font size=-1>ODBC</font> の二つの <font size=-1>ODBC</font> ドライバーが利用可能です。
<P> PsqlODBC は PostgreSQL の配布に含まれています。それについてのさらに詳細な情報は
<A HREF="ftp://ftp.PostgreSQL.org/pub/odbc/">ftp://ftp.PostgreSQL.org/pub/odbc/</A>
から取得できます。<P>
<small><PRE>
[訳注:
PsqlODBC の 日本語パッチを片岡裕生さん(kataoka@interwiz.koganei.tokyo.jp)が作られました:
●<A HREF="http://www.interwiz.koganei.tokyo.jp/software/PsqlODBC/index.html">http://www.interwiz.koganei.tokyo.jp/software/PsqlODBC/index.html</A>
]
</PRE></small>
<P> OpenLink <font size=-1>ODBC</font> は <A HREF="http://www.openlinksw.com/">http://www.openlinksw.com/</A>から入手できます。標準的な <font size=-1>ODBC</font> クライアント・ソフトウェアで使えますので、支援しているすべてのプラットホーム(Win, Mac, Unix, VMS)から PostgreSQL の <font size=-1>ODBC</font> が利用できます。
<P> たぶん彼らは、商用品質のサポートの必要な人々に売っていると思いますが、フリーウェア版はいつでも入手可能のようです。質問は、<A HREF="mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>にお願いします。
<A HREF="http://www.PostgreSQL.org/docs/programmer/odbc.htm">
Programmer's Guide</A>
の <font size=-1>ODBC</font> の章もご覧ください。
<P>
<H4><A NAME="2.2">2.2</A>) PostgreSQL を Web ページと連携させるにはどんなツールがありますか?
</H4>
<P> データベースを裏に持つ Web ページについての素晴らしい紹介が、<BR>
<A HREF="http://www.webtools.com">http://www.webtools.com</A> にあります。
<P><A HREF="http://www.phone.net/home/mwm/hotlist/">http://www.phone.net/home/mwm/hotlist/</A>にも、もう一つあります。
<P> Web への拡張のためには、PHP が卓越したインターフェースとなっています。<A HREF="http://www.php.net">http://www.php.net/</A>にあります。
<small><PRE>
[訳注:
PHPに関する日本語の情報は、2000年4月19日に発足した日本PHPユーザ会のサイト
<A HREF="http://www.php.gr.jp/">http://www.php.gr.jp/</A>
あるいは、廣川 類さんのサイト
<A HREF="http://www.cityfujisawa.ne.jp/~louis/apps/phpfi/index.html">http://www.cityfujisawa.ne.jp/~louis/apps/phpfi/index.html</A>
にかなりまとめられています。
前田 充宏さんにより作られた<A HREF="http://pg.cni.co.jp/">PHP/FIの日本語パッチ</A>が様々な人の手を経てPHP3.0.7に適用されました。
現在はPHPJ-DEVにて、
<A HREF="http://php.jpnnet.com/">http://php.jpnnet.com/</A>
佐藤さんを中心にマルチバイト拡張として作り直され、最新版はPHP-3.0.18に対応しています。
塚田 卓也さんは、PHP4 用の日本語関係の拡張モジュール
<A HREF="ftp://night.fminn.nagano.nagano.jp/php4/">ftp://night.fminn.nagano.nagano.jp/php4/</A>
を用意して下さってます。
本家の方で国際化のMLも立ち上がっています。
]
</PRE></small>
<P> 複雑な場合、多くの人は Perl インターフェースと CGI.pm を使います。
<P> Perl を使った WDB を基にした WWW ゲートウェイは<A HREF="http://www.eol.ists.ca/~dunlop/wdb-p95">http://www.eol.ists.ca/~dunlop/wdb-p95</A>からダウンロードできます。
<small><PRE>
[訳注:
WDB は、Web から DataBase への Perl の Interface です。
wdb-p95 へのリンクは切れてしまっています。おそらく、Perl DBI 経由で DBD::Pg の利用が可能と思われます。
現在、WDBI という名前になっているもの
<A HREF="http://www.egroups.com/list/wdb-users/">http://www.egroups.com/list/wdb-users/</A>
と、WDBの名前のままのもの
<A HREF="http://www.i-con.dk/wdb/">http://www.i-con.dk/wdb/</A>
とがあります。その経緯はよくわかりません。
]
</PRE></small>
<P>
<H4><A NAME="2.3">2.3</A>) PostgreSQL はグラフィカル・ユーザ・インターフェースを持っていますか? レポート・ジェネレータは? 埋め込み問い合わせ言語へのインターフェースは?
</H4>
<P> <I>pgaccess</I> と呼ばれる素晴らしいグラフィカル・ユーザ・インターフェースがあり、この配布と共に出荷されます。<I>Pgaccess</I> にはレポート・ジェネレータもあります。Web ページは<A HREF="http://www.flex.ro/pgaccess">http://www.flex.ro/pgaccess</A>です。
<P> <I>ecpg</I> という C 言語のための埋め込み <font size=-1>SQL</font> 問い合わせ言語インターフェースもあります。
<P>
<H4><A NAME="2.4">2.4</A>) PostgreSQL と通信するにはどんな言語が使えますか?
</H4>
<P>以下のものがあります:
<UL>
<LI>C (libpq)
<LI>C++ (libpq++)
<LI>埋め込みC (ecpg)
<LI>Java (jdbc)
<LI>Perl (perl5)
<LI>ODBC (odbc)
<LI>Python (<A HREF="http://www.druid.net/pygresql/">PyGreSQL</A>)
<LI>TCL (libpgtcl)
<LI>C Easy API (libpgeasy)
<LI>埋め込み<font size=-1>HTML</font> (<A HREF="http://www.php.net">PHP from http://www.php.net</A>)
</UL>
<P>
<small><PRE>
[訳注:
<A HREF="http://www.netlab.co.jp/ruby/jp/">ruby</A>の作者であるまつもと ゆきひろ(matz@ZetaBITS.COM)さんと、まつもと えいじ(ematsu@pfu.co.jp)さんが
ruby の PostgreSQL インターフェースを作りました。現在の維持管理は斉藤 登さんがしています。
<A HREF="http://webclub.kcom.ne.jp/mb/noborus/ruby/">http://webclub.kcom.ne.jp/mb/noborus/ruby/</A>
PgBash は 境田 雅明 さんが作った bash の PostgreSQL インターフェースです。
<A HREF="http://www.psn.co.jp/PostgreSQL/pgbash/">http://www.psn.co.jp/PostgreSQL/pgbash/</A>
Bashコマンドラインでpostgres に問い合わせできます。
]
</PRE></small>
<P>
<P>
<HR>
<H2><CENTER>管理上の質問</CENTER></H2>
<P>
<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>) postmaster を走らせると、<I>Bad System Call</I> とかコア・ダンプしたとのメッセージが出ます。なぜですか?
</H4>
<P> さまざまな問題が考えられますが、まず最初にあなたのカーネルに System V IPC の拡張がインストールされているかを確認して見てください。PostgreSQL はカーネルによる共有メモリーとセマフォのサポートを必要とします。
<P>
<H4><A NAME="3.3">3.3</A>) <I>postmaster</I> を走らせようとすると、<I>IpcMemoryCreate</I> エラーが出ます。なぜですか?
</H4>
<P> カーネルが共有メモリーを持つ設定になっていなかったか、でなければ、カーネルに対して使える共有メモリーの大きさを大きく設定する必要があります。具体的な大きさは、使っているアーキテクチャと<I>postmaster</I> を走らせるときに設定するバッファの数とバックエンドプロセスに依存します。ほとんどのシステムでは、既定値のバッファサイズのままで、少なくとも約1MBが必要です。
<P>
<H4><A NAME="3.4">3.4</A>) <I>postmasterを</I>走らせようとすると、<I>IpcSemaphoreCreate</I> エラーが出ます。なぜですか?
</H4>
<P>もしエラーメッセージが<I>IpcSemaphoreCreate: semget failed (No space left on device)</I>であれば、カーネルが十分なセマフォを使えるように構成されていません。Postgresは潜在的なバックエンドプロセス毎に一つのセマフォを必要とします。とりあえずの解決策は<I>postmaster</I>を起動するときに、バックエンドプロセスの数をより少なく制限をすることです。既定値の32より小さな数のパラメータを<I>-N</I>で使います。より恒久的な解決策は、カーネルの<font size=-1>SEMMNS</font> と <font size=-1>SEMMNI</font> パラメータを増やすことです。
<P>もし、エラーメッセージがなにか他のものであれば、カーネルの構成でまったくセマフォのサポートをしていないかもしれません。
<P>
<H4><A NAME="3.5">3.5</A>) 他のホストから自分の PostgreSQL データベースへのアクセスを防ぐにはどうしますか?
</H4>
<P> 既定値では、PostgreSQL は unix ドメインソケットを使うローカルマシンからの接続しか許しません。<I>postmaster</I> 起動に <I>-i</I> フラッグを加え、<I>$PGDATA/pg_hba.conf</I> ファイルを適切に直して、ホスト主導型の認証を使わないかぎりは他のマシンからは接続できないでしょう。これによりTCP/IPの接続が可能になります。
<p>操作不能なセマフォも過度のデータベースアクセス中にクラッシュを引き起こすことがあります。
<P>
<H4><A NAME="3.6">3.6</A>) 他のマシンから自分のデータベースに接続できないのはなぜですか?
</H4>
<P> 既定の設定ではローカルマシンからの unix ドメインのソケット接続しか許しません。TCP/IP 接続を可能にするには postmaster が <I>-i</I> オプションで開始されていて、<I>pgsql/data/pg_hba.conf</I> ファイルに適切なホストの記載が追加されていることを確認してください。
<P>
<H4><A NAME="3.7">3.7</A>) よりよい性能を得るために、どのようにデータベース・エンジンを調整できますか?
</H4>
<P> 確かにインデックスは問い合わせの速度を増します。<font size=-1>EXPLAIN</font>コマンドで PostgreSQL がどのようにあなたの問い合わせを翻訳しているかを見ることができ、そして、どのインデックスが使われているかを見ることができます。
<P>もし <font size=-1>INSERT</font> を多用している場合は、<font size=-1>COPY</font> コマンドを使って大きなバッチ処理でそれを行なうことを検討して下さい。これは、<font size=-1>INSERT</font> を別々に行なうよりもっと高速です。次に、<font size=-1>BEGIN WORK/COMMIT</font> のトランザクション・ブロックの中に無い文は、それら自身がそれぞれのトランザクションに入っていると見なされます。いくつかの文を一つのトランザクション・ブロックの中で行なうことを考えて下さい。これによりトランザクションのオーバーヘッドが減ります。また、大きなデータの変更を行なう際はインデックスを一度外して、作り直すことを考えてみて下さい。
<P> チューニングのオプションがいくつかあります。<I>postmaster</I> を <I>-o -F</I> オプションで起動することによって、<I>fsync()</I> を無効にすることができます。これによって、各トランザクション毎に <I>fsync()</I> でディスクを更新するのを止めさせます。
<P> <I>postmaster</I> <I>-B</I> オプションを使ってバックエンド・プロセスにより使われる共有メモリー・バッファを大きくすることもできます。もし、このパラメータを高くしすぎると、カーネルの共有メモリー空間の制限値を越えてしまっうために <I>postmaster</I> が走らなくなるでしょう。既定値では、それぞれのバッファの大きさは 8K で、バッファ数は 64 です。
<P> バックエンドを <I>-S</I> オプションを使って、それぞれのバックエンド・プロセスが一時的な並べ替えによって使うメモリーの最大サイズを増やすこともできます。 その <I>-S</I> の値はキロバイト単位で、既定値は 512 (すなわち、512K)です。
<P> また、<font size=-1>CLUSTER</font> コマンドを使って、テーブルのデータをインデックスに合わせるためにグループ化することもできます。詳しくは、オンラインマニュアルで <I>CLUSTER</I> を見て下さい。
<P>
<H4><A NAME="3.8">3.8</A>) どのようなデバグ機能が使えますか?</H4>
<P> PostgreSQL は、デバグのために意味のある、状態情報を報告するいくつかの機能を持ちます。
<P> まず、--enable-cassert オプションで <I>configure</I> を走らせます。そうしてコンパイルすることにより、沢山の <I>assert()</I> が、バックエンドの進捗状況を監視し、何か予期せぬことが起きるとプログラムを停止するようになります。
<P> <I>postmaster</I> と <I>postgres</I> の両方でいくつかのデバグ・オプションの利用ができます。まず、次のように <I>postmaster</I> を起動するときはいつでも、標準出力とエラー出力をログ・ファイルに送るようにしてあることを確かめて下さい。
<PRE>
cd /usr/local/pgsql
./bin/postmaster &gt;server.log 2&gt;&1 &
</PRE>
<P> これにより PostgreSQL の最上部のディレクトリに server.log ファイルが置かれます。このファイルはサーバーが遭遇した問題やエラーについて有用な情報を含みます。<I>Postmaster</I> は更に詳細な情報を報告するための <I>-d</I> オプションを持ちます。その <I>-d</I> オプションは、デバグ・レベルを指定します。高いデバグ・レベルでは、大きなログファイルを生成することに注意しなくてはなりません。
<P>もし、<i>postmaster</i>が走っていなければ、<I>postgres</I>バックエンドをコマンド行から走らせることができ、直接<font size=-1>SQL</font>文をタイプすることができます。このやりかたは、デバグ目的のとき<B>だけ</B>お奨めします。セミコロンではなく、改行が問い合わせの終りになることに注意してください。もし、デバグシンボルを入れてコンパイルしていれば、デバッガを使って何が起きているかを見ることができます。postmaster からバックエンドを開始したわけではないので、独立な環境で走っているのではなくロック/バックエンドとの対話の問題が重複することはありません。
<P> もし、<i>postmaster</i>が走っていれば、あるウィンドウで<I>psql</I>を開始すると、<i>psql</i> で使われる <i>postgres</i>プロセスの<font size=-1>PID</font>が見つかります。デバッガを使って<i>postgres</i>の<font size=-1>PID</font>にアタッチ(attach)します。デバッガの中からブレーク・ポイントをセットし、<i>psql</i>から問い合わせを発行します。デバグのために<i>postgres</i>を始動する場合は、PGOPTIONS="-W n" を設定でき、それから、<i>psql</i> を開始します。これにより、<i>n</i> 秒開始を遅らせるはずなので、デバッガでアタッチして始動を順を追って見ることができます。
<P> postgreSQL プログラムには、デバグと性能測定にとても役に立つ <I>-s</I>や <I>-A</I>や <I>-t</I> 等のオプションがあります。
<P> 何という関数がどのくらい実行時間を食っているかを見るために、プロファイリング(プロフィール付き)でコンパイルすることも可能です。そのバックエンドのプロフィール・ファイルは <I>pgsql/data/base/dbname</I> ディレクトリに格納されるでしょう。クライアントのプロフィールはクライアントの現行ディレクトリに置かれるでしょう。
<P>
<H4><A NAME="3.9">3.9</A>) 接続しようとするときに <I>'Sorry, too many clients'</I> が出ます。なぜですか?
</H4>
<P> <I>postmasterが</I>同時始動できるバックエンドプロセスに対する制限数を増やす必要があります。
<P>PostgreSQL 6.5以降では、既定の最大プロセスは32プロセスです。適切な<I>-N</I>の値で<I>postmaster</I>を再起動することにより増加させることができます。既定の構成では<I>-N</I>は最大1024まで設定できます。もし、もっと必要であれば<I>include/config.h</I>の中の<font size=-1>MAXBACKENDS</font>を増加させ、再構築します。もし、望むなら<I>configure</I>の <I>--with-maxbackends</I>切替を使って、<I>-N</I>の既定値を構成時に設定できます。
<P>もし、<I>-N</I> を 32よりも大きくするのであれば、<I>-B</I>も既定の64より大きい値に増加させなくてはならないし、<I>-B</I> は少なくとも <I>-N</I> の2倍はなくてはならず、おそらく最高性能を望むならばそれより大きい値が必要なはずです。バックエンドプロセスをたくさんにすると、いろいろなUnixカーネル構成パラメータも増やすことが必要になるかもしれません。
共有メモリー・ブロックの最大値(<font size=-1>SHMMAX</font>)、
セマフォの最大数(<font size=-1>SEMMNS</font>と<font size=-1>SEMMNI</font>)、
プロセスの最大数(<font size=-1>NPROC</font>)、
ユーザ毎の最大プロセス数(<font size=-1>MAXUPRC</font>)、
開くファイルの最大数(<font size=-1>NFILE</font>と<font size=-1>NINODE</font>
も確認事項に含まれます。
PostgreSQLに許されるバックエンドのプロセス数が制限されているのは、
システムのリソースを使い果してしまうことを避けるためです。
<P>6.5より前のバージョンのPostgreSQLではバックエンドの最大数は64でしたが、変更するには、<I>include/storage/sinvaladt.h</I>の中のMaxBackendId定数を修正した後に再構築が必要でした。
<P>
<H4><A NAME="3.10">3.10</A>) 自分のデータベース・ディレクトリにある <I>pg_sorttemp.XXX</I>ファイルは何ですか?
</H4>
<P> 問い合わせ実行モジュールによって生成された一時的なファイルです。例えば、もし <font size=-1>ORDER BY</font> 句を満たすためにバックエンドの <I>-S</I> パラメータで許可した値よりも大きなスペースがソートの際に必要だとすると、溢れたデータを保持するために一時的なファイルがいくつか生成されます。
<P>
一時的なファイルは自動的に消し去られるはずですが、もし、ソートの途中でバックエンドが潰れてしまうとそうなりません。もし、そのときバックエンドがひとつも走ってなければ、pg_tempNNN.NNファイルを消しても安全です。
<P>
<P>
<HR>
<H2><CENTER>操作上の質問</CENTER></H2>
<P>
<H4><A NAME="4.1">4.1</A>) なぜ、システムはカンマや小数点や日付フォーマットで混乱するのですか?
</H4>
<P> ロケールの設定を確かめて下さい。PostgreSQL は <I>postmaster</I> プロセスを走らせたユーザーのロケールの設定を使います。postgres とpsql には SET コマンドがあり、データ書式を制御できます。これらをあなたの操作環境に合わせて設定して下さい。
<P>
<H4><A NAME="4.2">4.2</A>) バイナリ・カーソルと通常のカーソルとの厳密な違いは何ですか?
</H4>
<P> 詳述は、オンラインマニュアルで <font size=-1>DECLARE</font> を見て下さい。
<P>
<H4><A NAME="4.3">4.3</A>) 問い合わせの最初の数行のみを <font size=-1>SELECT</font> するにはどうしますか?
</H4>
<P> オンラインマニュアルで<font size=-1>FETCH</font>を見てください。あるいは、SELECT ... LIMIT....を使ってみて下さい。
<P>たとえ、欲しいのは最初の数行だけでも、すべての問い合わせを評価しなくてはならないかもしれません。<font size=-1>ORDER BY</font> を持った問い合わせを考えてみて下さい。
もし、<font size=-1>ORDER BY</font>に合ったインデックスがあるとすると PostgreSQLは要求された最初の数行だけで評価できるかもしれませんが、でなれば、PostgreSQL は意図した行が生成されるまですべての行を評価しなければならないかもしれません。
<P>
<H4><A NAME="4.4">4.4</A>) テーブルやその他の情報のリストを <I>psql</I> で見るにはどうしますか?
</H4>
<P>
<I>psql</I>のソースコードが書かれた <I>pgsql/src/bin/psql/describe.c</I> ファイルを読むことができます。
そこには、psqlのバックスラッシュコマンドによる出力のための<font size=-1>SQL</font>コマンドが含まれています。 <I>psql</I> に <I>-E</I> オプションをつけて起動すれば、与えたコマンドを実行するための問い合わせが出力されます。
<P>
<H4><A NAME="4.5">4.5</A>) テーブルからの列の削除はどのようにしますか?
</H4>
<P> <font size=-1>ALTER TABLE DROP COLUMN</font> はサポートしていませんが、その代わりにこうします:
<PRE>
SELECT ... -- 削除したい列以外の列をすべて選択します。
INTO TABLE new_table
FROM old_table;
DROP TABLE old_table;
ALTER TABLE new_table RENAME TO old_table;
</PRE>
<P>
<H4><A NAME="4.6">4.6</A>) 行、テーブル、データベースの最大サイズは?
</H4>
<P> 制限は以下のとおりです。
<PRE>
データベースの最大サイズ? 制限無し (60GB のデータベースも存在します)
テーブルの最大サイズ? 16TB
行の最大サイズ? 7.1以降で制限無し
フィールドの最大サイズ? 7.1以降で1GB
テーブル内での最大ロウ数? 制限無し
テーブル内での最大カラム数? カラムの型により250-1600
テーブル内での最大インデクス数? 制限無し
</PRE>
<P> もちろん、これらは実際は無制限ではなく、ディスク容量とメモリーやスワップスペースの大きさにより制限されます。性能はこれらの値がことのほか大きな時に煽りを受けます。
<P> 最大テーブルサイズの16TBはオペレーティングシステムのラージ・ファイルサポートは必要としません。ラージ・テーブルは複数の1GBのファイルのように保存されます。
<P> デフォルトのブロックサイズを32kにすると最大テーブルサイズと最大カラム数とが増加します。
<P>
<H4><A NAME="4.7">4.7</A>) 一般的なテキストファイルからデータを保存するには、データベースのディスク容量はどのくらい必要です?
</H4>
PostgreSQL のデータベースに保存するには、普通のファイルの約6.5倍のディスク容量を必要とします。<P>
<P> 各行に二つずつ整数を持つ 300,000行のファイルを考えてみましょう。ただのファイルでは 2.4MB です。このデータを含む PostgreSQL データベースファイルの大きさは次のように約14MBと見積もることができます
<PRE>
36 bytes: 各行のヘッダ(概算)
+ 8 bytes: 各4バイトの二つの整数(int)フィールド
+ 4 bytes: ページ上のタップルへのポインタ
----------------------------------------
48 bytes per row
PostgreSQL のデータページサイズは 8192バイト(8KB)なので:
8192 bytes per page
------------------- = 171 rows per database page (切り上げ)
48 bytes per row
300000 data rows
-------------------- = 1755 database pages
171 rows per page
1755 database pages * 8192 bytes per page = 14,376,960 bytes (14MB)
</PRE>
<P>
インデックスは、これほどのオーバヘッドは要求しませんが、インデックス付けされるデータを含む以上、それなりに大きくなります。
<P>
<H4><A NAME="4.8">4.8</A>) データベース内に定義されたテーブルやインデックスをどのように見つけ出しますか?
</H4>
<P> <I>psql</I> にはいろいろなバックスラッシュ・コマンドがあり、こうした情報を表示します。バックスラッシュ・コマンドの種類を見るには \? を使って下さい。
<P> また、<I>pgsql/src/tutorial/syscat.source</I> ファイルを走らせてみて下さい。それは、沢山の <font size=-1>SELECT</font> 文により必要な情報をデータベースのシステム・テーブルから取り出して例示してくれます。
<P>
<H4><A NAME="4.9">4.9</A>) 問い合わせが遅いうえ、インデックスを使っている様子がありません。なぜですか?
</H4>
<P> PostgreSQL は統計情報を自動的には保守しません。統計情報を更新するためには、<font size=-1>VACUUM</font> を走らせなくてはなりません。統計情報が更新された後は、オブティマイザがテーブルに何行あるかを知って、インデックスを使うべきかの決定をより良く下します。オブティマイザはテーブルが小さくて連続スキャンの方が速いであろう場合はインデックスを使わないことにご注意下さい。
<P> 列特定の最適化統計のために<font size=-1>VACUUM ANALYZE</font>を使います。<font size=-1>VACUUM ANALYZE</font>は複雑な複合結合(multi-join)問い合わせのために大切ですので、オブティマイザはそれぞれのテーブルから返される行の数を見積ることができ、特定の結合順序を選びます。バックエンドはそれ自身では列の統計を保持しないので、定期的にそれらを集めるためには <font size=-1>VACUUM ANALYZE</font> を走らせなくてはなりません。
<P> インデックスは <font size=-1>ORDER BY</font> 操作のためには普通は使われません。すなわち、順次スキャンに続く明示的ソートは、ディスクアクセスがより少なくて済むので、巨大なテーブルの全件をインデックススキャンするよりも高速です。
<P> <font size=-1>LIKE</font> あるいは <I>~</I> のようなワイルドカード演算子(wild-card operators)を使うとき、検索の開始が文字列の始めの部分に固定されているときにのみ、インデックスが使われます。
そういうわけで、インデックスを使うためには、<font size=-1>LIKE</font> 検索では<I>%</I>で始めないようにして、また、<I>~</I>(正規表現検索)は<I>^</I> で始めるようにするべきです。
<P>
<H4><A NAME="4.10">4.10</A>) 問い合わせオブティマイザがどのように問い合わせを評価するのかを見るにはどうしますか?
</H4>
<P> オンラインマニュアルで <font size=-1>EXPLAIN</font> を見て下さい。
<P>
<H3><A NAME="4.11">4.11</A>) R-tree インデックスとは何ですか?</H3>
<P> R-tree インデックスは空間的なデータにインデックスを付けるために使われます。ハッシュインデックスでは範囲の検索ができません。また、B-tree インデックスでは、次元でしか範囲の検索ができません。R-tree インデックスであれば多次元のデータを扱えます。たとえば、もし R-tree インデックスを <I>point</I> 型の属性に付けることができるとするとシステムは、「長方形に囲まれた点をすべて選択する」というような問い合わせに、より効率良く答えられます。
<P> R-Tree の設計の原典となる権威ある論文は:
<P> 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.
<P> この論文は、Stonebraker 教授の "Readings in Database Systems"
でも取り上げられています。
<P>
<small><PRE>
[訳注:
奈良先端大の石川佳治さんよりR-Tree関係の文献を紹介して頂きました。
日本語 Postgres ML のアーカイブから "Subject: [postgres95 801] spatial data structures"
<A HREF="http://www.sra.co.jp/people/t-ishii/PostgreSQL/mhonarc/pgsql-jp/1996Oct/msg00007.html">http://www.sra.co.jp/people/t-ishii/PostgreSQL/mhonarc/pgsql-jp/1996Oct/msg00007.html</A>
をご覧下さい。
]
</PRE></small>
<P> 組込みの R-Tree でポリゴンやボックスを操作できます。理論的にはR-Tree はもっと高い次元を操作するようにも拡張できます。実質的には、R-Tree の拡張にはちょっとした作業が必要でして、現在、我々はそれをどのようにするかについての文書を持っていません。
<P>
<small><PRE>
[訳注:
インターウィズの片岡さんが多次元幾何オブジェクトへの拡張作業中です。詳しくは、
<A HREF="http://www.interwiz.koganei.tokyo.jp/software/geometric/index.html">http://www.interwiz.koganei.tokyo.jp/software/geometric/index.html</A>
をご覧ください。
]
</PRE></small>
<P>
<H4><A NAME="4.12">4.12</A>) 遺伝的問い合わせ最適化とは何ですか?
</H4>
<P> GEQO モジュールは、沢山のテーブルを結合するときに、遺伝的アルゴリズム(GA)で問合わせを高速化します。これにより、しらみつぶしに探索を行なわなくても、大きな結合(join queries)を扱うことができるようになります。
<P>
<H4><A NAME="4.13">4.13</A>) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現しますか?
</H4>
<P>
<I>~</I>演算子は正規表現照合を行ない、<I>~*</I> は大文字と小文字を区別しない(case-insensitive)正規表現照合を行います。 PostgreSQL 7.1 以降では、大文字と小文字を区別しない <font size=-1>LIKE</font> 演算子を <font size=-1>ILIKE</font> といいます。
<PRE>
WHERE lower(textfield) LIKE lower(pattern)
</PRE>
<P>
<H4><A NAME="4.14">4.14</A>) 問い合わせの中で、フィールドが <font size=-1>NULL</font> であることを検出するにはどうしますか?
</H4>
<P> <font size=-1>IS NULL</font>のカラムを IS NOT NULL で試してみて下さい。
<P>
<H4><A NAME="4.15">4.15</A>) 様々な文字型のそれぞれの違いは何ですか?
</H4>
<PRE>
Type Internal Name Notes
--------------------------------------------------
"char" char 1 character
CHAR(#) bpchar 指定された固定長となるように空白が詰められる
VARCHAR(#) varchar 長さの上限の無いテキスト
TEXT text 長さの制限は最大行長による
BYTEA bytea 可変長のバイト配列
</PRE>
<P> 内部名にお目にかかるのは、システム・カタログを調べるときや、エラーメッセージを受け取るときです。
<P> 上記の型のうち後の4つの型は "varlena" 型です(すなわち、ディスクの最初の4バイトがデータ長で、それの後に実際のデータが続きます)。このように実際の空間は宣言された大きさよりも少し大きくなります。しかし、これらのデータ型は<font size=-1>TOAST</font>により圧縮されたり複数行に渡って保存されたりして、ディスク上の空間は思ったより小さくなります。
<P>
<H4><A NAME="4.16.1">4.16.1</A>) 通番(serial)/自動増分フィールドはどのようにつくりますか?
</H4>
<P> PostgreSQL は <font size=-1>SERIAL</font> データ型をサポートします。列上に通番とインデックスを自動作成します。たとえば、
<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 );
</PRE>
通番についてのもっと詳しい情報は、オンラインマニュアルで <I>create_sequence</I> をご覧下さい。
<P> また、各行の<I>OID</I>フィールドを一意値として使うこともできます。しかしながら、もしもデータベースをダンプしてりロードする必要がある場合は、<font size=-1>OID</font>を温存するために<I>pg_dump</I> で <I>-o</I>オプションを使うか、または、<font size=-1>COPY WITH OIDS</I>オプションを使う必要があります。
Bruce Momjian の<A HREF="http://www.PostgreSQL.org/docs/aw_pgsql_book">(http://www.PostgreSQL.org/docs/aw_pgsql_book)の Numbering Rows</A>の章にありあます。
<H4><A NAME="4.16.2">4.16.2</A>) <font size=-1>SERIAL</font>インサートの値はどうすれば得られますか?
</H4><P>
ひとつの方法は、<I>nextval()</I> 関数で挿入する<I>前に(before)</I> SEQUENCEオブジェクトから次の<font size=-1>SERIAL</font>値を取り出し、それから実際に挿入をすることでしょう。
<A HREF="#4.16.1">4.16.1</A>の例で使ったテーブルを使うとすると、次のようになるでしょう。
<PRE>
$newSerialID = nextval('person_id_seq');
INSERT INTO person (id, name) VALUES ($newSerialID, 'Blaise Pascal');
</PRE>
そうして、<tt>$newSerialID</tt> に保存した新しい値を他の問い合わせに(たとえば、<tt>person</tt> テーブルに対する外部鍵(foreign key)のように)使うとよいでしょう。自動的に作られた<font size=-1>SEQUENCE</font>オブジェクトの名前は、&lt;<I>table</I>&gt;_&lt;<I>serialcolumn</I>&gt;_<I>seq</I> のようになり、このうち、<I>table</I> と <I>serialcolumn</I> はそれぞれテーブルの名前と<font size=-1>SERIAL</font>列の名前です。
<P>
あるいは、与えられた<font size=-1>SERIAL</font>値を、それが既定値として挿入された<I>後で(after)</I>、 <I>currval</I>() 関数を使って取り出すこともできます。たとえば、
<PRE>
INSERT INTO person (name) VALUES ('Blaise Pascal');
$newID = currval('person_id_seq');
</PRE>
最後に、<font size=-1>INSERT</font>文から返る<A HREF="#4.17"><font size=-1>OID</font></A>を使って、既定値をみつけることもできますが、しかし、これは最も移植性の低いやり方でしょう。PerlのDBIで Edmund Mergl の DBD::Pg モジュールを使えば、$sth->execute() の後に $sth-&gt{pg_oid_status} を経由してその OID 値を使えるようにすることはできます。
<P>
<H4><A NAME="4.16.3">4.16.3</A>) 他のユーザとの競合状態を避けるためには、<I>currval()</I> と <I>nextval()</I> は使わないほうがよいのでしょうか?
</H4><P>
ありません。バックエンドで処理されています。
<P>
<H4><A NAME="4.17">4.17</A>) <font size=-1>OID</font> とは何ですか? <font size=-1>TID</font> とは何ですか?
</H4>
<P> <font size=-1>OID</font> とは一意の行 ID に対する PostgreSQL の答えです。PostgreSQL の中でつくられるすべての行は一意の <font size=-1>OID</font> を得ます。<I>initdb</I> で(<I>backend/access/transam.h</I> から)発生される <font size=-1>OID</font> はすべて 16384より小さな値です。<I>initdb</I> 後のすべての <font size=-1>OID</font> (ユーザ作成)はそれ以上の値になります。既定では、これらすべての <font size=-1>OID</font> はテーブル内やデータベース内に留まらず、PostgreSQL のそのインストレーション全体内で一意であります。
<P> PostgreSQL はテーブル間の行を結びつけるために、そのシステムテーブル内に <font size=-1>OID</font> を使います。この <font size=-1>OID</font> は特定のユーザの行を識別するためや結合の中で使われることができます。<font size=-1>OID</font> の値を保存するためには <I>OID</I> 型を列に使うことを奨めます。より速くアクセスするために <I>OID</I> フィールドにインデックスを作ることができます。
<P> O<font size=-1>ID</font> は、全てのデータベースから使われる中央領域から、全ての新しい行に割り当てられます。<font size=-1>OID</font> を他の何かに変えたい、もしくは元の <font size=-1>OID</font> でテーブルをコピーしたいのなら、そうできない理由はありません。
<PRE>
CREATE TABLE new_table(old_oid oid, mycol int);
SELECT old_oid, mycol INTO new FROM old;
COPY new TO '/tmp/pgtable';
DELETE FROM new;
COPY new WITH OIDS FROM '/tmp/pgtable';
<!--
CREATE TABLE new_table (mycol int);
INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM old_table;
-->
</PRE>
<P> O<font size=-1>ID</font> は、4バイトの整数として保存されているので、40億を越えると溢れてしまうでしょう。誰もこれが起きたと報告してくる人はいませんでしたが、そうなる前にこの制限を取り除くことを計画しています。
<P> T<font size=-1>ID</font> は特定の物理行をそのブロックとオフセット値で識別するために使われます。<font size=-1>TID</font> は行が修正されたり再ロードされると変わります。それらの <font size=-1>TID</font> は、物理行を指すためにインデックス記載で使われます。
<P>
<H4><A NAME="4.18">4.18</A>) PostgreSQL で使われるいくつかの用語の意味は何ですか?
</H4>
<P> いくつかのソースコードや古い文書の中には、それぞの専門分野の中でもっと一般的に使われる専門用語が使われています。
<UL>
<LI> テーブル(table)、関係(relation)、クラス(class)
<LI> 行(row)、レコード(record)、タップル(tuple)
<LI> 列(column)、フィールド(field)、属性(attribute)
<LI> 取得(retrieve)、選択(select)
<LI> 置換(replace)、更新(update)
<LI> 追加(append)、挿入(insert)
<LI> <font size=-1>OID</font>, 連番(serial value)
<LI> ポータル(portal), カーソル(cursor)
<LI> 領域変数(range variable)、テーブル名(table name)、テーブル別名(table alias)
</UL>
<P>一般的なデータベース用語のリストは:<a
href="http://www.comptechnews.com/~reaster/dbdesign.html">
http://www.comptechnews.com/~reaster/dbdesign.html</a>
で見つけられます。
<P>
<H4><A NAME="4.19">4.19</A>) エラーメッセージ <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>が出るのはなぜですか?
</H4>
<P>
システムの仮想メモリーを全て使い果たしてしまっている可能性があるか、あるいは
カーネルがあるリソースについて低い制限値を持っている可能性があります。
<I>postmaster</I> を開始する前にこれを試してみて下さい:
<PRE>
ulimit -d 262144
limit datasize 256m
</PRE>
<P>
シェルによって、どちらかひとつが成功するでしょうが、これはプロセスのデータセグメント制限をより高く設定し、たぶん問い合わせが完結するようになるでしょう。このコマンドは現行のプロセスと、このコマンドを走らせた後に作られる全てのサブプロセスについて適用されます。バックエンドがとても多くのデータを返すために<font size=-1>SQL</font> クライアントで問題が続いているのであれば、クライアントを開始する前にこれを試してみてください。
<P>
<H4><A NAME="4.20">4.20</A>) どのバージョンの PostgreSQL を走らせているかを調べるにはどうしますか?<BR>
</H4>
<P>
<I>psql</I> から <tt>select version();</tt> をタイプします。
<P>
<H4><A NAME="4.21">4.21</A>) ラージ・オブジェクトの操作で<I>invalid large obj descriptor</I> を受け取りました。なぜでしょうか?
</H4>
<P>ラージ・オブジェクト操作をするときは、前後に<tt>BEGIN WORK</tt>と<tt>COMMIT</tt>を付ける必要があります。すなわち、<tt>lo_open</tt> ... <tt>lo_close</tt>をはさみ込みます。
<P>現在は、PostgreSQLのトランザクションのコミット時にラージ・オブジェクト・ハンドルを閉じることにより、<I>lo_open</I>コマンドが完了した直後に強制的にルールを実行します。このため、最初にハンドルに対して何かをしようとすると、<I>invalid large obj descriptor(ラージオブジェクトの記述子が不正)</I>となります。それで、もし、トランザクションを使うのを忘れると、(少なくともほとんどの時間)働いていたコードがエラーメッセージを出すのです。
<P>もし、<font size=-1>ODBC</font>のようなクライアントインターフェースをお使いなら、<tt>auto-commit off</tt>を設定する必要があるかもしれません。
<P>
<H4><A NAME="4.22">4.22</A>) 現在の時刻がデフォルトとなるような列はどのようにつくりますか?<BR></H4>
<P><i>now()</i>を使います:
<PRE>
CREATE TABLE test (x int, modtime timestamp DEFAULT now() );
</PRE>
<P>
<H4><A NAME="4.23">4.23</A>) なぜ、<font size=-1>IN</font>を使う副問い合わせがとても遅いのですか?
</H4>
<P>
現在、外部問い合わせの各行について副問い合わせの結果を順番にスキャンすることにより、副問い合わせを外部問い合わせに結合しています。当面は<font size=-1>IN</font>を<font size=-1>EXIST</font>Sで置き換えることです
<PRE>
SELECT *
FROM tab
WHERE col1 IN (SELECT col2 FROM TAB2)
</PRE>
を、置き換えて:
<PRE>
SELECT *
FROM tab
WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)
</PRE>
とします。
この制限は将来のリリースで直したいと思っています。
<P>
<H4><A NAME="4.24">4.24</A>) <i>外部</i>結合(<i>outer</i> join)はどのように実現しますか?<BR></H4>
<P>
PostgreSQL 7.1 以降では<font size=-1>SQL</font>標準構文を使う外部結合(アウタージョイン)をサポートします。ここに、例題が2つあります。
<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 と一致しなかった行)も返しています。<font size=-1>RIGHT</font> 結合は t2 の結合されなかった行を加えるでしょう。<font size=-1>FULL</font> 結合は、一致した行に t1 と t2 からは結合されなかった行を返すでしょう。<font size=-1>OUTER</font> という言葉はオプションで <font size=-1>LEFT</font>, <font size=-1>RIGHT</font>, または <font size=-1>FULL</font> などの結合を仮定されています。
+These identical queries join t1.col to t2.col, and also return any unjoined
+rows in t1 (those with no match in t2). A <font size=-1>RIGHT</font> join
+would add unjoined rows of t2. A <font size=-1>FULL</font> join would return
+the matched rows plus all unjoined rows from t1 and t2. The word <font size=-1>OUTER</font>
+is optional and is assumed in <font size=-1>LEFT</font>, <font size=-1>RIGHT</font>,
+and <font size=-1>FULL</font> joins. Ordinary joins are called <font size=-1>INNER</font>
+joins.
以前のリリースでは外部結合(outer join)を<font size=-1>UNION</font> と <font size=-1>NOT IN</font> を使ってシミュレートできます。
たとえば、<i>tab1</i> と <i>tab2</i> を結合するときは、次の問い合わせで二つのテーブルを<i>外部</i>結合します。
<PRE>
SELECT tab1.col1, tab2.col2
FROM tab1, tab2
WHERE tab1.col1 = tab2.col1
UNION ALL
SELECT tab1.col1, NULL
FROM tab1
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
ORDER BY col1
</PRE>
<P>
<HR>
<H2><CENTER>PostgreSQLの拡張についての質問</CENTER></H2>
<P>
<H4><A NAME="5.1">5.1</A>) 自分で書いたユーザ定義関数を psql の中で実行するとコア・ダンプしてしまうのはなぜですか?
</H4>
<P> 問題は色々と考えられます。まず最初に、作成したユーザ定義関数を単独のテストプログラムにして試してみて下さい。
<P>
<H4><A NAME="5.2">5.2</A>) PostgreSQL 用に書いた粋な新しい型や関数は、どうすれば寄贈できますか?
</H4>
<P> 皆さんの行なった拡張を、<I>pgsql-hackers</I> メーリング・リストに送ってください。そして、ゆくゆくはそうした拡張が <I>contrib/</I> サブディレクトリの中に入ることになるでしょう。
<P>
<H4><A NAME="5.3">5.3</A>) タプルを返す C言語の関数はどのように書きますか
</H4>
<P> 原理的には可能ですが、これには究極の妙技を要しますので、著者のまわりでは未だ誰もやったことがありません。
<P><H4><A NAME="5.4">5.4</A>) ソース・ファイルを変更しました。再コンパイルしても変化が見られないのはなぜですか?
</H4>
<P> いくつかの <I>Makefile</I> がインクルード・ファイルに対して適切な依存関係を持っていません。<I>make clean</I> をしてからもう一度 <I>make</I> を行なわなくてはなりません。もし、<font size=-1>GCC</font> をお使いであれば <i>configure</i> の <i>--enable-depend</i> オプションを使って、コンパイラに依存関係を自動的に調べさせることもできます。
</BODY>
</HTML>