mirror of https://github.com/postgres/postgres
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1406 lines
67 KiB
1406 lines
67 KiB
<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>
|
|
原文最終更新日: Mon Mar 18 14:34:57 EST 2002
|
|
<P>
|
|
現在の維持管理者: Bruce Momjian (<A
|
|
HREF="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
|
|
Maintainer of Japanese Translation: Jun Kuwamura (<A
|
|
HREF="mailto:juk@postgresql.jp">juk@postgresql.jp</A>)<BR><P>
|
|
<P>
|
|
この文書の最新版は
|
|
<A HREF="http://www.PostgreSQL.org/docs/faq-english.html">
|
|
http://www.PostgreSQL.org/docs/faq-english.html</A>
|
|
で見ることができます。
|
|
<P>
|
|
|
|
プラットホームに特有の質問については:
|
|
<A HREF="http://www.PostgreSQL.org/docs/">
|
|
http://www.PostgreSQL.org/users-lounge/docs/faq.html</A>
|
|
<BR>に回答があります。
|
|
<P>
|
|
|
|
<P>
|
|
<small><PRE>
|
|
(以下、訳者による注釈を [訳注: と ] とで囲んで記します。)
|
|
[訳注:
|
|
日本語版製作についてのメモは最後尾へ移動しました。
|
|
|
|
日本語版のこの文書は 本家 "User's Lounge" の "Collection of FAQs" の
|
|
"Japanese" という見出しのところにあります。また、以下のサイトにも
|
|
あります。
|
|
<A HREF="http://www.rccm.co.jp/~juk/pgsql/">http://www.rccm.co.jp/~juk/pgsql/</A>
|
|
<A HREF="http://www.linux.or.jp/JF/">http://www.linux.or.jp/JF/</A>
|
|
|
|
この和訳についてお気づきの点は(<A HREF="mailto:juk@postgresql.jp">juk@postgresql.jp</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>) <small>SQL</small>はどうすれば学べますか?<BR>
|
|
<A HREF="#1.11">1.11</A>) PostgreSQLは西暦2000年問題(Y2K)に対応していますか?<BR>
|
|
<A HREF="#1.12">1.12</A>) 開発チームにはどのように参加しますか?<BR>
|
|
<A HREF="#1.13">1.13</A>) バグレポートはどのように発信しますか?<BR>
|
|
<A HREF="#1.14">1.14</A>) 他の<small>DBMS</small>のと比べてPostgreSQLはどうなのですか?<BR>
|
|
<A HREF="#1.15">1.15</A>) PostgreSQLを資金面で援助するにはどうすればよいですか?<BR>
|
|
|
|
|
|
<H2><CENTER>ユーザー・クライアントの質問</CENTER></H2>
|
|
|
|
<A HREF="#2.1">2.1</A>) PostgreSQL の <small>ODBC</small> ドライバーはありますか?<BR>
|
|
<A HREF="#2.2">2.2</A>) PostgreSQL を Web ページと連携させるにはどんなツールがありますか?<BR>
|
|
<A HREF="#2.3">2.3</A>) PostgreSQL にグラフィカル・ユーザインターフェースはありますか?
|
|
レポートジェネレータや埋め込み問い合わせ言語インターフェースはありますか?<BR>
|
|
<A HREF="#2.4">2.4</A>) PostgreSQL と通信するにはどんな言語が使えますか?<BR>
|
|
|
|
|
|
<H2><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>) 他のホストからの接続はどのように制御しますか?<BR>
|
|
<A HREF="#3.6">3.6</A>) より良い性能を得るためには、データベース・エンジンをどのように調整すれば良いですか?<BR>
|
|
<A HREF="#3.7">3.7</A>) どのようなデバグ機能が使えますか?<BR>
|
|
<A HREF="#3.8">3.8</A>) 接続しようとするときに <I>'Sorry, too many clients'</I> が出るのはなぜですか?<BR>
|
|
<A HREF="#3.9">3.9</A>) 自分のデータベース・ディレクトリにある <I>pg_sorttemp.XXX</I> ファイルは何ですか?<BR>
|
|
|
|
|
|
|
|
<H2><CENTER>操作上の質問</CENTER></H2>
|
|
|
|
<A HREF="#4.1">4.1</A>) バイナリ・カーソルと通常カーソルとの違いは何ですか?<BR>
|
|
<A HREF="#4.2">4.2</A>) 最初の数行のみを <small>select</small> するにはどうしますか?<BR>
|
|
<A HREF="#4.3">4.3</A>) テーブルやその他の情報のリストを <I>psql</I> で見るにはどうしますか?<BR>
|
|
<A HREF="#4.4">4.4</A>) テーブルから列の削除はどのようにしますか?<BR>
|
|
<A HREF="#4.5">4.5</A>) 行、テーブル、データベースの最大サイズは?<BR>
|
|
<A HREF="#4.6">4.6</A>) 一般的なテキストファイルからデータを保存するには、データベースのディスク容量はどのくらい必要ですか?<BR>
|
|
<A HREF="#4.7">4.7</A>) データベース内に定義されたテーブルやインデックスをどのようにして見つけ出しますか?<BR>
|
|
<A HREF="#4.8">4.8</A>) 問い合わせが遅いうえ、インデックスを使っている様子がありません。なぜですか?<BR>
|
|
<A HREF="#4.9">4.9</A>) 問い合わせオブティマイザがどのように問い合わせを評価するかを見るにはどうしますか?<BR>
|
|
<A HREF="#4.10">4.10</A>) R-tree インデックスとは何ですか?<BR>
|
|
<A HREF="#4.11">4.11</A>) 遺伝的問い合わせ最適化とは何ですか?<BR>
|
|
<A HREF="#4.12">4.12</A>) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使いますか?<BR>
|
|
<A HREF="#4.13">4.13</A>) 問い合わせの中で、フィールドが <small>NULL</small> であることを検出するにはどうしますか?<BR>
|
|
<A HREF="#4.14">4.14</A>) 色々な文字型のそれぞれの違いは何ですか?<BR>
|
|
<A HREF="#4.15.1">4.15.1</A>) 通番(serial)/自動増分フィールドはどのようにつくりますか?<BR>
|
|
<A HREF="#4.15.2">4.15.2</A>) <small>SERIAL</small>データ型に挿入される値は、どうすれば得られますか?<BR>
|
|
<A HREF="#4.15.3">4.15.3</A>) 他のユーザとの競合状態を避けるためには、<I>currval()</I> と <I>nextval()</I> は使わないほうがよいのでしょうか?<BR>
|
|
<A HREF="#4.15.4">4.15.4</A>) トランザクションが中断したときにもういちどシーケンス番号が使われないのはなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか?<BR>
|
|
<A HREF="#4.15">4.16</A>) <small>OID</small> とは何ですか? <small>TID</small> とは何ですか?<BR>
|
|
<A HREF="#4.17">4.17</A>) PostgreSQL で使われるいくつかの用語の意味は何ですか?<BR>
|
|
<A HREF="#4.18">4.18</A>) エラーメッセージ <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>が出るのはなぜですか?<BR>
|
|
<A HREF="#4.19">4.19</A>) どのバージョンの PostgreSQL を走らせているのかを調べるにはどうしますか?<BR>
|
|
<A HREF="#4.20">4.20</A>) ラージオブジェクトの操作で、<I>invalid large obj descriptor</I>と出るのはなぜですか?<BR>
|
|
<A HREF="#4.21">4.21</A>) 現在の時刻がデフォルトとなるような列はどのようにつくりますか?<BR>
|
|
<A HREF="#4.22">4.22</A>) なぜ、<small>IN</small>を使う副問い合わせがとても遅いのですか?<BR>
|
|
<A HREF="#4.23">4.23</A>) <i>外部</i>結合(<i>outer</i> join)はどのように実現しますか?<BR>
|
|
<A HREF="#4.24">4.24</A>) 複数のデータベースを使う問い合わせはどのようにすればできますか?
|
|
|
|
|
|
<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><I>Post-Gres-Q-L.</I>(ポスト - グレス - キュー - エル) と発音します。</P>
|
|
<P>PostgreSQL は次世代 <small>DBMS</small> 研究用のプロトタイプであった POSTGRES データベース管理システムの改良版です。PostgreSQL は POSTGRES の強力なデータ・モデルと豊富なデータ・タイプ(型)を保持しながら、POSTGRES で使われた PostQuel 問い合わせ言語を、拡張した <small>SQL</small> のサブセットに置き換えています。PostgreSQL は無料で完全なソースを利用できます。
|
|
|
|
<P>PostgreSQL の開発は、PostgreSQL 開発メーリングリストに参加しているインターネット上の開発者チームですべて行なわれています。現在の座長は Marc G. Fournier ( <A HREF="mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A> )です。(以下に参加の仕方があります。)現在、このチームが PostgreSQL 開発のすべての面倒をみています。
|
|
|
|
<P>Postgres95-1.01 の中心的な開発者は Andrew Yu と Jolly Chen でしたが、その他大勢の人々がこのコードの移植、テスト、デバグ、および、改良に参加しました。PostgreSQL の派生元コードである POSTGRES はカリフォルニア大学バークレイ校において、 Michael Stonebraker 教授の指揮のもと、多くの学生、卒業生、本職のプログラマたちの努力により作られました。
|
|
|
|
<P>バークレイにおけるこのソフトウェアのもとの名前は Postgres でしたが、<SMALL>SQL</small> の機能が追加された 1995 年にその名前は Postgres95 に変更され、1996 年の終りにその名前は PostgreSQL に変更されました。
|
|
|
|
<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-2002, 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>
|
|
<STRONG>
|
|
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.
|
|
</STRONG>
|
|
<P>
|
|
|
|
<small><PRE>
|
|
POSTGRESQL データベース管理システム
|
|
|
|
部分的著作権 (c) 1996-2002, PostgreSQL国際開発チーム
|
|
部分的著作権 (c) 1994-6 カリフォルニア大学本校
|
|
|
|
|
|
本ソフトウェアおよびその文書一式は上記の著作権表示と、この文章
|
|
およびこれに続く二つの段落が全ての複製に添付されている限りにおい
|
|
て、使用、複製、修正および配付の許可を、いかなる目的であっも、無
|
|
償でかつ同意書無しに行なえることをここに認めます。
|
|
|
|
カリフォルニア大学は、いかなる当事者にたいしても、利益の壊失を
|
|
含む、直接的、間接的、特別、偶然あるいは必然的にかかわらず生じた
|
|
損害について、たとえカリフォルニア大学がこれらの損害について訴追
|
|
を受けていたとしても、一切の責任を負いません。
|
|
|
|
カリフォルニア大学は、商用目的における暗黙の保証と、特定目的で
|
|
の適合性に関してはもとより、これらに限らず、いかなる保証も放棄す
|
|
ることを明言します。以下に用意されたソフトウェアは「そのまま」を
|
|
基本原理とし、カリフォルニア大学はそれを維持、支援、更新、改良あ
|
|
るいは修正する義務を負いません。
|
|
|
|
[訳注:
|
|
著作権に関する正文は上記の英語による表記です。日本語訳はあくまで
|
|
参考です。
|
|
]
|
|
</PRE></small>
|
|
|
|
<p>上記はBSDライセンスで古きオープンソースのライセンスです。ソースコード
|
|
がどのように使われようとも制限しません。好ましいことなので、我々もそれを
|
|
変えるつもりはありません。</p>
|
|
|
|
<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は <small>ODBC</small> クライアントとも通信できます。
|
|
|
|
<h6>
|
|
サーバ</h6>
|
|
<P> 現在、Cygnus Unix/NT 移植ライブラリの Cygwin を使って、PostgreSQL データベースサーバは Windows NT と Win2k 上で稼働しています。配布に含まれる<I>pgsql/doc/FAQ_MSWIN</I>あるいはウェブサイトにある MS Windows FAQ をご覧下さい。Microsoft の素のプラットホームに移植する計画はありません。<P>
|
|
|
|
<br>
|
|
[訳注:
|
|
<br>
|
|
<h6><font color="orange">
|
|
Win32ネイティーブ版(Win32 Native version)
|
|
</font></h6>
|
|
<pre>
|
|
Windows-Native サーバー & クライアントパッケージが斉藤さんにより
|
|
維持管理されています。
|
|
<a href="http://hp.vector.co.jp/authors/VA023283/PostgreSQL.html">http://hp.vector.co.jp/authors/VA023283/PostgreSQL.html</a>
|
|
(Windows-Native Server&Client Package for PostgreSQL by Hiroshi Saito)
|
|
<a href="http://hp.vector.co.jp/authors/VA023283/PostgreSQLe.html">http://hp.vector.co.jp/authors/VA023283/PostgreSQLe.html</a>
|
|
|
|
</pre>
|
|
<br>
|
|
]
|
|
<br>
|
|
|
|
|
|
<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>
|
|
|
|
EFNet に <I>#PostgreSQL</I> という IRC チャンネルもあります。
|
|
UNIX コマンドで<tt>irc -c '#PostgreSQL' "$USER" <A HREF="http://irc.phoenix.net">irc.phoenix.net</A> を使います。<P>
|
|
|
|
<small><PRE>
|
|
[訳注:
|
|
1999年7月23日、日本PostgreSQLユーザー会(にほん ぽすとぐれす ゆーざー かい)、略称JPUGが設立されました。
|
|
JPUG は非営利組織で、PostgreSQLを利用する人達の相互協力の場です。
|
|
正会員の会費は無料ですが、協賛会員の会費と会員の積極的な貢献が会の運営を助けています。
|
|
詳しくは、JPUG のWeb サイト:
|
|
<A HREF="http://www.postgresql.jp/">http://www.postgresql.jp/</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.2.1 です。
|
|
<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>
|
|
でオンラインでも閲覧できます。
|
|
|
|
<small><PRE>
|
|
[訳注:
|
|
(株)SRAと日本ポストグレスユーザー会で翻訳され、
|
|
<A HREF="http://osb.sra.co.jp/PostgreSQL/Manual/">「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>
|
|
[訳注:
|
|
日本ポストグレスユーザー会の<A HREF="http://www.postgresql.jp/subcommittee/psqltrans/"> 「PostgreSQL Book翻訳分科会」</A>
|
|
にて翻訳されました。
|
|
]
|
|
</PRE></small>
|
|
|
|
および、 <A href=
|
|
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>
|
|
です。
|
|
|
|
|
|
購入可能な書籍の目録は、<A href=
|
|
"http://www.postgresql.org/books/">http://www.postgresql.org/books/</A>
|
|
にあります。
|
|
|
|
PostgreSQL 技術情報記事も、<A href=
|
|
"http://techdocs.postgresql.org/">http://techdocs.postgresql.org/</A>
|
|
にあります。</P>
|
|
|
|
|
|
<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>) <small>SQL</small> はどうすれば学べますか?</H3>
|
|
<P>
|
|
<A HREF="http://www.PostgreSQL.org/docs/awbook.html">
|
|
http://www.PostgreSQL.org/docs/awbook.html</A>
|
|
にあるPostgreSQL本で <small>SQL</small> を教えています。
|
|
|
|
<small><PRE>
|
|
[訳注:
|
|
日本ポストグレスユーザー会の<A HREF="http://www.postgresql.jp/subcommittee/psqltrans/"> 「PostgreSQL Book翻訳分科会」</A>
|
|
にて翻訳され出版されています。
|
|
]
|
|
</PRE></small>
|
|
|
|
<P>
|
|
その他にも PostgreSQL本として、<A href=
|
|
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook</A>
|
|
があります。
|
|
|
|
素晴らしい手引書は、<A href=
|
|
"http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
|
|
<A href=
|
|
"http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
|
|
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A>
|
|
そして、<A href=
|
|
"http://sqlcourse.com/">http://sqlcourse.com</A>
|
|
にあります。</P>
|
|
|
|
|
|
<P>その他では、 "Teach Yourself SQL in 21 Days, Second Edition" が <A href=
|
|
"http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A>にあります。</P>
|
|
|
|
<P>
|
|
多くのユーザに、
|
|
<I>The Practical SQL Handbook</I>, Bowman Judith S. et al., Addison-Wesley
|
|
が好評です。
|
|
その他に、<I>The Complete Reference SQL</I>, Groff et al., McGraw-Hill
|
|
のようなのもあります。
|
|
</P>
|
|
|
|
<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)します。
|
|
3番目に、高品質のパッチをpgsql-patchesに発信します。
|
|
|
|
およそ十人ちょっとの人達が、PostgreSQL <small>CVS</small>アーカイブにコミットする権限を持っています。
|
|
そのそれぞれの人達が沢山の高品質なパッチを発信するので、現在コミッターとなっている人達はそれに追い付くのが大変ですが、我々は彼らがコミットしたパッチは高品質であると確信しています。
|
|
<P>
|
|
<H4><A NAME="1.13">1.13</A>) バグレポートはどのように発信しますか?
|
|
</H4>
|
|
|
|
<P>バグを報告する仕方についてのガイドラインと方向づけがある<A href=
|
|
"http://www.postgresql.org/bugs/bugs.php">PostgreSQL BugTool</A>
|
|
(バグツール)のページを訪れてみて下さい。 </P>
|
|
|
|
<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>) 他の<small>DBMS</small>のと比べてPostgreSQLはどうなのですか?
|
|
</H4><P>
|
|
|
|
ソフトウェアを計る方法にはいくつかあります。機能と性能と信頼性とサポートと価格です。
|
|
|
|
<DL>
|
|
<DT> <B>機能(Features)</B>
|
|
<DD>
|
|
PostgreSQLは、トランザクション、副問い合わせ、トリガー、ビュー、外部キー
|
|
整合性参照、および、洗練されたロック機構など、大規模商用<small>
|
|
DBMS</small>が持つ機能をほとんど持っています。さらに PostgreSQLは、ユーザ
|
|
定義型、継承、ルール、それから、ロック競合を縮小するマルチバージョン同時
|
|
性制御など、商用<small>DBMS</small>も持ち合わせないような機能をい
|
|
くつか持ち合わせています。<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>
|
|
|
|
我々は、<small>DBMS</small>の信頼性が高くなくてはその価値が無いことを理解してます。十
|
|
分テストして、安定したコードをバグを最小にしてからリリースするように勤
|
|
めてます。それぞれのリリースは少なくとも1カ月以上のベータ・テストを行
|
|
ない、これまでのリリースの履歴が、製品版として安定した堅固なリリースで
|
|
あることを物語っています。この分野では、他のデータベースと比べても遜色
|
|
がないことに自信を持っています。
|
|
|
|
<DT> <B>サポート(Support)</B>
|
|
<DD>
|
|
|
|
我々のメーリングリストは、遭遇するいかなる問題についても解決への手
|
|
助けをしてくれる、開発者やユーザの大きな集まりを提供しています。我々は
|
|
問題の解決を保証することはできませんが、商用データベースであっても常に
|
|
解決されるわけではありません。開発者や、ユーザ・コミュニティ、マニュア
|
|
ル類、それに、ソースコードなどへ直接アクセスできることよって、
|
|
PostgreSQLのサポートは、他の<small>DBMS</small>サポートよりも優れたものとなっています。
|
|
御要望に答えて、事柄毎の商用サポートなどもあります(サポートFAQ項目をご覧
|
|
下さい)。
|
|
|
|
<DT> <B>価格(Price)</B>
|
|
<DD>
|
|
|
|
PostgreSQLの利用は、商用でも非商用でも、すべて無料です。上記に示してあ
|
|
るBSDスタイルの使用許諾に外れない限り、PostgreSQLのコードを制限無しで
|
|
商品に組み込むことができます。
|
|
<BR><BR>
|
|
</DL>
|
|
<P>
|
|
|
|
<H4><A name="1.15">1.15</A>) PostgreSQLを資金面で援助するにはどうすればよいですか?
|
|
</H4>
|
|
|
|
<P>PostgreSQLは、我々が6年前に始めたとき以来、最高クラスの基盤を
|
|
持っています。これはすべて、Marc Fournieさんのおかげで、彼はこの基盤
|
|
を何年にもわたって創造し管理してきました。</P>
|
|
|
|
<P>質の良い基盤はオープンソース・プロジェクトにとってはとても大切な
|
|
もので、前進する勢いを失うプロジェクトの分裂を回避します。
|
|
</P>
|
|
|
|
<P>もちろん、この基盤は安いものではありません。維持し続けるためには
|
|
毎月あるいは一時の経費がかかります。もし、あなたやあなたの会社に、こうし
|
|
た努力のための資金を助けるために施すことができるようでしたら、<A
|
|
href=
|
|
"http://www.pgsql.com/pg_goodies">http://www.pgsql.com/pg_goodies</A>
|
|
から寄付をお願いします。
|
|
|
|
<P>また、Webページには PostgreSQL,Inc とありますが、そこの"義援
|
|
(contributions)"アイテムは PostgreSQL プロジェクトをサポートするためだけ
|
|
のためで、決して特定の会社のための資金のためではありません。もし、手形
|
|
(check)の方が都合がよければ連絡先の住所へお送り下さい。</P>
|
|
|
|
|
|
<HR>
|
|
|
|
<H2><CENTER>ユーザー・クライアントの質問</CENTER></H2>
|
|
<P>
|
|
|
|
<H4><A NAME="2.1">2.1</A>) PostgreSQL のための <small>ODBC</small> ドライバーはありますか?
|
|
</H4>
|
|
|
|
<P> PsqlODBC と OpenLink <small>ODBC</small> の二つの <small>ODBC</small> ドライバーが利用可能です。
|
|
|
|
<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 <small>ODBC</small> は <A HREF="http://www.openlinksw.com/">http://www.openlinksw.com/</A>から入手できます。標準的な <small>ODBC</small> クライアント・ソフトウェアで使えますので、支援しているすべてのプラットホーム(Win, Mac, Unix, <STRONG>VMS</STRONG>)から PostgreSQL の <small>ODBC</small> が利用できます。
|
|
|
|
<P> たぶん彼らは、商用品質のサポートの必要な人々に売っていると思いますが、
|
|
フリーウェア版はいつでも入手可能のようです。質問は、<A href=
|
|
"mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>
|
|
へ送って下さい。</P>
|
|
|
|
<A HREF="http://www.postgresql.org/docs/programmer/odbc.html">
|
|
Programmer's Guide</A>
|
|
の <small>ODBC</small> の章もご覧ください。
|
|
|
|
|
|
<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><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.geocities.jp/rui_hirokawa/php/">http://www.geocities.jp/rui_hirokawa/php/</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 を使います。
|
|
|
|
<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 言語のための埋め込み <small>SQL</small> 問い合わせ言語インターフェースもあります。
|
|
|
|
<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>埋め込み<small>HTML</small> (<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 に問い合わせできます。
|
|
Perl のモジュールは古くからある Pg と DBI ドライバの DBD::Pg とがあり、
|
|
いずれも Edmund Mergl 氏によるもので <A HREF="http://www.cpan.org/">CPAN サイト</A>にあります。
|
|
]
|
|
</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が必要です。
|
|
PostgreSQL Administrator's Gide に共有メモリーとセマフォについての情報の詳細があります。</P>
|
|
|
|
<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>で使います。より恒久的な解決策は、カーネルの<small>SEMMNS</small> と <small>SEMMNI</small> パラメータを増やすことです。
|
|
|
|
<P>操作不能のセマフォも過度なデータベースアクセスの間にクラッシュを
|
|
起こす可能性があります。
|
|
</P>
|
|
|
|
<P>もし、エラーメッセージがなにか他のものであれば、カーネルの構成でまったくセマフォのサポートをしていないかもしれません。
|
|
PostgreSQL Administrator's Gide に共有メモリーとセマフォについての情報の詳細があります。</P>
|
|
|
|
<P>
|
|
|
|
<H4><A NAME="3.5">3.5</A>) 他のホストからの接続はどのように制御しますか?
|
|
</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> 確かにインデックスは問い合わせの速度を増します。<small>EXPLAIN</small>コマンドで PostgreSQL がどのようにあなたの問い合わせを翻訳しているかを見ることができ、そして、どのインデックスが使われているかを見ることができます。
|
|
<P>もし <small>INSERT</small> を多用している場合は、<small>COPY</small> コマンドを使って大きなバッチ処理でそれを行なうことを検討して下さい。これは、<small>INSERT</small> を別々に行なうよりもっと高速です。次に、<small>BEGIN WORK/COMMIT</small> のトランザクション・ブロックの中に無い文は、それら自身がそれぞれのトランザクションに入っていると見なされます。いくつかの文を一つのトランザクション・ブロックの中で行なうことを考えて下さい。これによりトランザクションのオーバーヘッドが減ります。また、大きなデータの変更を行なう際はインデックスを一度外して、作り直すことを考えてみて下さい。
|
|
|
|
<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> また、<small>CLUSTER</small> コマンドを使って、テーブルのデータをインデックスに合わせるためにグループ化することもできます。詳しくは、オンラインマニュアルで <I>CLUSTER</I> を見て下さい。
|
|
|
|
<P>
|
|
<H4><A NAME="3.7">3.7</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 >server.log 2>&1 &
|
|
</PRE>
|
|
|
|
<P> これにより PostgreSQL の最上部のディレクトリに server.log ファイルが置かれます。このファイルはサーバーが遭遇した問題やエラーについて有用な情報を含みます。<I>Postmaster</I> は更に詳細な情報を報告するための <I>-d</I> オプションを持ちます。その <I>-d</I> オプションは、デバグ・レベルを指定します。高いデバグ・レベルでは、大きなログファイルを生成することに注意しなくてはなりません。
|
|
|
|
<P>もし、<i>postmaster</i>が走っていなければ、<I>postgres</I>バックエンドをコマンド行から走らせることができ、直接<small>SQL</small>文をタイプすることができます。このやりかたは、デバグ目的のとき<B>だけ</B>お奨めします。セミコロンではなく、改行が問い合わせの終りになることに注意してください。もし、デバグシンボルを入れてコンパイルしていれば、デバッガを使って何が起きているかを見ることができます。postmaster からバックエンドを開始したわけではないので、独立な環境で走っているのではなくロック/バックエンドとの対話の問題が重複することはありません。
|
|
|
|
<P> もし、<i>postmaster</i>が走っていれば、あるウィンドウで
|
|
<I>psql</I>を開始すると、<i>psql</i> で使われる <i>postgres</i> プロセス
|
|
の<small>PID</small>が見つかります。デバッガを使って
|
|
<i>postgres</i>の<small>PID</small>にアタッチ(attach)します。デバッ
|
|
ガの中からブレーク・ポイントをセットし、<i>psql</i> から問い合わせを発行
|
|
します。デバグのために<i>postgres</i>を始動する場合は、PGOPTIONS="-W n"
|
|
を設定でき、それから、<i>psql</i> を開始します。これにより、<i>n</i> 秒
|
|
開始を遅らせるはずなので、デバッガでプロセスにアタッチして、ブレークポイ
|
|
ントを設定し、開始から順を追って見てゆくことができます。
|
|
|
|
<P> postgreSQL プログラムには、デバグと性能測定にとても役に立つ <I>-s</I>や <I>-A</I>や <I>-t</I> 等のオプションがあります。
|
|
|
|
<P> 何という関数がどのくらい実行時間を食っているかを見るために、プロファイリング(プロフィール付き)でコンパイルすることも可能です。そのバックエンドのプロフィール・ファイルは <I>pgsql/data/base/dbname</I> ディレクトリに格納されるでしょう。クライアントのプロフィールはクライアントの現行ディレクトリに置かれるでしょう。
|
|
|
|
|
|
<P>
|
|
<H4><A NAME="3.8">3.8</A>) 接続しようとするときに <I>'Sorry, too many clients'</I> が出るのはなぜですか?
|
|
</H4>
|
|
|
|
<P> <I>postmasterが</I>同時始動できるバックエンドプロセスに対する制限数を増やす必要があります。
|
|
<P>既定の最大プロセスは32プロセスです。<I>-N</I>に適切な値を引数にして<I>postmaster</I>を再起動するか、postgresql.conf を修正することによって、その値を増やすことができます。
|
|
|
|
。既定の構成では<I>-N</I>は最大1024まで設定できます。もし、もっと必要であれば<I>include/config.h</I>の中の<small>MAXBACKENDS</small>を増加させ、再構築します。もし、望むなら<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カーネル構成パラメータも増やすことが必要になるかもしれません。
|
|
共有メモリー・ブロックの最大値(<small>SHMMAX</small>)、
|
|
セマフォの最大数(<small>SEMMNS</small>と<small>SEMMNI</small>)、
|
|
プロセスの最大数(<small>NPROC</small>)、
|
|
ユーザ毎の最大プロセス数(<small>MAXUPRC</small>)、
|
|
開くファイルの最大数(<small>NFILE</small>と<small>NINODE</small>
|
|
も確認事項に含まれます。
|
|
PostgreSQLに許されるバックエンドのプロセス数が制限されているのは、
|
|
システムのリソースを使い果してしまうことを避けるためです。
|
|
|
|
<P>6.5より前のバージョンのPostgreSQLではバックエンドの最大数は64でしたが、変更するには、<I>include/storage/sinvaladt.h</I>の中のMaxBackendId定数を修正した後に再構築が必要でした。
|
|
|
|
<P>
|
|
<H4><A NAME="3.9">3.9</A>) 自分のデータベース・ディレクトリにある <I>pg_sorttemp.XXX</I>ファイルは何ですか?
|
|
</H4>
|
|
|
|
<P> 問い合わせ実行モジュールによって生成された一時的なファイルです。例えば、もし <small>ORDER BY</small> 句を満たすためにバックエンドの <I>-S</I> パラメータで許可した値よりも大きなスペースがソートの際に必要だとすると、溢れたデータを保持するために一時的なファイルがいくつか生成されます。
|
|
<P>
|
|
一時的なファイルは自動的に消し去られるはずですが、もし、ソートの途中でバックエンドがクラッシュしてしまうとそうはなりません。そのときバックエンドがひとつも走ってなければ、pg_tempNNN.NNファイルを消しても大丈夫です。
|
|
|
|
|
|
<small><PRE>
|
|
[訳注:
|
|
SYSLOGD 経由でログを出力するには、まず、configure を --enable-syslog
|
|
付きで走らせた後、コンパイルとインストールを行ないます。
|
|
次に、syslog.conf に local0.* の 出力先を指定し(環境変数で変更可能)、
|
|
syslogd に HUP シグナルを送って初期化しておきます。そして、
|
|
$PGDATA/pg_options に syslog=2 を加えて、 postmaster を -S
|
|
オプション付きにてサーバモードで起動します。(バージョン 7.1 からは
|
|
pg_options は postgresql.conf になっています。)
|
|
]
|
|
</PRE></small>
|
|
|
|
|
|
<P>
|
|
<P>
|
|
<HR>
|
|
<H2><CENTER>操作上の質問</CENTER></H2>
|
|
<P>
|
|
|
|
<H4><A NAME="4.1">4.1</A>) バイナリ・カーソルと通常カーソルとの厳密な違いは何ですか?
|
|
</H4>
|
|
|
|
<P> 詳述は、オンラインマニュアルで <small>DECLARE</small> を見て下さい。
|
|
|
|
<P>
|
|
<H4><A NAME="4.2">4.2</A>) 最初の数行のみを <small>SELECT</small> するにはどうしますか?
|
|
</H4>
|
|
|
|
<P> オンラインマニュアルで<small>FETCH</small>を見てください。あるいは、SELECT ... LIMIT....を使ってみて下さい。
|
|
|
|
<P>たとえ、欲しいのは最初の数行だけでも、すべての問い合わせを評価しなくてはならないかもしれません。<small>ORDER BY</small> を持った問い合わせを考えてみて下さい。
|
|
もし、<small>ORDER BY</small>に合ったインデックスがあるとすると PostgreSQLは要求された最初の数行だけで評価できるかもしれませんが、でなれば、PostgreSQL は意図した行が生成されるまですべての行を評価しなければならないかもしれません。
|
|
|
|
<P>
|
|
<H4><A NAME="4.3">4.3</A>) テーブルやその他の情報のリストを <I>psql</I> で見るにはどうしますか?
|
|
</H4>
|
|
|
|
<P>
|
|
<I>psql</I>のソースコードとして書かれた <I>pgsql/src/bin/psql/describe.c</I> ファイルを読むことがその答えです。
|
|
そこには、psqlのバックスラッシュコマンドによる出力のための<small>SQL</small>コマンドが含まれています。 <I>psql</I> に <I>-E</I> オプションをつけて起動すれば、与えたコマンドを実行するための問い合わせが出力されます。
|
|
<P>
|
|
|
|
|
|
<H4><A NAME="4.4">4.4</A>) テーブルから列の削除はどのようにしますか?
|
|
</H4>
|
|
|
|
<P> <small>ALTER TABLE DROP COLUMN</small> はサポートしていませんが、その代わりにこうします:
|
|
|
|
<PRE>
|
|
SELECT ... -- 削除したい列以外の列をすべて選択します。
|
|
INTO TABLE new_table
|
|
FROM old_table;
|
|
DROP TABLE old_table;
|
|
ALTER TABLE new_table RENAME TO old_table;
|
|
</PRE>
|
|
|
|
[訳注:列の追加は ALTER TABLE ADD COLUMN で行えます。]
|
|
|
|
|
|
<P>
|
|
<H4><A NAME="4.5">4.5</A>) 行、テーブル、データベースの最大サイズは?
|
|
</H4>
|
|
|
|
<P> 制限は以下のとおりです。
|
|
<PRE>
|
|
データベースの最大サイズ? 制限無し (500GB のデータベースも存在します)
|
|
テーブルの最大サイズ? 16TB
|
|
行の最大サイズ? 7.1以降で制限無し
|
|
フィールドの最大サイズ? 7.1以降で1GB
|
|
テーブル内での最大ロウ数? 制限無し
|
|
テーブル内での最大カラム数? カラムの型により250-1600
|
|
テーブル内での最大インデクス数? 制限無し
|
|
</PRE>
|
|
|
|
<P> もちろん、これらは実際は無制限ではなく、ディスク容量とメモリーやスワップスペースの大きさにより制限されます。性能はこれらの値がことのほか大きな時に煽りを受けます。
|
|
|
|
<P> 最大テーブルサイズの16TBはオペレーティングシステムによる巨大ファイルのサポートは必要としません。巨大なテーブルは複数の1GBのファイルに分けて保存されますので、ファイルシステムの制限は重要ではありません。
|
|
|
|
<P> デフォルトのブロックサイズを32kにすると最大テーブルサイズと最大カラム数とが増加します。
|
|
|
|
|
|
<P>
|
|
<H4><A NAME="4.6">4.6</A>) 一般的なテキストファイルからデータを保存するには、データベースのディスク容量はどのくらい必要です?
|
|
</H4>
|
|
|
|
普通のテキストファイルを PostgreSQL のデータベースに保存するには、最大で約5倍のディスク容量を必要とします。<P>
|
|
|
|
<P> 例題として、各行に整数とテキスト記述を持つ 100,000行のファイルを考え
|
|
てみましょう。テキストの文字列の平均長さを20バイトと仮定すると、フラット
|
|
ファイルの大きさは約2.8MB です。このデータを含む PostgreSQL データベース
|
|
ファイルの大きさは次のように約6.4MBと見積もることができます:
|
|
|
|
<PRE>
|
|
36 bytes: 各行のヘッダ(概算)
|
|
24 bytes: 整数(int)フィールドとテキスト(text)フィールド
|
|
+ 4 bytes: ページ上のタップルへのポインタ
|
|
----------------------------------------
|
|
64 bytes per row
|
|
|
|
PostgreSQL のデータページサイズは 8192バイト(8KB)なので:
|
|
|
|
8192 bytes per page
|
|
------------------- = 128 rows per database page (切り上げ)
|
|
64 bytes per row
|
|
|
|
100000 data rows
|
|
-------------------- = 782 database pages
|
|
128 rows per page
|
|
|
|
782 database pages * 8192 bytes per page = 6,406,144 bytes (6.4 MB)
|
|
</PRE>
|
|
|
|
<P>
|
|
インデックスは、これほどのオーバヘッドは要求しませんが、インデックス付けされるデータを含む以上、それなりに大きくなります。
|
|
|
|
<P>
|
|
<H4><A NAME="4.7">4.7</A>) データベース内に定義されたテーブルやインデックスをどのようにして見つけ出しますか?
|
|
</H4>
|
|
|
|
<P> <I>psql</I> にはいろいろなバックスラッシュ・コマンドがあり、こうした情報を表示します。バックスラッシュ・コマンドの種類を見るには \? を使って下さい。
|
|
<P> また、<I>pgsql/src/tutorial/syscat.source</I> ファイルを走らせてみて下さい。それは、沢山の <small>SELECT</small> 文により必要な情報をデータベースのシステム・テーブルから取り出して例示してくれます。
|
|
|
|
<P>
|
|
<H4><A NAME="4.8">4.8</A>) 問い合わせが遅いうえ、インデックスを使っている様子がありません。なぜですか?
|
|
</H4>
|
|
|
|
インデックスは自動的にすべての問い合わせで使われるわけではありません。テー
|
|
ブルが最小サイズより大きく、問い合わせでそのわずかなパーセンテージの行を
|
|
選択する時だけ、インデックスは使われます。これはインデックススキャンによ
|
|
り起こされるランダムなディスクアクセスは、テーブルをストレートに読む順次
|
|
走査よりも遅くなることがときどきあるからです。
|
|
|
|
<P>インデックスを使うかを決定するために、PostgreSQL はテーブルについ
|
|
ての統計情報を持たなければなりません。この統計情報は、<SMALL>VACUUM
|
|
ANALYZE</SMALL>または、単に <SMALL>ANALYZE</SMALL> を使って収集すること
|
|
ができます。統計情報を使ってオブティマイザはテーブルの中に何行あるかを知
|
|
り、インデックスを使うべきかのの決定をより正しくできます。統計情報は最適
|
|
な結合順や結合方法を決める上でも貴重なものもあります。統計情報の収集は、
|
|
テーブルの内容がかわると毎に繰返しなされるべきです。</P>
|
|
|
|
<P> インデックスは、通常 <SMALL>ORDER BY</SMALL> や結合を行な
|
|
うためには使われません。順次スキャンに続く明示的ソートは、巨大なテーブル
|
|
のインデックススキャンよりも普通は高速です。</P>
|
|
しかし、<SMALL>ORDER BY</SMALL>と組み合わされた<SMALL>LIMIT</SMALL>
|
|
は、テーブルの小さな部分を返すためにたびたびインデックスを使うでしょう。
|
|
|
|
<P> <SMALL>LIKE</SMALL> あるいは <I>~</I> のようなワイルドカード演算
|
|
子を使うとき、検索の開始が文字列の始めの部分に固定されているときにのみ、
|
|
インデックスが使われます。そういうわけで、インデックスを使うためには、
|
|
<SMALL>LIKE</SMALL> パターンは<I>%</I>で始めないようにして、また、
|
|
<I>~</I>(正規表現)パターンは<I>^</I> で始めなくてはなりません。
|
|
|
|
[訳注:
|
|
強制的にインデックスを使うには SET enable_seqscan = off を実行します
|
|
]
|
|
|
|
|
|
<P>
|
|
<H4><A NAME="4.9">4.9</A>) 問い合わせオブティマイザがどのように問い合わせを評価するのかを見るにはどうしますか?
|
|
</H4>
|
|
|
|
<P> オンラインマニュアルで <small>EXPLAIN</small> を見て下さい。
|
|
|
|
<P>
|
|
<H3><A NAME="4.10">4.10</A>) R-tree インデックスとは何ですか?</H3>
|
|
|
|
<P> R-tree インデックスは空間的なデータにインデックスを付けるために使われます。ハッシュインデックスでは範囲の検索ができません。また、B-tree インデックスでは、1次元でしか範囲の検索ができません。R-tree インデックスであれば多次元のデータを扱えます。たとえば、もし R-tree インデックスを <I>point</I> 型の属性に付けることができるとするとシステムは、「長方形に囲まれた点をすべて選択する」というような問い合わせに、より効率良く答えられます。
|
|
|
|
<P> R-Tree の設計の原典となる権威ある論文は:
|
|
|
|
<P> Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial Searching."
|
|
Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57.
|
|
|
|
<P> この論文は、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.11">4.11</A>) 遺伝的問い合わせ最適化とは何ですか?
|
|
</H4>
|
|
|
|
<P> GEQO モジュールは、沢山のテーブルを結合するときに、遺伝的アルゴリズム(GA)で問合わせを高速化します。これにより、しらみつぶしに探索を行なわなくても、大きな結合(join queries)を扱うことができるようになります。
|
|
|
|
<P>
|
|
<H4><A NAME="4.12">4.12</A>) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使いますか?
|
|
</H4>
|
|
|
|
<P>
|
|
<I>~</I>演算子は正規表現照合を行ない、<I>~*</I> は大文字と小文字を区別しない(case-insensitive)正規表現照合を行います。 PostgreSQL 7.1 以降では、大文字と小文字を区別しない <small>LIKE</small> 演算子を <small>ILIKE</small> といいます。
|
|
|
|
|
|
<P>大文字と小文字を区別しない等値比較次のように表現できる:
|
|
|
|
<PRE>
|
|
<STRONG>SELECT *</STRONG>
|
|
FROM tab
|
|
WHERE lower(col) = 'abc'
|
|
</PRE>
|
|
|
|
標準インデックスでは使われず、しかしながら、もし関数インデックスを
|
|
作ったならそれが使われるでしょう。
|
|
|
|
<PRE>
|
|
CREATE INDEX tabindex on tab (lower(col));
|
|
</PRE>
|
|
|
|
|
|
|
|
|
|
<PRE>
|
|
WHERE lower(textfield) LIKE lower(pattern)
|
|
</PRE>
|
|
|
|
|
|
<P>
|
|
<H4><A NAME="4.13">4.13</A>) 問い合わせの中で、フィールドが <small>NULL</small> であることを検出するにはどうしますか?
|
|
</H4>
|
|
|
|
<P>カラムを <SMALL>IS NULL</SMALL> と <SMALL>IS NOT NULL</SMALL>
|
|
とで試してみます。</P>
|
|
|
|
<P>
|
|
<H4><A NAME="4.14">4.14</A>) 様々な文字型のそれぞれの違いは何ですか?
|
|
</H4>
|
|
|
|
<PRE>
|
|
Type Internal Name Notes
|
|
--------------------------------------------------
|
|
"char" char 1 character
|
|
CHAR(#) bpchar 指定された固定長となるように空白が詰められる
|
|
VARCHAR(#) varchar 長さの上限の無いテキスト
|
|
TEXT text 長さの制限は最大行長による
|
|
BYTEA bytea 可変長のバイト配列(null-byte safe)
|
|
</PRE>
|
|
|
|
<P> 内部名にお目にかかるのは、システム・カタログを調べるときや、エラーメッセージを受け取るときです。
|
|
|
|
|
|
<P> 上記の型のうち後の4つの型は "varlena" 型です(すなわち、ディスクの最初の4バイトがデータ長で、それの後に実際のデータが続きます)。このように実際の空間は宣言された大きさよりも少し大きくなります。しかし、これらのデータ型は<small>TOAST</small>により圧縮されたり複数行に渡って保存されたりして、ディスク上の空間は思ったより小さくなります。
|
|
|
|
<P><SMALL>CHAR()</SMALL>はいつも長さが同じ文字列を保存するのに最適で
|
|
す。<SMALL>VARCHAR()</SMALL> は可変長の文字列を保存するのに最適ですが、
|
|
保存できる文字列の長さに制限があります。<SMALL>TEXT</SMALL> は長さに制限
|
|
の無い文字列の保存ためのもので、最大1ギガバイトです。
|
|
<SMALL>BYTEA</SMALL>は、部分的に<SMALL>NULL</SMALL> のバイトを含むバイナ
|
|
リデータを保存するためのものです。</P>
|
|
|
|
|
|
<P>
|
|
<H4><A NAME="4.15.1">4.15.1</A>) 通番(serial)/自動増分フィールドはどのようにつくりますか?
|
|
</H4>
|
|
|
|
<P> PostgreSQL は <small>SERIAL</small> データ型をサポートします。列上に通番とインデックスを自動作成します。たとえば、
|
|
|
|
<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>フィールドを一意値として使うこともできます。しかしながら、もしもデータベースをダンプしてりロードする必要がある場合は、<small>OID</small>を温存するために<I>pg_dump</I> で <I>-o</I>オプションを使うか、または、<small>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.15.2">4.15.2</A>) <small>SERIAL</small>データ型に挿入される値は、どうすれば得られますか?
|
|
</H4>
|
|
<P>ひとつの方法は、<I>nextval()</I> 関数を使ってその値を挿入する<I>
|
|
前(before)に</I> SEQUENCE オブジェクトから次の <small>SERIAL</small> 値を取り出し、それから実際に挿入をすることです。<A
|
|
HREF="#4.16.1">4.16.1</A> の例で使ったテーブルを使うとすると、Perl では
|
|
次のようになります。
|
|
|
|
<PRE>
|
|
new_id = output of "SELECT nextval('person_id_seq')"
|
|
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>() 関数を使って取り出すこともできます。たとえば、
|
|
|
|
<PRE>
|
|
INSERT INTO person (name) VALUES ('Blaise Pascal');
|
|
new_id = currval('person_id_seq');
|
|
</PRE>
|
|
|
|
最後に、<small>INSERT</small>文から返る<A HREF="#4.17"><small>OID</small></A>を使って、既定値をみつけることもできますが、しかし、これは最も移植性の低いやり方でしょう。PerlのDBIで Edmund Mergl の作った DBD::Pg モジュールを使えば、$sth->execute() の後に $sth->{pg_oid_status} を経由してその OID 値を使えるようにすることはできます。
|
|
|
|
<P>
|
|
<H4><A NAME="4.15.3">4.15.3</A>) 他のユーザとの競合状態を避けるためには、<I>currval()</I> と <I>nextval()</I> は使わないほうがよいのでしょうか?
|
|
</H4>
|
|
|
|
<P>それはありません。Currval() は、すべてのユーザではありませんが、あなたのバックエンドに与えられた現在の値を返します。
|
|
|
|
|
|
<H4><A name="4.15.4">4.15.4</A>) トランザクションが中断したときにもうい
|
|
ちどシーケンス番号が使われないのはなぜですか?シーケンス/SERIALカラムに
|
|
空きがあるのはなぜですか?
|
|
</H4>
|
|
|
|
<P>同時性を改善するために、実行中のトランザクションに、必要でト
|
|
ランザクションが終了するまでロックされないシーケンス値を与えています。
|
|
このためトランザクションが中断されると番号割り当てにギャップを生じます。
|
|
</P>
|
|
|
|
<P>
|
|
<H4><A NAME="4.16">4.16</A>) <small>OID</small> とは何ですか? <small>TID</small> とは何ですか?
|
|
</H4>
|
|
|
|
<P> <small>OID</small> とは一意の行 ID に対する PostgreSQL の答えです。PostgreSQL の中でつくられるすべての行は一意の <small>OID</small> を得ます。<I>initdb</I> で発生される <small>OID</small> はすべて 16384 (<I>backend/access/transam.h</I> から)より小さな値です。<I>initdb</I> 後のすべての <small>OID</small> (ユーザ作成)はそれ以上の値になります。
|
|
既定では、これらすべての <small>OID</small>は一つのデーブルやデータベース内に留まらず、PostgreSQL インストレーション全体の中で一意です。
|
|
|
|
<P> PostgreSQL はテーブル間の行を結びつけるために、そのシステムテーブル内に <small>OID</small> を使います。この <small>OID</small> は特定のユーザの行を識別するためや結合の中で使われることができます。<small>OID</small> の値を保存するためには <I>OID</I> 型を列に使うことを奨めます。より速くアクセスするために <I>OID</I> フィールドにインデックスを作ることができます。
|
|
|
|
O<small>ID</small> は、全てのデータベースで使われる中央領域から、全ての新しい行に割り当てられます。<small>OID</small> を他の何かに変えたい、あるいは元の <small>OID</small> もテーブルと一緒にコピーしたいのなら、できなくはありません。
|
|
|
|
|
|
<PRE>
|
|
CREATE TABLE new (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<small>ID</small> は、4バイトの整数として保存されているので、40億を越えると溢れてしまうでしょう。誰もこれが起きたと報告してくる人はいませんでしたが、そうなる前にこの制限を取り除くことを計画しています。
|
|
|
|
<P> T<small>ID</small> は特定の物理行をそのブロックとオフセット値で識別するために使われます。<small>TID</small> は行が修正されたり再ロードされると変わります。それらの <small>TID</small> は、物理行を指すためにインデックス記載で使われます。
|
|
|
|
<P>
|
|
<H4><A NAME="4.17">4.17</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> <small>OID</small>, 連番(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.18">4.18</A>) エラーメッセージ <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>が出るのはなぜですか?
|
|
</H4>
|
|
<P>
|
|
もし、7.1 よりも古いバージョンをお使いの場合は、アップデートによってこの問題を
|
|
解決できるでしょう。それと、システムの仮想メモリーを全て使い果たしてしまっている可能性があるか、カーネルがあるリソースについてもつ制限値が低すぎる可能性があります。
|
|
<I>postmaster</I> を始動する前にこれを試してみて下さい:
|
|
|
|
<PRE>
|
|
ulimit -d 262144
|
|
limit datasize 256m
|
|
</PRE>
|
|
|
|
<P>
|
|
シェルによって、どちらかひとつが成功するでしょうが、これはプロセスのデータセグメント制限をより高く設定し、たぶん問い合わせが完結するようになるでしょう。このコマンドは現行のプロセスと、このコマンドを走らせた後に作られる全てのサブプロセスについて適用されます。バックエンドがとても多くのデータを返すために<small>SQL</small> クライアントで問題が続いているのであれば、クライアントを開始する前にこれを試してみてください。
|
|
|
|
<P>
|
|
<H4><A NAME="4.19">4.19</A>) どのバージョンの PostgreSQL を走らせているかを調べるにはどうしますか?<BR>
|
|
</H4>
|
|
<P>
|
|
<I>psql</I> から <tt>select version();</tt> をタイプします。
|
|
<P>
|
|
|
|
|
|
<H4><A NAME="4.20">4.20</A>) ラージ・オブジェクトの操作で<I>invalid large obj descriptor</I> を受け取りました。なぜでしょうか?
|
|
</H4>
|
|
|
|
<P>ラージ・オブジェクト操作をするときは、前後に<tt>BEGIN WORK</tt>と<tt>COMMIT</tt>を付ける必要があります。すなわち、<tt>lo_open</tt> ... <tt>lo_close</tt>をはさみ込みます。
|
|
|
|
<P>現在は、PostgreSQLのトランザクションのコミット時にラージ・オブジェクト・ハンドルを閉じることにより、<I>lo_open</I>コマンドが完了した直後に強制的にルールを実行します。このため、最初にハンドルに対して何かをしようとすると、<I>invalid large obj descriptor(ラージオブジェクトの記述子が不正)</I>となります。それで、もし、トランザクションを使うのを忘れると、(少なくともほとんどの時間)働いていたコードがエラーメッセージを出すのです。
|
|
|
|
<P>もし、<small>ODBC</small>のようなクライアントインターフェースをお使いなら、<tt>auto-commit off</tt>を設定する必要があるかもしれません。
|
|
<P>
|
|
|
|
|
|
<H4><A NAME="4.21">4.21</A>) 現在の時刻がデフォルトとなるような列はどのようにつくりますか?<BR></H4>
|
|
|
|
<P><i>CURRENT_TIMESTAMP</i>を使います:
|
|
<PRE>
|
|
CREATE TABLE test (x int, modtime timestamp DEFAULT >CURRENT_TIMESTAMP );
|
|
</PRE>
|
|
<P>
|
|
|
|
|
|
<H4><A NAME="4.22">4.22</A>) なぜ、<small>IN</small>を使う副問い合わせがとても遅いのですか?
|
|
</H4>
|
|
<P>
|
|
現在、外部問い合わせの各行について副問い合わせの結果を順番にスキャンすることにより、副問い合わせを外部問い合わせに結合しています。当面は<small>IN</small>を<small>EXIST</small>Sで置き換えることです:
|
|
<PRE>
|
|
<STRONG>SELECT *</STRONG>
|
|
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.23">4.23</A>) <i>外部</i>結合(<i>outer</i> join)はどのように実現しますか?<BR></H4>
|
|
<P>
|
|
PostgreSQL 7.1 以降では<small>SQL</small>標準構文を使う外部結合(アウタージョイン)をサポートします。ここに、例題が2つあります。
|
|
|
|
<pre>
|
|
<STRONG>SELECT *</STRONG>
|
|
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);</pre>
|
|
あるいは
|
|
<pre>
|
|
<STRONG>SELECT *</STRONG>
|
|
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> などの結合を仮定されています。
|
|
|
|
以前のリリースでは外部結合(outer join)を<small>UNION</small> と <small>NOT IN</small> を使ってシミュレートできます。
|
|
たとえば、<i>tab1</i> と <i>tab2</i> を結合するときは、次の問い合わせで二つのテーブルを<i>外部</i>結合します。
|
|
|
|
<PRE>
|
|
SELECT tab1.col1, tab2.col2
|
|
FROM tab1, tab2
|
|
WHERE tab1.col1 = tab2.col1
|
|
<STRONG>UNION ALL</STRONG>
|
|
SELECT tab1.col1, NULL
|
|
FROM tab1
|
|
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
|
|
ORDER BY col1
|
|
</PRE>
|
|
|
|
<P>
|
|
<H4><A NAME="4.24">4.24</A>) 複数のデータベースを使う問い合わせはどのようにすればできますか?<BR></H4>
|
|
|
|
<P>
|
|
現行(current)を除いて、データベースへの問い合わせ方法はありません。というのもPostgreSQLがデータベース仕様のシステムカタログを読み込むためで、そこには、たとえそのふりをするだけにしろ、データベースを越えて問い合わせをするすべがありません。
|
|
<P>
|
|
もちろん、クライアントは同時に異なる複数のデータベースへ接続してそこにある情報をマージすることはできます。
|
|
|
|
<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> を行なわなくてはなりません。もし、<small>GCC</small> をお使いであれば <i>configure</i> の <i>--enable-depend</i> オプションを使って、コンパイラに依存関係を自動的に調べさせることもできます。
|
|
|
|
|
|
<HR>
|
|
|
|
<small><PRE>
|
|
[訳注:
|
|
日本語版の製作については以下の通りです。
|
|
|
|
最終更新日: 2002年04月05日
|
|
翻訳者: 桑村 潤 (<A HREF="mailto:juk@postgresql.jp">Jun Kuwamura <juk@postgresql.jp></A>)
|
|
|
|
このFAQの和訳の作成にあたり協力をしてくださった方々(敬称は略させていただきます):
|
|
|
|
田仲 稔(<A HREF="mailto:Tanaka.Minoru@keiken.co.jp">Minoru Tanaka <Tanaka.Minoru@keiken.co.jp></A>)
|
|
石井 達夫(<A HREF="mailto:t-ishii@sra.co.jp">Tatsuo Ishii <t-ishii@sra.co.jp></A>)
|
|
齊藤 知人(<A HREF="mailto:tomos@elelab.nsc.co.jp">Tomohito Saitoh <tomos@elelab.nsc.co.jp></A>)
|
|
馬場 肇(<A HREF="mailto:baba@kusastro.kyoto-u.ac.jp">Hajime Baba <baba@kusastro.kyoto-u.ac.jp></A>)
|
|
岡本 一幸(<A HREF="mailto:kokamoto@itg.hitachi.co.jp">Kazuyuki Okamoto <kokamoto@itg.hitachi.co.jp></A>)
|
|
小菅 昭一(<A HREF="mailto:s-kosuge@str.hitachi.co.jp">Shoichi Kosuge <s-kosuge@str.hitachi.co.jp></A>)
|
|
山下 義之(<A HREF="mailto:dica@eurus.dti.ne.jp">Yoshiyuki Yamashita <dica@eurus.dti.ne.jp></A>)
|
|
境 真太郎(<A HREF="mailto:s_sakai@mxn.mesh.ne.jp">Sintaro Sakai <s_sakai@mxn.mesh.ne.jp></A>)
|
|
生越 昌己(<A HREF="mailto:ogochan@zetabits.com">Masami Ogoshi <ogochan@zetabits.com></A>)
|
|
石川 俊行(<A HREF="mailto:tosiyuki@gol.com">Toshiyuki Ishikawa <tosiyuki@gol.com></A>)
|
|
本田 茂広(<A HREF="mailto:fwif0083@mb.infoweb.ne.jp">Shigehiro Honda <fwif0083@mb.infoweb.ne.jp></A>)
|
|
せせ じゅん(<A HREF="mailto:sesejun@linet.gr.jp">Jun Sese <sesejun@linet.gr.jp></A>)
|
|
神谷 英孝(<A HREF="mailto:hkamiya@catvmics.ne.jp">Hidetaka Kamiya <hkamiya@catvmics.ne.jp></A>)
|
|
|
|
をはじめ、ポストグレスに関する話題豊富な<A HREF="http://www.sra.co.jp/people/t-ishii/PostgreSQL/ML/info.html">日本語ポストグレス・メーリングリスト</A>、
|
|
和訳のきっかけを作ってくれた <A HREF="http://jf.linux.or.jp/">JF(Linux Japanese FAQ Mailing List)プロジェクト</A>、その他、
|
|
直接あるいは間接的にかかわっているすべてのオープンソースコミュニティーの
|
|
皆さんに感謝します。
|
|
|
|
|
|
日本語版のこの文書は、以下からもたどれます。
|
|
<A HREF="http://www.rccm.co.jp/~juk/pgsql/">http://www.rccm.co.jp/~juk/pgsql/</A>(FAQ和訳 PostgreSQL についてよくある質問)
|
|
<A HREF="http://www.linux.or.jp/JF/">http://www.linux.or.jp/JF/</A>(PostgreSQL-FAQ.j)
|
|
<A HREF="http://www.sra.co.jp/people/t-ishii/PostgreSQL/doc-jp/">http://www.sra.co.jp/people/t-ishii/PostgreSQL/doc-jp/</A>
|
|
|
|
なお、この和訳に関するご意見は(<A HREF="mailto:juk@postgresql.jp">juk@postgresql.jp</A>)までお寄せ下さい。
|
|
]
|
|
</PRE></small>
|
|
|
|
</BODY>
|
|
</HTML>
|
|
|