Commit 6e854146 authored by Bruce Momjian's avatar Bruce Momjian

Update Japanese FAQ.

Jun Kuwamura
parent 6dc7760a
PostgreSQL(ポストグレス・キュー・エル)についてよくある質問とその解答(FAQ)
PostgreSQL(ポストグレス・ゥ紂次Ε┘)についてよくある質問とその解答(FAQ)
原文最終更新日: Mon May 9 13:15:04 EDT 2005
原文最終更新日: Sun Jan 9 14:44:04 EST 2005
現在の維持管理者: Bruce Momjian (pgman at candle.pha.pa.us)
Maintainer of Japanese Translation: Jun Kuwamura (juk at PostgreSQL.jp)
現在の維持管理者: Bruce Momjian (pgman@candle.pha.pa.us)
Maintainer of Japanese Translation: Jun Kuwamura (juk at
PostgreSQL.jp)
この文書の最新版は http://www.postgresql.org/docs/faqs.FAQ.html で見ることがで
きます。
この文書の最新版は
http://www.postgresql.org/files/documentation/faqs/FAQ.html
で見ることがでい泙后
プラットホームに特有の質問については: http://www.postgresql.org/docs/faq/
に回答があります。
プラットホームに特佑亮遡笋砲弔い討:
http://www.postgresql.org/docs/faq/
に回答があります。
(以下、訳者による注釈を [訳注: と ] とで囲んで気靴泙后)
(以下、訳者による注釈を [訳注: と ] とで囲んで記します。)
[訳注:
日本語版製作についてのメモは最後尾へ移動しました
日本語版の製作については、この文書の最後をごらんください
日本語版のこの文書は 本家 "Docs" の "Frequently Asked Questions" の
ところに "Japanese FAQ" という見出であります。また、以下のサイトにも
あります。
http://www.PostgreSQL.jp/wg/jpugdoc/
http://www.rccm.co.jp/~juk/pgsql/
http://www.linux.or.jp/JF/
この和訳についてお気づい療世(juk at PostgreSQL.jp)までメールでお寄せ下さい。
2005年01月12日 桑村 潤
2005年05月18日 桑村 潤
]
_________________________________________________________________
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
一般的な質問
1.1) PostgreSQLとは何ですか? 何と読みますか?
1.2) PostgreSQLの著作権はどうなってますか?
1.3) PostgreSQLの動作するUnixプラットホームは?
1.4) Unix以外の移植版で使えるものは?
1.5) PostgreSQLはどこから入手でい泙垢
1.6) サポートはどこで受けられますか?
1.7) 最新版はどれですか
1.8) どのような文書がありますか?
1.9) 既知のバグや未だ無い機能はどうやって見つけますか?
1.10) SQLはどうすれば学べますか?
1.11) PostgreSQLは西暦2000年問題(Y2K)に対応していますか?
1.12) 開発チームにはどのように参加しますか?
1.13) バグレポートはどのように発信しますか?
1.14) 他のDBMSと比べてPostgreSQLはどうなのですか?
1.15) PostgreSQLを資金面で援助するにはどうすればよいですか?
1.1) PostgreSQLとは何ですか?何と読みますか?
1.2) PostgreSQLの著作権はどうなってますか?
1.3) PostgreSQLをサポートするプラットホームは?
1.4) PostgreSQLはどこから入手できますか?
1.5) サポートはどこで受けられますか?
1.6) バグレポートはどのように発信しますか?
1.7) 最新版はどれですか
1.8) どのような文書がありますか?
1.9) 既知のバグや未だ無い機能はどうやって見つけますか?
1.10) SQLはどうすれば学べますか?
1.11) 開発チームにはどのように参加しますか?
1.12) 他のDBMSと比べてPostgreSQLはどうなのですか?
1.13) 誰が PostgreSQL をコントロールしますか?
ユーザー・クライアントの質問
2.1) PostgreSQL の ODBC ドライバーはありますか?
2.2) PostgreSQL を Web
ページと連携させるにはどんなツールがありますか?
2.3) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか?
2.4) どのような言語で PostgreSQL と通信でい垢
2.1) PostgreSQL にはどんなインターフェースが使えますか?
2.2) PostgreSQL を Web ページと連携させるにはどんなツールがありますか?
2.3) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか?
管理上の質問
3.1) どのようにすれば /usr/local/pgsql 以外の場所にインストールでき
ますか?
3.2) postmaster を走らせると、 Bad System Call
とかコア・ダンプしたとのメッセージが出ます。なぜですか?
3.3) postmaster を走らせようとすると、 IpcMemoryCreate
エラーが出ます。なぜですか?
3.4) postmasterを走らせようとすると、 IpcSemaphoreCreate
エラーが出ます。なぜですか?
3.5) 他のホストからの接続はどのように制御しますか?
3.6) より良い性
能を得るためには、データベース・エンジンをどのように調整すれば良いです
か?
3.7) どのようなデバグ機能が使えますか?
3.8) 接続しようとするとい 'Sorry, too many clients'
が出るのはなぜですか?
3.9) pgsql_tmp ディレクトリの中には何がありますか?
3.10)
PostgreSQLのメジャーリリースをアップデートするのにダンプとリストアをし
なくてはならないのはなぜですか?
3.11) ハードウェアにはどんなコンピュータを使えばよいですか?
3.1) どうすれば、PostgreSQLを/usr/local/pgsql 以外の場所にインストールできます
か?
3.2) 他のホストからの接続はどのように制御しますか?
3.3) より良い性能を得るためには、データベース・エンジンをどのように調整しますか
3.4) どのようなデバグ機能が使えますか?
3.5) 接続しようとするときに 'Sorry, too many clients' が出るのはなぜですか?
3.6) PostgreSQLのメジャーリリースをアップデートするのにダンプとリストアをしなく
てはならないのはなぜですか?
3.7) ハードウェアにはどんなコンピュータを使えばよいですか?
操作上の質問
4.1) バイナリ・カーソルと通常カーソルとの違いは何ですか?
4.2) 最初の数ロウのみを select するにはどうしますか? ランダムなロウ?
4.3) テーブルやその他の情報のリストを psql で見るにはどうしますか?
4.4)
テーブルからカラムの削除、あるいは、データ型を変更するにはどうしますか
4.5) ロウ、テーブル、データベースの最大サイズは?
4.6) 一般的なテキ
ストファイルからデータを保存するには、データベースのディスク容量はどの
くらい必要ですか?
4.7)
定義されたテーブル、インデックス、データベース、および、ユーザをどのよ
うにして見つけ出しますか?
4.8)
問い合わせが遅いうえ、インデックスを使っている様子がありません。なぜで
すか?
4.9)
問い合わせオブティマイザがどのように問い合わせを評価するかを見るにはど
うしますか?
4.10) R-tree インデックスとは何ですか?
4.11) 遺伝的問い合わせ最適化とは何ですか?
4.12)
正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように
実現しますか?大文字と小文字とを区別しない検索のためのインデックスはど
のように使いますか?
4.13) 問い合わせの中で、フィールドが NULL
であることを検出するにはどうしますか?
4.14) 色々な文字型のそれぞれの違いは何ですか?
4.15.1) 通番(serial)/自動増分フィールドはどのようにつくりますか?
4.15.2) SERIALデータ型に挿入される値は、どうすれば得られますか?
4.15.3) currval() は他のユーザとの競合状態に陥ることはないですか?
4.15.4) トランザクションが中断したとき
にもういちどシーケンス番号が使われないのはなぜですか?シーケンス/SERI
ALカラムに空い△襪里呂覆爾任垢
4.16) OID とは何ですか? TID とは何ですか?
4.17) PostgreSQL で使われるいくつかの用語の意味は何ですか?
4.18) エラーメッセージ "ERROR: Memory exhausted in
AllocSetAlloc()"が出るのはなぜですか?
4.19) どのバージョンの PostgreSQL
を走らせているのかを調べるにはどうしますか?
4.20) ラージオブジェクトの操作で、invalid large obj
descriptorと出るのはなぜですか?
4.21)
現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか?
4.22) なぜ、INを使う副問い合わせがとても遅いのですか?
4.23) 外部結合(outer join)はどのように実現しますか?
4.24) 複数のデータベースを使う問い合わせはどのようにすればでい泙垢
4.25) 関数で複数のロウまたはカラムを返すにはどうしますか?
4.26) なぜ、PL/PgSQL 関数の中から一時テーブルを確実に create/drop
することがでい覆い里任靴腓Δ
4.27) どのような暗号化オプションを利用でい泙垢?
PostgreSQLの拡張についての質問
5.1) 自分で書いたユーザ定義関数を psql
の中で実行するとコア・ダンプしてしまうのはなぜですか?
5.2) PostgreSQL
用に書いたちょっと素敵な新しい型や関数を提供してプロジェクトに貢献した
いのですが?
5.3) タプルを返す C言語の関数はどのように書い泙垢
5.4)
ソース・ファイルを変更しました。再コンパイルしても変化が見られないのは
なぜですか?
_________________________________________________________________
4.1) 最初のいくつかのロウのみを select するにはどうしますか?ランダムなロウ?
4.2) 定義されたテーブル、インデックス、データベース、および、ユーザをどのように
して見つけ出しますか?
4.3) カラムのデータタイプを変更するにはどうしますか?
4.4) ロウ、テーブル、データベースの最大サイズは?
4.5) 一般的なテキストファイルのデータを保存するには、データベースのディスク容量
はどのくらい必要ですか?
4.6) クエリが遅いのはなぜでしょう?なぜ、インデックスが使われないのでしょうか?
4.7) クエリオプティマイザが、どのようにクエリを評価していかを、見るにはどうしま
すか?
4.8) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現
しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使い
ますか?
4.9) クエリの中で、フィールドがNULL であることを検出するにはどうしますか?フィ
ールドがNULLかどうかでどのようにソートができますか?
4.10) いろいろな文字型のそれぞれの違いは何ですか?
4.11.1) 通番(serial)/自動増分フィールドはどのようにつくりますか?
4.11.2) SERIALデータ型に挿入される値は、どうすれば得られますか?
4.11.3) currval() は他のユーザとの競合状態に陥ることはないですか?
4.11.4) トランザクションが中断したときにもういちどシーケンス番号が使われないの
はなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか?
4.12) OID とは何ですか? TID とは何ですか?
4.13) エラーメッセージ "ERROR: Memory exhausted in AllocSetAlloc()"が出るのはな
ぜですか?
4.14) どのバージョンの PostgreSQL を走らせているのかを調べるにはどうしますか?
4.15) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか?
4.16) 外部結合(outer join)はどのように実現しますか?
4.17) 複数のデータベースを使う問い合わせはどのようにすればできますか?
4.18) 関数から複数のロウまたはカラムを返すにはどうしますか?
4.19) PL/PgSQL の関数の中で一時テーブルにアクセスするとき、どうして "relation
with OID ##### does not exist" というエラーを受け取るのでしょうか?
4.20) どのようなレプリケーションのソリューションがありますか?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
一般的な質問
1.1) PostgreSQL とは何ですか? 何と読みますか?
PostgreSQLはPost-Gres-Q-L(ポスト - グレス - ゥ紂 - エル)
と発音します。
PostgreSQL は次世代 DBMS 研究用のプロトタイプであった POSTGRES
データベース管理システムの改良版です(このため、今でもとい匹
"Postgres" と呼ばれることがあります)。PostgreSQL は POSTGRES
の強力なデータ・モデルと豊
富なデータ・タイプ(型)を保持しながら、POSTGRES で使われた PostQuel
問い合わせ言語を、拡張した SQL のサブセットに置き
換えています。PostgreSQL は無料で完全なソースを利用でい泙后
PostgreSQL の開発は、PostgreSQL
開発メーリングリストに参加している開発者達のチームですべて行なわれてい
ます。現在の座長は Marc G. Fournier (scrappy@PostgreSQL.org
)です。(下気1.6節に参加の仕方があります。)現在、このチームが
PostgreSQL
開発のすべての面倒をみています。このチームはコミュニティプロジェクトで
あり、いかなる企業によっても制御を受けません。参加したければ、
http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html
にある開発者向けのFAQを見てください。
Postgres95-1.01 の中心的な開発者は Andrew Yu と Jolly Chen
でしたが、その他大勢の人々がこのコードの移植、テスト、デバグ、および、
改良に参加しました。PostgreSQL の派生元コードである Postgres
はカリフォルニア大学バークレイ校において、 Michael Stonebraker
教授の指揮のもと、多くの学生、卒業生、本職のプログラマたちの努力により
作られました。
バークレイにおけるこのソフトウェアのもとの名前は Postgres
でしたが、SQL の機能が追加された 1995 年にその名前は Postgres95
に変更され、1996 年の終りにその名前は PostgreSQL に変更されました。
1.2) PostgreSQL の著作権はどうなってますか?
PostgreSQL は下気涼邯△暴召い泙后
1.1) PostgreSQL とは何ですか?何と発音しますか?
PostgreSQLはPost-Gres-Q-L(ポスト - グレス - キュー - エル) と発音します。
また、単純に Postgres とも呼ばれます。
PostgreSQL はオブジェクト-リレーショナルデータベースシステムで、伝統的な商用デ
ータベースシステムに、次世代DBMSシステムに見られるような改良が施された特徴を有
します。PostgreSQLは、無料で完全なソースコードを手に入れることができます。
PostgreSQL の開発は、ほとんどが、世界中にひろがったボランティアの開発者によって
、インターネットを通したコミュニケーションによって行われています。コミュニティ
によるプロジェクトであるため、どの企業の制御もうけません。開発に参加したければ
、 http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html にある開発者
のFAQを見てください。
1.2) PostgreSQL の著作権はどうなってますか?
PostgreSQL は下記の著作権に従います。
[訳注:
正文は英語です。参考として、訳文を併儀悩椶靴泙后
正文は英語です。参考として、訳文を併記掲載します。
]
PostgreSQL Data Base Management System
Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
Portions Copyright (c) 1994-6 Regents of the University of California
Permission to use, copy, modify, and distribute this software and its
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.
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.
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.
PostgreSQL Data Base Management System
Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group Portions
Copyright (c) 1994-1996 Regents of the University of California
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.
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.
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.
POSTGRESQL データベース管理システム
部分的著作権 (c) 1996-2004, PostgreSQL国際開発チーム
部分的著作権 (c) 1994-6 カリフォルニア大学本校
部分的著作権 (c) 1996-2005, PostgreSQL国際開発チーム
部分的著作権 (c) 1994-1996 カリフォルニア大学本校
本ソフトウェアおよびその文書一式は上気涼邯充┐函△海諒絃
本ソフトウェアおよびその文書一式は上記の著作権表示と、この文章
およびこれに続く二つの段落が全ての複製に添付されている限りにおい
て、使用、複製、修正および配付の許可を、いかなる目的であっても、
無償でかつ同意書無しに行なえることをここに認めます。
......@@ -230,117 +157,67 @@
を受けていたとしても、一切の責任を負いません。
カリフォルニア大学は、商用目的における暗黙の保証と、特定目的で
の適合世亡悗靴討呂發箸茲蝓△海譴蕕妨造蕕此△い覆詈歉擇睚
の適合性に関してはもとより、これらに限らず、いかなる保証も放棄す
ることを明言します。以下に用意されたソフトウェアは「そのまま」を
基本原理とし、カリフォルニア大学はそれを維持、支援、更新、改良あ
るいは修正する義務を負いません。
[訳注:
著作権に関する正文は上気留儻譴砲茲詆週です。日本語訳はあくまで
著作権に関する正文は上記の英語による表記です。日本語訳はあくまで
参考です。
]
上気BSDライセンスで古ぅ璽廛鵐宗璽垢離薀ぅ札鵐垢任后宗璽好魁璽
がどのように使われようとも制限しません。好ましいことなので、我々もそれ
を 変えるつもりはありません。
1.3) PostgreSQL の動作環兇蓮
1.3) PostgreSQL の動作環境は?
一般的に、最近のUnix互換プラットホームであればPostgreSQLを稼働させられ
るはずです。リリースの時点で実際にテストを行なったことの報告がなされた
プラットホームについてはインストール手引書に列挙してあります。
一般的に、最近のUnix互換プラットホームであればPostgreSQLを稼働させられるはずで
す。リリースの時点で実際にテストを行なったことの報告がなされたプラットホームに
ついてはインストール手引書に列挙してあります。
1.4) Unix以外の移植版で使えるものは?
PostgreSQL は、Win2000, WinXP, そして、Win2003 のような Microsoft Windows NTベ
ースのオペレーティングシステムで、ネイティブに走ります。あらかじめパッケージに
されたインストーラが http://pgfoundry.org/projects/pginstaller にあり、利用でき
ます。MSDOSベースのWindowsのバージョン(Win95, Win98, WinMe)では、Cygwinを使って
PostgreSQL を走らせることができます。
バージョン8.0になり、PostgreSQL は、Win2000, WinXP, Win2003などの
Microsoft Windows
NTベースのオペレーティングシステムでネイティブに走るようになりました。
パッケージになったインストーラが、http://pgfoundry.org/projects/pginst
allerから入手でい泙后 Windows (Win95, Win98,
WinMe)など、MSDOSベースのバージョンでは、Cygwin
を使ってPostgreSQLを走らせることがでい泙后
[訳注
pgInstaller の入手はFTPミラーサイトの win32 ディレクトリからも可能です。
http://www.postgresql.org/mirrors-ftp.html
]
次のサイトに Novell Netware 6 への移植もあります。
http://forge.novell.com また、OS/2 (eComStation) バージョンは、
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
SQL&stype=all&sort=type&dir=%2Fにあります。
1.5) PostgreSQL はどこから入手でい泙垢
PostgreSQL の大元の anonymous ftp サイトは
ftp://ftp.PostgreSQL.org/pub/ です。
ミラーサイトについては、我々のメイン Web ページをご覧下さい。
[訳注:
以下は日本のミラーサイトです:
Japan: ftp://ftp.jp.postgresql.org/
Japan: ftp://mirror.nucba.ac.jp/mirror/PostgreSQL/pub/
Japan: ftp://ring.ip-kyoto.ad.jp/pub/misc/db/PostgreSQL/
Japan: ftp://ring.crl.go.jp/pub/misc/db/PostgreSQL/
Japan: ftp://ring.saitama-u.ac.jp/pub/misc/db/PostgreSQL/
Japan: ftp://ring.astem.or.jp/pub/misc/db/PostgreSQL/
Japan: ftp://ring.exp.fujixerox.co.jp/pub/misc/db/PostgreSQL/
Japan: ftp://ring.jah.ne.jp/pub/misc/db/PostgreSQL/
Japan: ftp://ring.etl.go.jp.jp/pub/misc/db/PostgreSQL/
Japan: ftp://ring.asahi-net.or.jp/pub/misc/db/PostgreSQL/
Japan: ftp://ring.so-net.ne.jp/pub/misc/db/PostgreSQL/
Japan: ftp://ring.aist.go.jp/pub/misc/db/PostgreSQL/
詳しくは、次の Windwos版に関するFAQの和訳をごらんください。
http://www.postgresql.jp/wg/jpugdoc/FAQ_windows.ja.html
]
1.6) サポートはどこで受けられますか?
主要なメーリング・リストは:
pgsql-general@PostgreSQL.orgです。PostgreSQL
に関することであれば議論ができ
ます。このリストへの参加は、電子メールの本文(Subject
行ではありません)に次の2行を書いて、
subscribe
end
pgsql-general-request@PostgreSQL.org へ送って下さい。
ダイジェスト版のメーリング・リストもあります。このリストへの参加は
"本文"に:
subscribe
end
次のサイトに Novell Netware 6 への移植版もあります。 http://forge.novell.com ま
た、OS/2 (eComStation) バージョンは、 http://hobbes.nmsu.edu/cgi-bin/h-search?
sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2Fにあります。
と書いて pgsql-general-digest-request@PostgreSQL.org
へ電子メールを送って下さい。
ダイジェスト版は、メインリストで受信するメッセージが 30k
程度溜る毎にダイジェスト版リストのメンバーに送付されます。
1.4) PostgreSQL はどこから入手できますか?
バグレポート用のメーリングリストもあります。このリストへの参加は
"本文" に:
subscribe
end
Webブラウザ経由だと、 http://www.postgresql.org/ftp/、それから、ftp経由だと、
ftp://ftp.PostgreSQL.org/pub/ を使います。
と書いてpgsql-bugs-request@PostgreSQL.org へ電子メールを送って下さい。
1.5) サポートはどこで受けられますか?
開発者の議論のためのメーリングリストも利用でき
ます。このリストへの参加は電子メールの本文に:
subscribe
end
PostgreSQL コミュニティは多くのユーザのために、電子メール経由の支援を提供してい
ます。電子メールリストをサブスクライブするためのメインとなるウェブサイトは
http://www.postgresql.org/community/lists/です。これから、始めるのであれば
general または、bugs といったリストがよいでしょう。
と書いて、pgsql-hackers-request@PostgreSQL.orgへ電子メールを送って下さ
い。
The major IRC channel is #postgresql on Freenode (irc.freenode.net). To connect
you can use the Unix program irc -c '#postgresql' "$USER" irc.freenode.net or
use any other IRC clients. A Spanish one also exists on the same network, (#
postgresql-es), and a French one, (#postgresqlfr). There is also a PostgreSQL
channel on EFNet.
PostgreSQL についてもっと詳しく知りたければ、次の PostgreSQL
WWWホームページからたどれます:
メジャーなIRC チャンネルは、Freenode (irc.freenode.net)の #postgresql というチ
ャンネルです。UNIX コマンドでは、 irc -c '#PostgreSQL' "$USER" irc.freenode.net
を使って参加できます。同じネットワークに、スペイン語のチャンネル (#
postgresql-es)もあり、フランス語のチャンネル (#postgresqlfr)もあります。EFNetに
もPostgreSQLチャンネルがあります。
http://www.PostgreSQL.org
メジャーなIRC チャンネルは、Freenode (irc.freenode.net)の #PostgreSQL
というチャンネルです。 UNIX コマンドで、 irc -c '#PostgreSQL' "$USER"
irc.freenode.net. を使って参加でい泙后
同じネットワークに、スペイン語のチャンネル(#postgresql-es)もあ
り、フランス語のチャンネル(#postgresqlfr)もあります。
EFNetにもPostgreSQLチャンネルがあります。
[訳注:
1999年7月23日、日本ポストグレスユーザー会、略称JPUGが設立されました。
JPUG は非営利組織で、PostgreSQLを利用する人達の相互協力の場となっています。
......@@ -348,81 +225,100 @@
正会員の会費は無料ですが、協賛会員の会費と会員の積極的な貢献が会の運営を助けています。
詳しくは、JPUG のWeb サイト:
http://www.PostgreSQL.jp/
をごください。会員登録も可能となっています。
をごらんください。会員登録も可能となっています。
日本語のIRCチャンネル '#PostgreSQL*jp' も存在します。
商用サポート会社のリストはhttp://techdocs.postgresql.org/companies.php
にあります。
1.7) 最新版はどれですか
商用サポート会社のリストは http://techdocs.postgresql.org/companies.phpにありま
す。
PostgreSQL の最新版はバージョン 7.4.6 です。
1.6) バグレポートはどのように発信しますか?
我々は、6〜8カ月毎にメジャーリリースを行なうことを計画しています。
http://www.postgresql.org/support/submitbug のPostgreSQL バグフォームを訪れてく
ださい。バグレポートを提出する仕方についての手引と指針があります。
1.8) どのような文書がありますか?
それと同時に ftp サイト ftp://ftp.PostgreSQL.org/pub/ で、最新バージョンの
PostgreSQL を探してみてください。
配付の中に、いくつかのマニュアルとオンライン・マニュアル(マニュアル・
據璽)およびいくつかの小さなテスト例題が含まれます。/doc
ディレクトリをご覧下さい。また、マニュアルは、http://www.ca.PostgreSQL
.org/docs/でオンラインでも閲覧でい泙后
[訳注:
(株)SRAと日本PostgreSQLユーザ会で翻訳され、
「PostgreSQL オフィシャルマニュアル」
として出版されています。
]
1.7) 最新版はどれですか
PostgreSQL の最新版はバージョン 8.0.3 です。
我々は、1年毎にメジャーリリースを行ない、数ヵ月ごとのマイナーリリースをを計画し
ています。
1.8) どのような文書がありますか?
配付の中に、いくつかのマニュアルとオンライン・マニュアル(マニュアル・ページ)お
よびいくつかの小さなテスト例題が含まれます。 /docディレクトリをごらんください。
また、マニュアルは、 http://www.PostgreSQL.org/docs/でオンラインでも閲覧できま
す。
オンラインで参照でい PostgreSQL
の本も2冊あります。http://www.PostgreSQL.org/docs/awbook.html
[訳注:
日本ポストグレスユーザー会の 「PostgreSQL Book翻訳分科会」
にて翻訳されました。
JPUG 文書・書籍関連分科会で翻訳されたマニュアルもあります。
http://www.postgresql.jp/document/pg803doc/
インプレスから、
PostgreSQLオフィシャルマニュアルとして出版されています。
]
および、 http://www.commandprompt.com/ppbook/ です。
購入可能な書籍の目録は、http://techdocs.PostgreSQL.org/techdocs/bookre
views.php にあります。 PostgreSQL 技術情報記
事も、http://techdocs.PostgreSQL.org/ にあります。
オンラインで参照できる PostgreSQL の本も2冊あります。 http://www.PostgreSQL.org
/docs/awbook.html
[訳注:
和訳文書は、日本ポストグレスユーザー会のhttp://www.postgresql.jp/docum
ent/ をごらん下さい。 ]
JPUG「PostgreSQL Book翻訳分科会」
で翻訳され、ピアソンから
「はじめてのPostgreSQL」として出版されました。
]
コマンドラインのクライアントプログラムpsql
も、型、演算子、関数、集約、その他の情報をお見せする、いくつかの素晴ら
しい \d コマンドを持ちます。 - \?
を使うと利用可能なコマンドが表示されます。
我々の Web サイトには、もっと沢山の文書があります。
および、 http://www.commandprompt.com/ppbook/です。
1.9) 既知のバグや未だ無い機能はどうやって見つけますか?
[訳注:
邦訳は「実践 PostgreSQL」
がオライリーから出版されています。
]
PostgreSQLは拡張されたSQL-92のサブセットをサポートします。
我々のページの TODO リストに、既知のバグや欠落機能や将
来計画についての欺劼△蠅泙后
1.10) SQL はどうすれば学べますか?
購入可能な書籍の目録は、http://techdocs.PostgreSQL.org/techdocs/bookreviews.php
にあります。 PostgreSQL 技術情報記事も、http://techdocs.PostgreSQL.org/ にあり
ます。
http://www.PostgreSQL.org/docs/awbook.html にあるPostgreSQL本で SQL
を教えています。
[訳注:
日本ポストグレスユーザー会の 「PostgreSQL Book翻訳分科会」
にて翻訳され出版されています
日本語の書籍等についてはは、日本PostgreSQLユーザ会の、http://www.postgresql.jp/PostgreSQL/references.html
もごらんください
]
その他にも PostgreSQL本として、http://www.commandprompt.com/ppbook
があります。
素晴らしい手引書は、http://www.intermedia.net/support/sql/sqltut.shtm,
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,
そして、http://sqlcourse.com にあります。
その他では、 "Teach Yourself SQL in 21 Days, Second Edition" が
http://members.tripod.com/er4ebus/sql/index.htmにあります。
コマンドラインのクライアントプログラムpsql も、型、演算子、関数、集約、その他の
情報をお見せする、いくつかの素晴らしい \d コマンドを持ちます。 - \? を使うと利
用可能なコマンドが表示されます。
我々の Web サイトには、さらに沢山の文書があります。
1.9) 既知のバグや未だ無い機能はどうやって見つけますか?
PostgreSQLは拡張されたSQL-92のサブセットをサポートします。我々のページの TODO
リストに、既知のバグや欠落機能や将来計画についての記述があります。
1.10) SQL はどうすれば学べますか?
まず、上記で述べた PostgreSQL についての本を読むことを検討してください。もうひ
とつは、 "Teach Yourself SQL in 21 Days, Second Edition" at http://
members.tripod.com/er4ebus/sql/index.htmです。
The Practical SQL Handbook, Bowman Judith S. et al., Addison-Wesley が多くのユ
ーザに好評です。ほかでは、The Complete Reference SQL, Groff et al., McGraw-Hill
も好評です。
素晴らしい手引書は、http://www.intermedia.net/support/sql/sqltut.shtm, http://
ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM, そして、http://
sqlcourse.com にあります。
多くのユーザに、 The Practical SQL Handbook, Bowman Judith S. et al.,
Addison-Wesley が好評です。 その他に、The Complete Reference SQL,
Groff et al., McGraw-Hill のようなのもあります。
[訳注:
石井達夫氏による日本語の参考文献の紹介ページ
http://www.SRA.co.jp/people/t-ishii/PostgreSQL/doc-jp/index.html
......@@ -432,536 +328,278 @@
があります(やや古い2000年版)。
堀田倫英氏の「PostgreSQL日本語マニュアル」
http://www.net-newbie.com/
ではオンラインマニュアルの検索がでい泙后
ではオンラインマニュアルの検索ができます。
丸山不二夫氏のUNIX データベース入門
http://www.wakhok.ac.jp/DB/DB.html
もオンラインで読むことがでい泙后
もオンラインで読むことができます。
Nikkei BP IT Pro にある石井達夫氏の PostgreSQL ウォッチ
では毎回新しい情報をとりあげています。
]
1.11) PostgreSQLは西暦2000年問題(Y2K)に対応していますか?
対応してます。西暦2000年より後の日付も、紀元前2000年より前の日付も、簡
単に扱えます。
1.12) 開発チームにはどのように参加しますか?
まず最初(1番目)に、最新のソースをダウンロードし、我々の Web
サイトか配布に含まれているPostgreSQL Developersの文書を読みます。
2番目に、pgsql-hackers と pgsql-patches
メーリング・リストを購読(subscribe)します。
3番目に、高品質のパッチをpgsql-patchesに発信します。
およそ十人ちょっとの人達が、PostgreSQL
CVSアーカイブにコミットする権限を持っています。
そのそれぞれの人達が沢山の高品質なパッチを発信するので、現在コミッター
となっている人達はそれに追い付くのが大変ですが、我々は彼らがコミットし
たパッチは高品質であると確信しています。
1.13) バグレポートはどのように発信しますか?
http://www.postgresql.org/support/submitbug のPostgreSQL
バグフォームを訪れて下さい。
バグレポートを提出する仕方についての手引と指針があります。
それと同時に ftp サイト
ftp://ftp.PostgreSQL.org/pub/で、もっと新しいバージョンの PostgreSQL
あるいはパッチをさがしてみて下さい。
1.14) 他のDBMSと比べてPostgreSQLはどうなのですか?
ソフトウェアを計る方法にはいくつかあります。機能と税修反蠕
とサポートと価格です。
機能(Features)
PostgreSQLは、トランザクション、副問い合わせ、トリガー、ビュー
杏凜ー整合性
参照、および、洗練されたロック機構など、大規模商用DBMSが持つ機
修鬚曚箸鵑瓢辰討い泙后気蕕
PostgreSQLは、ユーザ定義型、継承、ルール、それから、ロック競合
鮟名垢襯泪襯船弌璽献腑麁瓜
制御など、商用DBMSも持ち合わせないような機能をいくつか持ち合わ
擦討い泙后
税(Performance)
PostgreSQLは他の商用あるいはオープンソースのデータベースと互角
能も持ちます。ある面ではより早かったり、ほかの面ではより遅かっ
燭蠅靴泙后MySQLなどの特化型データベース・システムにくらべて、P
ostgreSQL は複数ユーザや複雑な問い合わせ、また、 read/write
問い合わせのロードがより高速です。MySQLは少ないユーザでの単純な
SELECT 問い合わせでは高速です。もちろん、MySQLには上記
のFeaturesの節に示すような機能はほとんどありません。我々は、Pos
tgreSQLに柔軟世筏’柔を組み込みながらも、絶えず性
能の改善を続けています。
信頼(Reliability)
我々は、DBMSの信頼性
が高くなくてはその価値が無いことを理解してます。十分テストして
堕蠅靴織魁璽匹鬟丱阿鮑脳砲靴討薀螢蝓璽垢垢襪茲Δ謀悗瓩討
す。それぞれのリリースは少なくとも1カ月以上のベータ・テストを行
ない、これまでのリリースの履歴が、製品版として安定した堅固なリ
蝓璽垢任△襪海箸鯤譴辰討い泙后海諒遒任蓮召離如璽織戞璽
と比べても遜色がないことに自信を持っています。
サポート(Support)
我々のメーリングリストは、遭遇するいかなる問題についても解決へ
亮蟒韻鬚靴討譴襦圓筌罅璽兇梁腓
な集まりへの接点を提供しています。我々は問題の解決を保証するこ
箸呂任
ませんが、商用データベースであっても常に解決されるわけではあり
泙擦鵝3圓筺▲罅璽供Ε灰潺絅縫謄▲泪縫絅▲詢燹△修譴法▲
ースコードなどへ直接アクセスでき
ることによって、PostgreSQLのサポートは、他のDBMSサポートよりも
イ譴燭發里箸覆辰討い泙后8耆徊召謀┐董∋阻茲両ν僖汽檗璽箸
どもあります(FAQ1.6節をご覧下さい)。
価格(Price)
PostgreSQLの利用は、商用でも非商用でも、すべて無料です。上記
に示してあるBSDスタイルの使用許諾に外れない限り、PostgreSQLのコ
ードを制限無しで商品に組み込むことがでい泙后
1.15) PostgreSQLを資金面で援助するにはどうすればよいですか?
PostgreSQLは、我々が始めた 1996年以来、最高クラスの情報基盤を持ってい
ます。これはすべて、Marc
Fournieさんのおかげで、彼はこの基盤を創り出し、何年にもわたって管理し
討ました。
質の良い基盤は、オープンソース・プロジェクトにとってはとても大切なもの
で、プロジェクトが前進する勢いを失って分裂するのを回避します。
もちろん、この基盤は安いものではありません。維持し続けるためには毎月あ
るいは一時的に経費がかかります。もし、あなたやあなたの会社に、こうした
努力のための資金の援助を施すことができ
るようでしたら、http://store.pgsql.com/shopping/から寄付をお願いします
また、Webページには PostgreSQL,Inc とありますが、そこの
"貢献(contributions)"という項目は、 PostgreSQL
プロジェクトを支援するだけのためで、決して特定の会社のための資金ではあ
りません。もし、小切手(check)の方が都合よければ連絡先の住所へお送り下
気ぁ
さらに、PostgreSQLを使った成功事例をお持ちであれば、ぜひ、われわれの
事例紹介リスト pgsql-advocacy@postgresql.org へお送りください。
_________________________________________________________________
ユーザー・クライアントの質問
2.1) PostgreSQL のための ODBC ドライバーはありますか?
1.11) 開発チームにはどのように参加しますか?
(開発者向けの)Developer's FAQをごらんください。
1.12) 他のDBMSと比べPostgreSQLはどうなのですか?
ソフトウェアを計る方法にはいくつかあります。機能と性能と信頼性とサポートと価格
です。
機能(Features)
PostgreSQLは、トランザクション、サブクエリ、トリガー、ビュー、外部キー整合
性参照、および、洗練されたロック機構など、大規模商用 DBMSが持つ機能をほとん
ど持っています。さらに PostgreSQLは、ユーザ定義型、継承、ルール、それから、
ロック競合を縮小するマルチバージョン同時性制御など、商用DBMSも持ち合わせな
いような機能をいくつか持ち合わせています。
性能(Performance)
PostgreSQLは他の商用あるいはオープンソースのデータベースと互角の性能も持ち
ます。ある面ではより早かったり、ほかの面ではより遅かったりします。他のデー
タベースに比べた性能は、ふつう +/-10% くらいでしょう。
信頼性(Reliability)
我々は、DBMSの信頼性が高くなくてはその価値が無いことを理解してます。十分テ
ストして、安定したコードをバグを最小にしてからリリースするように努めてます
。それぞれのリリースは少なくとも1 カ月以上のベータ・テストを行ない、これま
でのリリースの履歴が、製品版として安定した堅固なリリースであることを物語っ
ています。この分野では、他のデータベースと比べても遜色がないことに自信を持
っています。
サポート(Support)
我々のメーリングリストは、遭遇するいかなる問題についても解決への手助けをし
てくれる、開発者やユーザの大きな集まりへの接点を提供しています。我々は問題
の解決を保証することはできませんが、商用データベースであっても常に解決され
るわけではありません。開発者や、ユーザ・コミュニティ、マニュアル類、それに
、ソースコードなどへ直接アクセスできることによって、PostgreSQLのサポートは
、他のDBMS サポートよりも優れたものとなっています。御要望に答えて、事柄毎の
商用サポートなどもあります(FAQ1.5節をごらんください)。
価格(Price)
PostgreSQLの利用は、商用でも非商用でも、すべて無料です。上記に示してあるBSD
スタイルの使用許諾に外れない限り、PostgreSQLのコードを制限無しで商品に組み
込むことができます。
1.13) 誰が PostgreSQL をコントロールしますか?
PostgreSQLの門番、中央委員会、あるいは、コントロールをする会社を探そうとしても
、諦めざるをえず ---- 存在しないのです。我々は、中心となるコミッティとCVSコミッ
タを持ちますが、これらのグループはコントロールするためというよりも、管理上のも
のです。ここでは、プロジェクトは、だれでも参加ができる開発者とユーザのコミュニ
ティにより方向付けられます。読者がやらなければならないことは、メーリングリスト
をサブスクライブして、議論に参加することです。(Developer's FAQには、PostgreSQL
開発に加わり方についての情報があります。)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PsqlODBC と OpenLink ODBC の二つの ODBC ドライバーが利用可能です。
ユーザー・クライアントの質問
PsqlODBC は次の場所からダウンロードでい泙后
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php
2.1) PostgreSQL にはどんなインターフェースが使えますか?
OpenLink ODBC は http://www.openlinksw.com/から入手でい泙后I現狹
ODBC
クライアント・ソフトウェアで使えますので、支援しているすべてのプラット
ホーム(Win, Mac, Unix, VMS)から PostgreSQL の ODBC が利用でい泙后
PostgreSQL のインストールに含まれる物はCと組込み Cのインターフェースだけです。
その他のインターフェースは独立したプロジェクトで、別々にダウンロードされます。
分かれることで、それぞれの開発チームが独自のリリーススケジュールを持つことが許
されます。
たぶん彼らは、商用品質のサポートの必要な人々に売っていると思いますが、
フリーウェア版はいつでも入手可能のようです。質問は、postgres95@openlin
k.co.uk へ送って下さい。
PHP のようないくつかのプログラミング言語は、 PostgreSQLのインターフェースを含ん
でいます。Perl, TCL, Python, そして、そのほかの利用可能な言語のインターフェース
は、 http://gborg.postgresql.org の Drivers/Interfaces の節の中とインターネット
の検索でみつけられます。
Programmer's Guide の ODBC の章もご覧ください。
2.2) PostgreSQL を Web ページと連携させるにはどんなツールがありますか?
2.2) PostgreSQL を Web ページと連携させるにはどんなツールがありますか?
データベースを裏に持つ Web ページについての素晴らしい紹介が、
http://www.webreview.comにあります。
データベースを裏に持つ Web ページについての素晴らしい紹介が、
http://www.webreview.comにあります。
Web への拡張のためには、PHP(http://www.php.net/) が卓越したインターフェイスとな
っています。
Web への拡張のためには、PHP
が卓越したインターフェイスとなっています。http://www.php.net/にありま
[訳注:
PHPに関する日本語の情報は、2000年4月19日に発造靴親PHPユーザ会のサイト
PHPに関する日本語の情報は、2000年4月19日に発足した日本PHPユーザ会のサイト
http://www.php.gr.jp/
あるいは、廣川 類さんのサイト
http://www.geocities.jp/rui_hirokawa/php/
にかなりまとめられています。
]
処理が複雑な場合、多くの人は Perl インターフェイスと CGI.pm か
mod_perl を使います。
[訳注:
WDB は、Web から DataBase への Perl の Interface です。
wdb-p95 へのリンクは切れてしまっています。おそらく、Perl DBI 経由で DBD::Pg の利用が可能と思われます。
現在、WDBI という名前になっているもの
http://www.egroups.com/list/wdb-users/
と、WDBの名前のままのもの
http://www.i-con.dk/wdb/
とがあります。その経緯はよくわかりません。
]
2.3) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか?
もちろん、PostgreSQL
へのグラフィカルインターフェイスがいくつかあります。 その中にPgAccess
http://www.pgaccess.org も含まれます。 PgAdmin III
(http://www.pgadmin.org)もあります。 RHDB Admin
(http://sources.redhat.com/rhdb/ )、TORA
(http://www.globecom.net/tora/ (部分的に商用)) および、 Rekall (
http://www.thekompany.com/products/rekall/, proprietary)もありま す。
PhpPgAdmin ( http://phppgadmin.sourceforge.net/ )
はPostgreSQLへのWebベースの インターフェイスを提供します。
より詳細なリストについては、http://techdocs.postgresql.org/guides/GUIT
ools をご覧ください。
2.4) どのような言語で PostgreSQL と通信でい垢
人気のあるほとんどの言語はPostgreSQLへのインターフェイスを持っています
あなたが使うプログラミング言語の拡張モジュールのリストを覗いてみてくだ
さい。
以下のインターフェイスはPostgreSQLの配布に含まれています。
* C (libpq)
* 埋め込みC (ecpg)
* Java (jdbc)
* Python (PyGreSQL)
* TCL (libpgtcl)
その他の利用可能なインターフェイスは http://gborg.postgresql.org
のDrivers/Interfacesのセクションにあります。
[訳注:
永安悟史さんは Palm 版の libpq を開発されました。
http://www.snaga.org/libpq/
]
_________________________________________________________________
処理が複雑な場合、多くの人は Perl インターフェイスと CGI.pm か mod_perl を使い
ます。
2.3) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか?
もちろん、あります。詳細は、http://techdocs.postgresql.org/guides/GUITools をご
らんください。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
管理上の質問
3.1) どのようにすれば /usr/local/pgsql 以外の場所にインストールでい泙垢
簡単な方法は、 configure を走らせるとい --prefix
オプションを指定することです。
3.2) postmaster を走らせると、Bad System Call
とかコア・ダンプしたとのメッセージが出ます。なぜですか?
さまざまな問題が考えられますが、まず最初にあなたのカーネルに System V
IPC の拡張がインストールされているかを確認して見てください。PostgreSQL
はカーネルによる共優瓮皀蝓爾肇札泪侫離汽檗璽箸鯢廚箸靴泙后
3.3) postmaster を走らせようとすると、IpcMemoryCreate
エラーが出ます。なぜですか?
カーネルが共有
メモリーを持つ設定になっていなかったか、でなければ、カーネルに対して使
える共優瓮皀蝓爾梁腓さを大い瀋蠅垢詆廚△蠅泙后6饌療並腓
さは、使っているアーゥ謄船磴postmaster を走らせるとき
に設定するバッファの数とバックエンドプロセスに依存します。ほとんどのシ
ステムでは、既定値のバッファサイズのままで、少なくとも約1MBが必要です
PostgreSQL Administrator's Guide/Server Run-time
Environment/Managing Kernel Resources に共有
メモリーとセマフォについての情報の詳細がありますのでご覧ください。
3.4) postmasterを走らせようとすると、IpcSemaphoreCreate
エラーが出ます。なぜですか?
もしエラーメッセージがIpcSemaphoreCreate: semget failed (No space left
on
device)であれば、カーネルが十分なセマフォを使えるように構成されていま
擦鵝Postgresは潜在的なバックエンドプロセス毎に一つのセマフォを必要と
靴泙后箸蠅△┐困硫魴荳postmasterを起動するとき
に、バックエンドプロセスの数をより少なく制限をすることです。既定値の32
より小さな数のパラメータを-Nで使います。より恒久的な解決策は、カーネル
のSEMMNS と SEMMNI パラメータを増やすことです。
操作不能のセマフォも過度なデータベースアクセスの間にクラッシュを
起こす可能世△蠅泙后
もし、エラーメッセージがなにか他のものであれば、カーネルの構成でまった
くセマフォのサポートをしていないかもしれません。 PostgreSQL
Administrator's Guide に共有
メモリーとセマフォについての情報の詳細があります。
3.5) 他のホストからの接続はどのように制御しますか?
既定値では、PostgreSQL は Unix
ドメインソケット、または、TCP/IP接続のローカルマシンからの接続しか許し
ません。postgresql.conf の中の listen_addresses
を修正し、かつ、$PGDATA/pg_hba.conf
ファイルを適切に直して、ホスト主導型認証を有
効にしないかぎりは、他のマシンからは接続でい覆い任靴腓Α
3.6) より良い性
能を得るためには、データベース・エンジンをどのように調整すれば良いですか?
確かにインデックスは問い合わせの速度を増します。EXPLAIN
ANALYZEコマンドで PostgreSQL
がどのようにあなたの問い合わせを翻訳しているかを見ることができ
、そして、どのインデックスが使われているかを見ることがでい泙后
もし INSERT を多用している場合は、COPY コマンドを使って大き
なバッチ処理でそれを行なうことを検討して下さい。これは、INSERT
を別々に行なうよりもっと高速です。次に、BEGIN WORK/COMMIT
のトランザクション・ブロックの中に無い文は、それら自身がそれぞれのトラ
ンザクションに入っていると見なされます。いくつかの文を一つのトランザク
ション・ブロックの中で行なうことを考えて下さい。これによりトランザクシ
ョンのオーバーヘッドが減ります。また、大き
なデータの変更を行なう際はインデックスを一度外して、作り直すことを考え
てみて下さい。
Administration Guide/Server Run-time Environment/Run-time
Configurationには、
チューニングのオプションがいくつかあります。fsyncオプションでfsync()
を無効にすることがでい泙后海譴砲茲辰董謄肇薀鵐競轡腑麕茲
fsync() でディスクを更新するのを止めさせます。
shared_buffersオプションを使ってバックエンド・プロセスにより使われる共
優瓮皀蝓次Ε丱奪侫,鯊腓くすることもでき
ます。もし、このパラメータを高くしすぎると、カーネルの共有
メモリー空間の制限値を越えてしまうために postmaster
が走らなくなるでしょう。既定値では、それぞれのバッファの大い気 8K
で、バッファ数は 1000 です。
sort_mem (PostgreSQL 8.0からは:
work_mem)オプションを使って、それぞれのバックエンド・プロセスが一時的
癖造拌悗┐砲茲辰道箸Ε瓮皀蝓爾虜蚤腑汽ぅ困鯀笋垢海箸發任ます。
既定値は 1024 (すなわち、1MB)です。
また、CLUSTER
コマンドを使って、テーブルのデータをインデックスに合わせるためにグルー
プ化することもでい泙后椶靴蓮▲鵐薀ぅ鵐泪縫絅▲襪 CLUSTER
を見て下さい。
3.7) どのようなデバグ機能が使えますか?
PostgreSQL
は、デバグのために意味のある、状態情報を報告するいくつかの機能を持ちま
す。
まず、--enable-cassert オプションで configure
を走らせます。そうしてコンパイルすることにより、沢山の assert()
が、バックエンドの進捗状況を監視し、何か予期せぬことが起き
るとプログラムを停止するようになります。
postmaster と postgres
の両方でいくつかのデバグ・オプションの利用がでい泙后泙此⊆,里茲Δ
postmaster を起動するとき
はいつでも、標準出力とエラー出力をログ・ファイルに送るようにしてあるこ
とを確かめて下さい。
cd /usr/local/pgsql
./bin/postmaster >server.log 2>&1 &
これにより PostgreSQL の最上部のディレクトリに server.log
ファイルが置かれます。このファイルはサーバーが遭遇した問題やエラーにつ
いて様僂幣霾鵑魎泙澆泙后Postmaster は更に詳細な情報を報告するための
-d オプションを持ちます。その -d
オプションは、デバグ・レベルを指定します。高いデバグ・レベルでは、大き
なログファイルを生成することに注意しなくてはなりません。
もし、postmasterが走っていなければ、postgresバックエンドをコマンドライ
ンから走らせることがでぁ樟SQL文をタイプすることができ
ます。このやりかたは、デバグ目的のとき
だけお奨めします。セミコロンではなく、改行が問い合わせの終りになること
に注意してください。もし、デバグシンボルを入れてコンパイルしていれば、
デバッガを使って何が起い討い襪鮓襪海箸任ます。postmaster
からバックエンドを開始したわけではないので、独立な環境
で走っているのではなくロック/バックエンドとの対話の問題が重複すること
はありません。
もし、postmasterが走っていれば、あるウィンドウでpsqlを開始すると、SELE
CT pg_backend_pid()を使って、psql で使われる postgres
プロセスのPIDが見つかります。
デバッガを使ってpostgresのPIDにアタッチ(attach)します。デバッガの中か
薀屮譟璽Ε櫂ぅ鵐箸鬟札奪箸掘psql
から問い合わせを発行します。デバグのためにpostgresを始動する場合は、PG
OPTIONS="-W n" を設定でぁ△修譴蕁psql を開始します。これにより、n
秒開始を遅らせるはずなので、デバッガでプロセスにアタッチして、ブレーク
ポイントを設定し、開始から順を追って見てゆくことがでい泙后
いくつかのlog_*サーバ構成変数は、デバッグと性
能測定にとても役に立つプロセスの統計の印刷を可能にします。
何という関数がどのくらい実行時間を食っているかを見るために、プロファイ
リング(プロフィール付き
)でコンパイルすることも可能です。そのバックエンドのプロフィール・ファ
イルは pgsql/data/base/dbname
ディレクトリに格納されるでしょう。クライアントのプロフィールはクライア
ントの現行ディレクトリに置かれるでしょう。Linux
でまともなプロファイリングを行うには -DLINUX_PROFILE
でコンパイルする必要があります。
3.8) 接続しようとするとい 'Sorry, too many clients' が出るのはなぜですか?
postmasterが同時始動でき
るバックエンドプロセスに対する制限数を増やす必要があります。
既定の最大プロセスは32プロセスです。-Nに適切な値を引数にしてpostmaster
を再起動するか、PostgreSQL.conf
を修正することによって、その値を増やすことがでい泙后
もし、-N を 32よりも大い垢襪里任△譴弌-Bも既定の64より大き
い値に増加させなくてはならないし、-B は少なくとも -N
の2倍はなくてはならず、おそらく最高税修鯔召爐覆蕕个修譴茲蠡腓
い値が必要なはずです。バックエンドプロセスをたくさんにすると、いろいろ
なUnixカーネル構成パラメータも増やすことが必要になるかもしれません。
共優瓮皀蝓次Ε屮蹈奪虜蚤臙(SHMMAX)、
セマフォの最大数(SEMMNSとSEMMNI)、 プロセスの最大数(NPROC)、
ユーザ毎の最大プロセス数(MAXUPRC)、
開くファイルの最大数(NFILEとNINODE) も確認事項に含まれます。
PostgreSQLに許されるバックエンドのプロセス数が制限されているのは、
システムのリソースを使い果してしまうことを避けるためです。
3.9) pgsql_tmp ディレクトリの中には何がありますか?
問い合わせ実行モジュールによって生成された一時的なファイルが、このディ
レクトリに含まれます。例えば、もし ORDER BY
句を満たすためにバックエンドの -S パラメータで許可した値よりも大き
なスペースがソートの際に必要だとすると、溢れたデータを保持するために一
時的なファイルがいくつかここに生成されます。
一時的なファイルは自動的に消し去られるはずですが、もし、ソートの途中で
バックエンドがクラッシュしてしまうとそうはなりません。postmasterの停止
とリスタートでこれらのファイルはディレクトリから消しさられます。
[訳注:
SYSLOGD 経由でログを出力するには、まず、configure を --enable-syslog
付い覗蕕擦晋紂▲灰鵐僖ぅ襪肇ぅ鵐好函璽襪鮃圓覆い泙后
次に、syslog.conf に local?.* の 出力先を指定し(環曲竸瑤琶儿慌椎)、
syslogd に HUP シグナルを送って初期化しておい泙后修靴董
$PGDATA/pg_options に syslog=2 を加えて、 postmaster を -S
オプション付い砲謄機璽丱癲璽匹乃阿靴泙后(バージョン 7.1 からは
pg_options は PostgreSQL.conf になっています。)
]
3.1) どのようにすれば /usr/local/pgsql 以外の場所にインストールできますか?
3.10)
PostgreSQLのメジャーリリースをアップデートするのにダンプとリストアをしなく
討呂覆蕕覆い里呂覆爾任垢
PostgreSQLチームはマイナーリリースでは小さな変更しか行ないませんので、
7.2 から 7.2.1
へのアップグレードにはダンプとリストアの必要はありません。しかし、メジ
ャーリリース(たとえば、7.2から7.3へのような)では、システムテーブルやデ
ータファイルの内部フォーマットの変更をしばしば行ないます。これらの変更
はたいてい複雑で、そのため我々はデータファイルのための後方互換性
を維持することができ
ません。ダンプは汎用フォーマットでデータを出力し、それを新しい内部フォ
ーマットに読み込むことがでい泙后
ディスク上でのフォーマットに変更のない同一リリースでは、アップグレード
は、ダンプ/リストアではなく、pg_upgrade スクリプトを使うことができ
ます。リリースノートには、pg_upgrade が利用可能なリリースかどうか記
されています。
3.11) ハードウェアにはどんなコンピュータを使えばよいですか?
PCハードウェアはほとんど互換性
がありますので、ほとんどの人は、すべてのPCハードウェアが同じ品質だと思
い込む傾向があります。しかし、それは間違いです。ECC
RAM、SCSI、および、高品質マザーボードは、安いハードウェアに比べると、
茲蠖蠕が高く、より税修睥匹い里任后PostgreSQL
はほとんどのハードウェアで稼働しますが、信頼世篝
能が重要な場合は、ハードウェアのオプションを研究することが賢
明です。メーリングリストでもハードウェアオプションとトレードオフについ
て議論することがでい泙后
_________________________________________________________________
簡単な方法は、 configure を走らせるときに --prefix オプションを指定することです
操作上の質問
3.2) 他のホストからの接続はどのように制御しますか?
既定値では、PostgreSQL は Unix ドメインソケット、または、TCP/IP接続のローカルマ
シンからの接続しか許しません。postgresql.conf の中の listen_addresses を修正し
、かつ、$PGDATA/pg_hba.conf ファイルを適切に直して、ホスト主導型認証を有効にし
ないかぎりは、他のマシンからは接続できないでしょう。
3.3) より良い性能を得るためには、データベース・エンジンをどのように調整しますか
性能改善の可能性のありそうな主な領域が3つあります:
クエリの変更
クエリを修正してより良い性能を得ることを含みます:
□ 式および部分インデックスを含む、インデックスを作成
□ 複数のINSERTのかわりにCOPYを使用
□ 複数の文をグループ化し、1つのトランザクションにしてコミットのオーバヘッ
ドを削減
□ インデックスからから沢山のロウを取り出すときはCLUSTERを使用
□ クエリの出力のサブセットを返すためにLIMITを使用
□ 準備されているクエリを使用
□ オプティマイザの正確な統計を維持するためにANALYZEを使用
□ VACUUM または pg_autovacuum の常用
□ 大きなデータ変更のあるときはインデックスを削除
サーバ構成
postgresql.confの設定のいくつかは性能に影響します。詳しくは、
Administration Guide/Server Run-time Environment/Run-time Configuration の
全件リストごらんください( JPUGサイトの日本語版)。そして、解説として、 http:
//www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html および
、 http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html をごらんく
ださい。
ハードウェアの選定
性能におけるハードウェアの影響は http://candle.pha.pa.us/main/writings/
pgsql/hw_performance/index.html (JPUGサイトの日本語版) と http://
www.powerpostgresql.com/PerfList/ に述べられています。
3.4) どのようなデバグ機能が使えますか?
サーバ構成変数には多くの log_* があり、クエリとプロセスの統計を出力することがで
き、デバグと性能計測にとても便利です。
3.5) 接続しようとするときに 'Sorry, too many clients' が出るのはなぜですか?
既定での制限である 100 のデータベースセッションに達してしまっています。
postmasterが同時接続できるバックエンドプロセスの制限数を増やす必要があります。
postgresql.conf の中の max_connections の値を変更して postmasterを再起動するこ
とで可能になります。
3.6) PostgreSQLのメジャーリリースをアップデートするのにダンプとリストアをしなく
てはならないのはなぜですか?
PostgreSQLチームはマイナーリリースでは小さな変更しか行ないませんので、7.4.0 か
ら 7.4.1 へのアップグレードにはダンプとリストアの必要はありません。しかし、メジ
ャーリリース(たとえば、7.2から7.3へのような) では、システムテーブルやデータファ
イルの内部フォーマットの変更をしばしば行ないます。これらの変更はたいてい複雑で
、そのため我々はデータファイルのための後方互換性を維持することができません。ダ
ンプは汎用フォーマットでデータを出力し、それを新しい内部フォーマットに読み込む
ことができます。
4.1) バイナリ・カーソルと通常カーソルとの厳密な違いは何ですか?
3.7) ハードウェアにはどんなコンピュータを使えばよいですか?
詳述は、オンラインマニュアルで DECLARE を見て下さい。
PCハードウェアはほとんど互換性がありますので、ほとんどの人は、すべてのPCハード
ウェアが同じ品質だと思い込む傾向があります。しかし、それは間違いです。ECC RAM、
SCSI、および、高品質マザーボードは、安いハードウェアに比べると、より信頼性が高
く、より性能も良いのです。 PostgreSQL はほとんどのハードウェアで稼働しますが、
信頼性や性能が重要な場合は、ハードウェアのオプションを研究することが賢明です。
メーリングリストでもハードウェアオプションとトレードオフについて議論することが
できます。
4.2) 最初の数ロウのみを SELECTするにはどうしますか?ランダムなロウ?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
オンラインマニュアルでFETCHを見てください。あるいは、SELECT ...
LIMIT....を使ってみて下さい。
操作上の質問
4.1) 最初の数ロウのみを SELECTするにはどうしますか?ランダムなロウ?
たったの数行のロウを取り出すために、何行必要かがわかれば、 SELECT のときに
LIMIT を使います。 ORDER BYにインデックスがマッチした場合、まったくクエリが実行
されないこともあります。SELECT のときに何行が必要かを知らなければ、カーソルを使
いFETCHします。
たとえ、欲しいのは最初の数ロウだけでも、すべての問い合わせを評価しなく
てはならないかもしれません。ORDER BY
を持った問い合わせを使うことを考えてみて下さい。 もし、ORDER
BYに合ったインデックスがあるとすると
PostgreSQLは要求された最初の数ロウだけで評価でき
るかもしれませんが、でなれば、PostgreSQL
は意図したロウが生成されるまですべてのロウを評価しなければならないかも
しれません。
ランダムロウをSELECTするには、次の文を使います:
ランダムなロウをSELECTするには、次の文を使います:
SELECT col
FROM tab
ORDER BY random()
LIMIT 1;
4.3) テーブルやその他の情報のリストを psql で見るにはどうしますか?
psqlの中で、 \dt コマンドを使ってテーブルを見ます。psql
の中のコマンドの完全なリストには \?
を使えます。あるいは、psqlのソースコードのpgsql/src/bin/psql/describe.
cファイルを見ることもでき
て、その中にはpsqlのバックスラッシュコマンドの出力を生成するSQLコマン
匹泙泙譴討い泙后泙拭psqlを -E
オプションと一緒に開始すると、実行させたコマンドを実行するために使う問
い合わせを出力するようになります。PostgreSQLはまた、SQLi対応の
INFORMATION SCHEMA
インターフェースを用意していて、データベースについての情報を得るために
問い合わせを使うことがでい泙后
4.4)
テーブルからカラムの削除、あるいは、データ型を変更するにはどうしますか?
DROP COLUMN機能が、ALTER TABLE DROP COLUMN としてリリース7.3
に加えられました。それまでのバージョンでは、その代わりにこうします:
BEGIN;
LOCK TABLE old_table;
SELECT ... -- 削除したいカラム以外のカラムをすべて選択します。
INTO TABLE new_table
FROM old_table;
DROP TABLE old_table;
ALTER TABLE new_table RENAME TO old_table;
COMMIT;
4.2) 定義されたテーブル、インデックス、データベース、および、ユーザをどのように
して見つけ出しますか?psqlで使われているクエリを表示するにはどうしますか?
psql の中で \dtコマンドをを使ってテーブルを見ることができます。psqlの中で \? を
使って、コマンドの全リストを調べることができます。一方で、psql のソースコードで
、バックスラッシュコマンドを出力する pgsql/src/bin/psql/describe.c ファイルを読
むこともできます。その中には、 SQL コマンドを生成する部分も含まれます。また、
-E オプションを付けて psql を開始すると、入力されたコマンドを実行するためのクエ
リを印字出力するようになります。 PostgreSQLは SQL 準拠の INFORMATION SCHEMA イ
ンターフェースを提供しますので、データベースについての情報を問い合わせることも
できます。
pg_ で始まるシステムテーブルでもこれらを記述することができます。
psql -lを使うと全てのデータベースをリスとします。
それと、pgsql/src/tutorial/syscat.source を試してみてください。そこには、データ
ベースのシステムテーブルから情報を得るために必要な SELECT 文が沢山あります。
4.3) カラムのデータ型を変更するにはどうしますか?
カラムのデータ型の変更は 8.0 以降では、 ALTER TABLE ALTER COLUMN TYPE を使うこ
とにより間単になりました。
それより前のバージョンでは、以下のようにします:
カラムのデータタイプは次の文で変えられます:
BEGIN;
ALTER TABLE tab ADD COLUMN new_col new_data_type;
UPDATE tab SET new_col = CAST(old_col AS new_data_type);
ALTER TABLE tab DROP COLUMN old_col;
COMMIT;
これを行なったとき
は、抹消された行が使っているディスク空間を回収するためにVACUUM FULL
tabをしたほうが良いかもしれません。
4.5) ロウ、テーブル、データベースの最大サイズは?
制限は以下のとおりです。
データベースの最大サイズ? 制限無し (32 TB のデータベースも存在します)
テーブルの最大サイズ? 32TB
ロウの最大サイズ? 1.6TB
フィールドの最大サイズ? 1GB
テーブル内での最大ロウ数? 制限無し
テーブル内での最大カラム数? カラムの型により250-1600
テーブル内での最大インデックス数? 制限無し
もちろん、これらは実際は無制限ではなく、ディスク容量とメモリーやスワッ
プスペースの大い気砲茲蠕造気譴泙后能はこれらの値がことのほか大き
な時に煽りを受けます。
最大テーブルサイズの32TBはオペレーティングシステムによる巨大ファイルの
サポートは必要としません。巨大なテーブルは複数の1GBのファイルに分けて
歛犬気譴泙垢里如▲侫.ぅ襯轡好謄爐寮造禄斗廚任呂△蠅泙擦鵝
デフォルトのブロックサイズを32kにすることで、最大テーブルサイズと最大
薀狄瑤箸鬘看椶砲垢襪海箸任ます。
4.6) 一般的なテキ
ストファイルからデータを保存するには、データベースのディスク容量はどのくら
ど廚任后
普通のテゥ好肇侫.ぅ襪 PostgreSQL
のデータベースに保存するには、最大で約5倍のディスク容量を必要とします
例題として、各行に整数とテゥ好筏述を持つ 100,000行のファイルを考え
てみましょう。テキ
ストの文字列の平均長さを20バイトと仮定すると、フラット ファイルの大き
さは約2.8MB です。このデータを含む PostgreSQL データベース
ファイルの大い気麓,里茲Δ北6.4MBと見積もることがでい泙后
これを行なったときは、抹消された行が使っているディスク空間を回収するために
VACUUM FULL tabをしたほうが良いかもしれません。
4.4) ロウ、テーブル、データベースの最大サイズは?
制限は以下のとおりです:
データベースの最大サイズ? 制限無し (32 TB のデータベースも存在しま
す)
テーブルの最大サイズ? 32 TB
ロウの最大サイズ? 1.6TB
フィールドの最大サイズ? 1 GB
テーブル内での最大ロウ数? 制限無し
テーブル内での最大カラム数? カラムの型によって 250-1600
テーブル内での最大インデックス 制限無し
数?
もちろん、これらは実際は無制限ではなく、ディスク容量とメモリーやスワップスペー
スの大きさにより制限されます。性能はこれらの値がことのほか大きな時に煽りを受け
ます。
最大テーブルサイズの32TBはオペレーティングシステムによる巨大ファイルのサポート
は必要としません。巨大なテーブルは複数の1GBのファイルに分けて保存されますので、
ファイルシステムの制限は重要ではありません。
デフォルトのブロックサイズを32kにすることで、最大テーブルサイズと最大カラム数と
を4倍にすることができます。
4.5) 一般的なテキストファイルのデータを保存するには、データベースのディスク容量
はどのくらい必要です?
普通のテキストファイルを PostgreSQL のデータベースに保存するには、最大で約5倍の
ディスク容量を必要とします。
例題として、各行に整数とテキスト記述を持つ 100,000行のファイルを考えてみましょ
う。テキストの文字列の平均長さを20バイトと仮定すると、フラットファイルの大きさ
は約2.8MB です。このデータを含む PostgreSQL データベースファイルの大きさは次の
ように約6.4MBと見積もることができます:
32 bytes: 各ロウのヘッダ(概算)
24 bytes: 整数(int)フィールドとテゥ好(text)フィールド
24 bytes: 整数(int)フィールドとテキスト(text)フィールド
+ 4 bytes: ページ上のタップルへのポインタ
----------------------------------------
60 bytes per row
......@@ -978,551 +616,337 @@
735 database pages * 8192 bytes per page = 6,021,120 bytes (6 MB)
インデックスは、これほどのオーバヘッドは要求しませんが、インデックス付
けされるデータを含む以上、それなりに大い覆蠅泙后
NULLはビットマップとして保存されていて、それらがわずかにスペースを使い
ます。
4.7)
定義されたテーブル、インデックス、データベース、および、ユーザをどのように
靴童弔噂个靴泙垢
psql
にはいろいろなバックスラッシュ・コマンドがあり、こうした情報を表示しま
す。バックスラッシュ・コマンドの種類を見るには \?
を使って下さい。また、pg_ で始まるシステムテーブルにも記
述されています。さらに、psql -l
はすべてのデータベースをリスト表示します。
また、pgsql/src/tutorial/syscat.source
ファイルを走らせてみて下さい。それは、沢山の SELECT
文により必要な情報をデータベースのシステム・テーブルから取り出して例示
してくれます。
4.8)
問い合わせが遅いうえ、インデックスを使っている様子がありません。なぜですか
インデックスは自動的にすべての問い合わせで使われるわけではありません。
テー ブルが最小サイズより大き
く、問い合わせでそのわずかなパーセンテージのロウを
選択する時だけ、インデックスは使われます。これはインデックススキ
ャンによ
り起こされるランダムなディスクアクセスは、テーブルをストレートに読む順
次 走査よりも遅くなることがあるからです。
インデックスを使うかを決定するために、PostgreSQL はテーブルについ
ての統計情報を持たなければなりません。この統計情報は、VACUUM
ANALYZEまたは、単に ANALYZE を使って収集すること ができ
ます。統計情報を使ってオブティマイザはテーブルの中にあるロウ数を知
り、インデックスを使うべい侶萃蠅鬚茲蠕気靴任ます。統計情報は最適
な結合順や結合方法を決める上でも貴重なものもあります。統計情報の収集は
、 テーブルの内容がかわると毎に繰返しなされるべい任后
インデックスは、通常 ORDER BY や結合を行な
うためには使われません。順次スキ
ャンに続く明示的ソートは、巨大なテーブル のインデックススキ
ャンよりも普通は高速です。
しかし、ORDER BYと組み合わされたLIMIT
は、テーブルの小さな部分を返すためにたびたびインデックスを使うでしょう
。 実際、MAX() や MIN()
がインデックスを使わないとしても、このような値を ORDER BY と LIMIT
を使ってインデックスを使って取り出すことが可能です:
インデックスは、これほどのオーバヘッドは要求しませんが、インデックス付けされる
データを含む以上、それなりに大きくなります。
NULLはビットマップとして保存されていて、それらがわずかにスペースを使います。
4.6) クエリが遅いのはなぜでしょう?なぜ、インデックスが使われないのでしょうか?
インデックスは、すべてのクエリで使われるわけではありません。テーブルが最小サイ
ズより大きく、クエリでそのわずかなパーセンテージのロウを選択する時だけ、インデ
ックスは使われます。これはインデックススキャンにより起こされるランダムなディス
クアクセスは、テーブルをストレートに読む順次走査よりも遅くなることがあるからで
す。
インデックスを使うかを決定するために、PostgreSQL はテーブルについての統計情報を
持たなければなりません。この統計情報は、 VACUUMANALYZEまたは、単に ANALYZE を使
って収集することができます。統計情報を使ってオブティマイザはテーブルの中にある
ロウ数を知り、インデックスを使うべきかの決定をより正しくできます。統計情報は最
適な結合順や結合方法を決める上でも貴重なものもあります。統計情報の収集は、テー
ブルの内容がかわると毎に繰返しなされるべきです。
インデックスは、通常 ORDER BY や結合を行なうためには使われません。順次スキャン
に続く明示的ソートは、巨大なテーブルのインデックススキャンよりも普通は高速です
しかし、ORDER BYと組み合わされたLIMIT は、テーブルの小さな部分を返すためにたび
たびインデックスを使うでしょう。実際、MAX() や MIN() がインデックスを使わないと
しても、このような値をORDER BY と LIMIT を使ってインデックスを使って取り出すこ
とが可能です:
SELECT col
FROM tab
ORDER BY col [ DESC ]
LIMIT 1;
もし、オプティマイザが間違ってシーケンシャルスキ
ャンを選択したことに疑いがなければ、SET enable_seqscan TO
'off'を使ってインデックススキ
ャンでまちがいなく速くなっているかをテストをしてみてください。
LIKE あるいは ~ のようなワイルドカード演算 子は特別な環境
でしか使えません:
* 検索文字列が文字列の最初にいます。たとえば:
+ LIKE パターンが%で始まらない
+ ~ (正規表現) パターンは^で始まらなければならない
* 検索文字列を文字クラスから始めることはでい泙擦鵝燭箸┐弌[a-e]。
* ILIKE や ~* のような大文字と小文字を区別し
ない検索は使えません。そのかわり、このFAQの4.12節で説明する関数の
ぅ鵐妊奪垢箸┐泙后
* initdb においては、デフォルトでCロケールが使われな
くてはなりません。その理由は、Cロケール以外では次に大き
な文字を知ること ができ
ないからです。このような場合、LIKEインデクシングにだけ
働くような、特別なtext_pattern_opsインデックスを作成
することもでい泙后
8.0より前のリリースでは、インデックスは、データ型がちょうどインデック
垢離薀爐侶燭醗戝廚靴覆韻譴弌∋箸┐覆い海箸靴个靴个△蠅泙靴拭修
蕕int2, int8, および numeric 等のカラムのインデックスがそうです。
[訳注: 強制的にインデックスを使うには SET enable_seqscan = off
を実行します。 ]
4.9)
問い合わせオブティマイザがどのように問い合わせを評価するのかを見るにはどう
靴泙垢
オンラインマニュアルで EXPLAIN を見て下さい。
4.10) R-tree インデックスとは何ですか?
R-tree
インデックスは空間的なデータにインデックスを付けるために使われます。ハ
ッシュインデックスでは範囲の検索がでい泙擦鵝泙拭B-tree
インデックスでは、1次元でしか範囲の検索がでい泙擦鵝R-tree
インデックスであれば多次元のデータを扱えます。たとえば、もし R-tree
インデックスを point 型の属世防佞韻襪海箸任
るとするとシステムは、「長方形に囲まれた点をすべて選択する」というよう
な問い合わせに、より効率良く答えられます。
R-Tree の設計の原典となる権威ある論文は:
Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial
Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of
Data, 45-57.
この論文は、Stonebraker 教授の "Readings in Database Systems"
でも取り上げられています。
[訳注:
奈良先端大の石川佳治さんよりR-Tree関係の文献を紹介して頂い泙靴拭
日本語 Postgres ML のアーカイブから "Subject: [postgres95 801] spatialdata structures"
http://www.sra.co.jp/people/t-ishii/PostgreSQL/mhonarc/pgsql-jp/1996Oct/msg00007.html
をご覧下さい。
]
もし、オプティマイザが間違ってシーケンシャルスキャンを選択したことに疑いがなけ
れば、SET enable_seqscan TO 'off'に設定して、クエリをもう一度実行視、インデック
ススキャンがまちがいなく速くなっているかどうかをみてください。
組込みの R-Tree でポリゴンやボックスを操作でい泙后M静砲R-Tree
はもっと高い次元を操作するようにも拡張でい泙后村租砲蓮R-Tree
の拡張にはちょっとした作業が必要でして、現在、我々はそれをどのようにす
るかについての文書を持っていません。
[訳注:
R-Tree インデックスはGiSTで開発されています。
http://www.sai.msu.su/~megera/postgres/gist/
]
LIKE あるいは ~ のようなワイルドカード演算子は特別な環境でしか使えません:
・ 検索文字列が文字列の最初にききます。たとえば:
□ LIKE パターンが%で始まらない
□ ~ (正規表現) パターンは^で始まらなければならない
・ 検索文字列を文字クラスから始めることはできません。たとえば、[a-e]。
・ ILIKE や ~* のような大文字と小文字を区別しない検索は使えません。そのかわり
、このFAQの4.8節で説明する式インデックスが使えます。
・ initdb においては、デフォルトでCロケールが使われなくてはなりません。その理
由は、Cロケール以外では次に大きな文字を知ることができないからです。このよう
な場合、
LIKE
インデクシングにだけ働くような、特別な
4.11) 遺伝的問い合わせ最適化とは何ですか?
text_pattern_ops
GEQO モジュールは、沢山のテーブルを結合するとき
に、遺伝的アルゴリズム(GA)で問合わせを高速化します。これにより、しらみ
つぶしに探索を行なわなくても、大い雰觜(join queries)を扱うことができ
るようになります。
インデックスを作成することもできます。
4.12)
正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現
靴泙垢臺源半源箸魘菠未靴覆じ〆里燭瓩離ぅ鵐妊奪垢呂匹里茲Δ忙
いますか?
8.0より前のリリースでは、インデックスは、データ型がちょうどインデックスのカラム
の型と一致しなければ、使えないことがしばしばありました。おそらく、int2, int8,
および numeric 等のカラムのインデックスがそうです。
~演算子は正規表現照合を行ない、~*
は大文字と小文字を区別しない(case-insensitive)正規表現照合を行います。
大文字と小文字を区別しない LIKE 演算子を ILIKE といいます。
4.7) 問い合わせオブティマイザがどのように問い合わせを評価するのかを見るにはどう
しますか?
オンラインマニュアルで EXPLAIN を見てください。
4.8) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現
しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使い
ますか?
~演算子は正規表現照合を行ない、~* は大文字と小文字を区別しない
(case-insensitive)正規表現照合を行います。大文字と小文字を区別しない LIKE 演算
子を ILIKE といいます。
大文字と小文字を区別しない等値比較は次のように表現できる:
大文字と小文字を区別しない等値比較は次のように表現でい襦
SELECT *
FROM tab
WHERE lower(col) = 'abc';
標準インデックスでは使われず、しかしながら、もし関数インデックスを
作ったならそれが使われるでしょう。
標準インデックスでは使われず、しかしながら、もし、式インデックスを作ったならそ
れが使われるでしょう。
CREATE INDEX tabindex ON tab (lower(col));
4.9) クエリの中で、フィールドがNULL であることを検出するにはどうしますか?フィ
ールドがNULLかどうかでどのようにソートができますか?
以下のように、IS NULL と IS NOT NULLで、そのカラムをテストしてみます:
SELECT *
FROM tab
WHERE col IS NULL;
NULL状態でソートするには、IS NULL と IS NOT NULL の修飾子を ORDER BY 句の中で使
ってみます。true のものは false のものよりも高い値として並べられますので、次の
例では NULL の記載が結果リストの上部に置かれます。
4.13) 問い合わせの中で、フィールドが NULL
であることを検出するにはどうしますか?
SELECT *
FROM tab
ORDER BY (col IS NOT NULL)
カラムを IS NULL と IS NOT NULL とで試してみます。
4.10) いろいろな文字型のそれぞれの違いは何ですか?
4.14) 様々な文字型のそれぞれの違いは何ですか?
型 内部名 備考
VARCHAR(n) varchar 最大長のサイズを指定する、詰め物無し
CHAR(n) bpchar 指定された固定長となるように空白が詰められる
TEXT text 長さに特別な上限は無し
BYTEA bytea 可変長のバイト配列(null-byte safe)
"char" char 1文字
Type Internal Name Notes
--------------------------------------------------
VARCHAR(n) varchar 最大長のサイズを指定する、詰め物無し
CHAR(n) bpchar 指定された固定長となるように空白が詰められる
TEXT text 長さに上限の無いテゥ好
BYTEA bytea 可変長のバイト配列(null-byte safe)
"char" char 1文字
内部名にお目にかかるのは、システム・カタログを調べるときや、エラーメッセージを
受け取るときです。
内部名にお目にかかるのは、システム・カタログを調べるとき
や、エラーメッセージを受け取るとい任后
上記の型のうち最初の4つの型は "varlena" 型です(すなわち、ディスクの最初の4バ
イトがデータ長で、それの後に実際のデータが続きます)。このように実際の空間は宣言
された大きさよりも少し大きくなります。しかし、長い値は圧縮されるので、ディスク
上の空間は思ったよりも小さくなります。
上気侶燭里Δ塑能蕕裡瓦弔侶燭 "varlena"
型です(すなわち、ディスクの最初の4バイトがデータ長で、それの後に実際
離如璽燭海ます)。このように実際の空間は宣言された大い気茲蠅眈径腓
くなります。しかし、これらのデータ型はTOASTにより圧縮されたり複数ロウ
謀呂辰栃歛犬気譴燭蠅靴董▲妊好紊龍屬六廚辰燭茲蠑気覆蠅泙后
VARCHAR(n) は可変長の文字列を保存するのに最適ですが、保存できる文字列の長さに制
限があります。TEXT は長さに制限の無い文字列の保存のためのもので、最大で 1ギガバ
イトです。 CHAR(n)は、VARCHAR(n)が与えられた文字だけを保存するのに対し、ブラン
クを詰め込んでいつも同じ長さで文字列を保存するのに最適です。BYTEAは、部分的に
NULL のバイトを含むバイナリデータを保存するためのものです。これらのタイプは同じ
くらいの性能特性をもちます。
VARCHAR(n) は可変長の文字列を保存するのに最適ですが、保存でき
る文字列の長さに制限があります。TEXT
は長さに制限の無い文字列の保存のためのもので、最大で 1ギガバイトです。
CHAR(n)は、VARCHAR(n)が与えられた文字だけを保存するのに対し、ブランク
魑佑畊鵑任い弔眛韻個垢気琶源鵑鯤歛犬垢襪里忘播任后BYTEAは、部分
的にNULL
のバイトを含むバイナリデータを保存するためのものです。これらのタイプは
同じくらいの税銃胆をもちます。
4.11.1) 通番(serial)/自動増分フィールドはどのようにつくりますか?
4.15.1) 通番(serial)/自動増分フィールドはどのようにつくりますか?
PostgreSQL は SERIAL データ型をサポートします。カラム上にシーケンスを自動作成し
ます。たとえば、
PostgreSQL は SERIAL
データ型をサポートします。カラム上にシーケンスを自動作成します。たとえ
ば、
CREATE TABLE person (
id SERIAL,
name TEXT
);
は自動的に次のように翻訳されます:
は自動的に次のように翻訳されます:
CREATE SEQUENCE person_id_seq;
CREATE TABLE person (
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
name TEXT
);
[訳注:
CREATE UNIQUE INDEX person_id_key ON person ( id );
は、 7.3 からは自動的には行なわれなくなりました。
は、 7.3 以降は自動的には行なわれなくなりました。
]
通番についてのもっと詳しい情報は、オンラインマニュアルで
create_sequence をご覧下さい。
通番についてのもっと詳しい情報は、オンラインマニュアルで create_sequence をごら
んください。
また、各ロウのOIDフィールドを一意値として使うこともでき
ます。しかしながら、もしもデータベースをダンプしてリロードする必要があ
る場合は、OIDを温存するためにpg_dump で
-oオプションを使うか、または、COPY WITH
OIDSオプションを使う必要があります。
4.11.2) SERIALデータ型に挿入される値は、どうすれば得られますか?
4.15.2) SERIALデータ型に挿入される値は、どうすれば得られますか?
ひとつの方法は、nextval() 関数を使ってその値を挿入する前(before)に SEQUENCE オ
ブジェクトから次の SERIAL 値を取り出し、それから実際に挿入をすることです。
4.11.1 のテーブルの例を使うとすると、疑似言語ではこのようになります。
ひとつの方法は、nextval() 関数を使ってその値を挿入する前(before)に
SEQUENCE オブジェクトから次の SERIAL
値を取り出し、それから実際に挿入をすることです。4.15.1
のテーブルの例を使うとすると、疑似言語ではこのようになります。
new_id = execute("SELECT nextval('person_id_seq')");
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
そうして、new_id に保存した新しい値を他の問い合わせに(たとえば、person
テーブルに対する外部ァ(foreign
key)のように)使うとよいでしょう。自動的に作られたSEQUENCEオブジェクト
量樵阿蓮<table>_<serialcolumn>_seq のようになり、このうち、table と
serialcolumn はそれぞれテーブルの名前とSERIALカラムの名前です。
そうして、new_id に保存した新しい値を他のクエリ(たとえば、 person テーブルに対
する外部キー(foreign key)のように)使うとよいでしょう。自動的に作られたSEQUENCE
オブジェクトの名前は、<table>_<serialcolumn>_seq のようになり、このうち、table
と serialcolumn はそれぞれテーブルの名前とSERIALカラムの名前です。
あるいは、与えられたSERIAL値を、それが既定値として挿入された後で(after)、
currval() 関数を使って取り出すこともできます。たとえば、
あるいは、与えられたSERIAL値を、それが既定値として挿入された後で(after
)、 currval() 関数を使って取り出すこともでい泙后燭箸┐弌
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
new_id = execute("SELECT currval('person_id_seq')");
最後に、INSERT文から返るOIDを使って、既定値をみつけることもでき
ますが、しかし、oidの値は40億に達するともとに戻ってしまい、最も移植性
の低いやり方となるでしょう。Perl DBI の DBD::Pg
モジュールを使えば、$sth->execute() の後に $sth->{pg_oid_status}
を経由してその OID 値を使えるようにすることはでい泙后
4.15.3) currval() は他のユーザとの競合状態に陥ることはないですか?
それはありません。currval()
は、すべてのユーザではありませんが、あなたのバックエンドに与えられた現
在の値を返します。
4.15.4) トランザクションが中断したとき
にもういちどシーケンス番号が使われないのはなぜですか?シーケンス/SERIALカ
薀爐剖があるのはなぜですか?
同時性
を改善するために、実行中のトランザクションに、必要でトランザクションが
終了するまでロックされないシーケンス値を与えています。このためトランザ
クションが中断されると番号割り当てにギャップを生じます。
4.16) OID とは何ですか? TID とは何ですか?
OID とは一意のロウID に対する PostgreSQL の答えです。PostgreSQL
の中でつくられるすべてのロウは一意の OID を得ます。initdb で発生される
OID はすべて 16384 (include/access/transam.h
から)より小さな値です。initdb 後のすべての OID
(ユーザ作成)はそれ以上の値になります。 既定では、これらすべての
OIDは一つのデーブルやデータベース内に留まらず、PostgreSQL
インストレーション全体の中で一意です。
PostgreSQL
はテーブル間のロウを結びつけるために、そのシステムテーブル内に OID
を使います。この OID
は特定のユーザのロウを識別するためや結合の中で使われることができ
ます。OID の値を保存するためには OID
型をカラムに使うことを奨めます。より速くアクセスするために OID
フィールドにインデックスを作ることがでい泙后 OID
は、全てのデータベースで使われる中央領域から、全ての新しいロウに割り当
てられます。OID を他の何かに変えたい、あるいは元の OID
もテーブルと一緒にコピーしたいのなら、でい覆呂△蠅泙擦鵝
CREATE TABLE new_table(mycol int);
SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table;
COPY tmp_table TO '/tmp/pgtable';
COPY new_table WITH OIDS FROM '/tmp/pgtable';
DROP TABLE tmp_table;
OID
は、4バイトの整数として保存されているので、40億を越えると溢れてしまう
任靴腓ΑC發海譴
たと報告してくる人はいませんでしたが、そうなる前にこの制限を取り除くこ
とを計画しています。
TID
は特定の物理ロウをそのブロックとオフセット値で識別するために使われます
。TID はロウが修正されたり再ロードされると変わります。それらの TID
は、物理ロウを指すためにインデックス戯椶濃箸錣譴泙后
4.17) PostgreSQL で使われるいくつかの用語の意味は何ですか?
いくつかのソースコードや古い文書の中には、それぞの専門分野の中でもっと
一般的に使われる専門用語が使われています。
* テーブル(table)、関係(relation)、クラス(class)
* ロウ(row)、レコード(record)、タップル(tuple)
* カラム(column)、フィールド(field)、属(attribute)
* 取得(retrieve)、選択(select)
* 置換(replace)、更新(update)
* 追加(append)、挿入(insert)
* OID, 連番(serial value)
* ポータル(portal), カーソル(cursor)
* 領域変数(range variable)、テーブル名(table
name)、テーブル別名(table alias)
一般的なデータベース用語のリストは:http://hea-www.harvard.edu/MST/sim
ul/software/docs/pkgs/pgsql/glossary/glossary.html で見つけられます。
4.18) エラーメッセージ "ERROR: Memory exhausted in
AllocSetAlloc()"が出るのはなぜですか?
おそらく、システムの仮想メモリーを全て使い果たしてしまっている可能性
があるか、カーネルがあるリソースについてもつ制限値が低すぎる可能性
があります。 postmaster を始動する前にこれを試してみて下さい:
ulimit -d 262144
limit datasize 256m
4.11.3) currval() は他のユーザとの競合状態に陥ることはないですか?
それはありません。currval() は、すべてのユーザではありませんが、読者のセッショ
ンに与えられた現在の値を返します。
シェルによって、どちらかひとつが成功するでしょうが、これはプロセスのデ
ータセグメント制限をより高く設定し、たぶん問い合わせが完結するようにな
るでしょう。このコマンドは現行のプロセスと、このコマンドを走らせた後に
作られる全てのサブプロセスについて適用されます。バックエンドがとても多
くのデータを返すためにSQL
クライアントで問題が続いているのであれば、クライアントを開始する前にこ
れを試してみてください。
4.11.4) トランザクションが中断したときにもういちどシーケンス番号が使われないの
はなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか?
4.19) どのバージョンの PostgreSQL
を走らせているかを調べるにはどうしますか?
同時性を改善するために、実行中のトランザクションに、必要に応じてトランザクショ
ンが終了するまでロックされないようシーケンス値を与えています。このためトランザ
クションが中断されると番号割り当てにギャップを生じます。
psql から SELECT version(); をタイプします。
4.12) OID とは何ですか? CTID とは何ですか?
4.20) ラージ・オブジェクトの操作でinvalid large obj descriptor
を受け取りました。なぜでしょうか?
PostgreSQLでつくられるすべてのロウは、WITHOUT OIDS でつくられないかぎり一意の
OIDを得ます。 OIDは自動的に4バイトの整数で与えられ、それは、全インストレーショ
ンを通して一意な値となります。しかし、約40億でオーバーフローし、そして、OIDは重
複をしはじめます。PostgreSQLは内部システムテーブルを一緒にリンクするtためにOID
を使います。
ラージ・オブジェクト操作をするとい蓮∩宛紊BEGIN
WORKとCOMMITを付ける必要があります。すなわち、lo_open ...
lo_closeをはさみ込みます。
ユーザのテーブルのカラムに一意の番号を付けるためには、 OID ではなく SERIAL を使
うのが最もよいでしょう。SERIALの連番は1つのテーブル内でのみ一意になるからで、オ
ーバーフローを起こしにくいと考えられます。 8バイトのシーケンス値を保存するため
に、SERIAL8があります。
現在は、PostgreSQLのトランザクションのコミット時にラージ・オブジェクト
・ハンドルを閉じることにより、lo_openコマンドが完了した直後に強制的に
襦璽襪鮗孫圓靴泙后海里燭瓠∈能蕕縫魯鵐疋襪紡个靴堂燭鬚靴茲Δ箸垢襪
函invalid large obj descriptor(ラージ・オブジェクトの記
述子が不正)となります。それで、もし、トランザクションを使うのを忘れる
函◆幣覆箸發曚箸鵑匹了屐貌い討い織魁璽匹┘蕁璽瓮奪察璽犬鮟个
垢里任后
CTID は、特定の物理ロウをブロックとオフセットの値で識別するために使われます。
CTIDは、ロウが修正されたり再読込みされたときに変わります。また、物理ロウを差す
ためにインデックスの記載に使われます。
もし、ODBCのようなクライアントインターフェイスをお使いなら、auto-commi
t offを設定する必要があるかもしれません。
4.13) エラーメッセージ "ERROR: Memory exhausted in AllocSetAlloc()"が出るのはな
ぜですか?
4.21) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか?
おそらく、システムの仮想メモリーを全て使い果たしてしまっている可能性があるか、
カーネルがあるリソースについてもつ制限値が低すぎる可能性があります。postmaster
を始動する前にこれを試してみてください:
CURRENT_TIMESTAMPを使います:
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
ulimit -d 262144
limit datasize 256m
4.22) なぜ、INを使う副問い合わせがとても遅いのですか?
シェルによって、どちらかひとつが成功するでしょうが、これはプロセスのデータセグ
メント制限をより高く設定し、たぶんクエリが完結するようになるでしょう。このコマ
ンドは現行のプロセスと、このコマンドを走らせた後に作られる全てのサブプロセスに
ついて適用されます。バックエンドがとても多くのデータを返すためにSQL クライアン
トで問題が続いているのであれば、クライアントを開始する前にこれを試してみてくだ
さい。
7.4
より前のバージョンでは、副問い合わせは、副問い合わせの結果を外部問い合
わせの各ロウについて順次走査することによって、外部の問い合わせに結合さ
せられる。
副問い合わせがわずかなロウしか返さず、外部問い合わせが沢山のロウを返す
場合は、INが最も早いです。他の問い合わせを高速化するには、INをEXISTSに
置換します:
SELECT *
FROM tab
WHERE col IN (SELECT subcol FROM subtab)
4.14) どのバージョンの PostgreSQL を走らせているかを調べるにはどうしますか?
を、置ご垢┐董
SELECT *
FROM tab
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col)
psql から SELECT version(); をタイプします。
4.15) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか?
とします。 これが手っ取り早いですが、subcolは索引付ぅ薀爐任△襪戮
です。
CURRENT_TIMESTAMPを使います:
バージョン7.4以降では、INは、通常の問い合わせと同様の洗練されたジョイ
鵑竜蚕僂鮗尊櫃忙箸ぁEXISTSを使うことを好みます。
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
4.23) 外部結合(outer join)はどのように実現しますか?
4.16) 外部結合(outer join)はどのように実現しますか?
PostgreSQL は SQL 標準構文を使う外部結合(アウタージョイン)をサポートします。こ
こに 2つの例題があります。
PostgreSQL は SQL
標準構文を使う外部結合(アウタージョイン)をサポートします。ここに
2つの例題があります。
SELECT *
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
あるいは
あるいは
SELECT *
FROM t1 LEFT OUTER JOIN t2 USING (col);
これらの象徴的な問い合わせでは t1.col を t2.col と結合して、t1
の結合されなかったロウ(t2 と一致しなかったロウ)も返しています。RIGHT
結合は t2 の結合されなかったロウを加えるでしょう。FULL
結合は、一致したロウに t1 と t2
からは結合されなかったロウを返すでしょう。OUTER
という言葉はオプションで LEFT, RIGHT, または FULL
などの結合を仮定されています。通常、結合はINNER結合と呼ばれます。
以前のリリースでは外部結合(outer join)をUNION と NOT IN
を使ってシミュレートでい泙后 たとえば、tab1 と tab2 を結合するとき
は、次の問い合わせで二つのテーブルを外部結合します。
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
4.24) 複数のデータベースを使う問い合わせはどのようにすればでい泙垢
現行のデータベース以外への問い合わせ方法はありません。というのもPostgr
eSQLがデータベース仕様のシステムカタログを読み込むためで、そこには、た
とえそのふりをするだけにしろ、データベースを越えて問い合わせをするすべ
がありません。
contrib/dblink
はデータベース間(cross-database)の問い合わせを関数呼出しにより許します
。もちろん、クライアントは同時に接続を別のデータベースへも張らなくては
ならず、結果をクライアント側でマージしなくてはなりません。
4.25) 関数で複数のロウまたはカラムを返すにはどうしますか?
7.3では関数から、複数のロウや複数カラムを簡単に返せます。
http://techdocs.postgresql.org/guides/SetReturningFunctions。
4.26)なぜ、PL/PgSQL 関数の中から一時テーブルを確実に create/drop
することがでい覆い里任靴腓Δ
PL/PgSQL は関数の内容をゥ礇奪轡紊掘△修良垤壁醉僂里燭瓠△發
PL/PgSQL
関数が一時テーブルにアクセスすると、そのテーブルはあとでドロップされ再
作成されますが、関数が再び呼び出されると、キ
ャッシュされているその関数の内容はまだ古い一時テーブルを依然として指し
ているからです。解決策は、 PL/PgSQL の中で EXECUTE
を一時テーブルアクセスのために使うことです。これで、毎回問い合わせをパ
ースし直すことになるでしょう。
4.27) どのような暗号化オプションを利用でい泙垢?
* contrib/pgcryptoにはSQL問い合わせの中で使うための沢山の暗号化を含
澆泙后
* クライアントとサーバとの間の伝送を暗号化するには、サーバではpostgr
esql.confのsslオプションをtrue
に設定し、pg_hba.confには適用するhostあるいはhostsslの行がなくては
なりません。そして、クライアントではsslmodeをdisableにしてはなりま
せん。 (PostgreSQL純正のSSL接続のかわりに、stunnel や ssh
サードパーティ製の暗号化転送を使うことも可能であることも気靴討
ます。)
* バージョン7.3
ではデータベースユーザのパスワードは保存される時に自動的に暗号化さ
れます。
それより前のバージョンではpostgresql.conf中でPASSWORD_ENCRYPTIONを
邑砲垢詆廚△蠅泙后
* サーバーを走らせるのに暗号化ファイルシステムを使うこともでい泙后
[訳注
レプリケーション関連の項目がなくなりましたが、訳注のみ残してあります。
Jan Wieckさんによるカスケード可能なマスター・スレーブ型のレプリケーション Slony-I
http://gborg.postgresql.org/project/slony1/projdisplay.php
石井達夫さんによるコネクションプール サーバ PGPool
http://www2b.biglobe.ne.jp/~caco/pgpool/
三谷篤さんによるマルチマスタ方式の同期レプリケーション PGCluster
http://www.csra.co.jp/~mitani/jpug/pgcluster/index.html
JPUG 分散トランザクション開発分科会では、永安悟史さんが2相コミット
の実装を行いました。
http://www.postgresql.jp/wg/dt/index.html
]
_________________________________________________________________
これらの象徴的なクエリでは t1.col を t2.col と結合して、t1 の結合されなかったロ
ウ(t2 と一致しなかったロウ)も返しています。RIGHT 結合は t2 の結合されなかったロ
ウを加えるでしょう。FULL 結合は、一致したロウに t1 と t2 からは結合されなかった
ロウを返すでしょう。OUTER という言葉はオプションで LEFT, RIGHT, または FULL な
どの結合を仮定されています。通常、結合はINNER結合と呼ばれます。
4.17) 複数のデータベースを使う問い合わせはどのようにすればできますか?
現行のデータベース以外への問い合わせの方法はありません。というのもPostgreSQLが
データベース仕様のシステムカタログを読み込むためで、そこには、たとえそのふりを
するだけにしろ、データベースを越えて問い合わせをするすべがありません。
contrib/dblink はデータベース間(cross-database)の問い合わせを関数呼出しにより許
します。もちろん、クライアントは同時に接続を別のデータベースへも張らなくてはな
らず、結果をクライアント側でマージしなくてはなりません。
4.18) 関数から複数のロウまたはカラムを返すにはどうしますか?
PostgreSQLの拡張についての質問
集合を返す関数(Set Returning Functions): http://techdocs.postgresql.org/guides/
SetReturningFunctions を使うと簡単です
5.1) 自分で書いたユーザ定義関数を psql
の中で実行するとコア・ダンプしてしまうのはなぜですか?
問題は色々と考えられますが、まず最初に、作成したユーザ定義関数を単独の
テストプログラムにして試してみて下さい。
4.19) PL/PgSQL の関数の中で一時テーブルにアクセスするとき、どうして "relation
with OID ##### does not exist" というエラーを受け取るのでしょうか?
5.2) PostgreSQL
用に書いたちょっと素敵な新しい型や関数を提供してプロジェクトに貢献したいの
任垢
PL/PgSQL は関数スクリプトをキャッシュし、不幸にもその副作用で、 PL/PgSQL関数が
一時テーブルにアクセスする場合、後でそのテーブルを消して作りなおされ、関数がも
う一度呼び出されると、その関数はキャッシュしている関数の内容はまだ古い一時テー
ブルを差し示したままだからです。この、解決策として、PL/PgSQLの中で EXECUTE を一
時テーブルへのアクセスのために使います。そうすると、クエリは毎回パースをやり直
しされるようになります。
皆さんの行なった拡張を、pgsql-hackers
メーリング・リストに送ってください。そして、ゆくゆくはそうした拡張が
contrib/ サブディレクトリの中に入ることになるでしょう。
4.20) どのようなレプリケーションのソリューションがありますか?
5.3) タプルを返す C言語の関数はどのように書い泙垢
「レプリケーション」と一言で言いますすが、レプリケーションをするための技術はい
くつかあり、それぞれ、利点と欠点があります。
バージョン7.3以降のPostgreSQLでは、テーブルを返す関数を C,
PL/PgSQL、そして SQL
にて完全にサポートします。詳しくはプログラマガイドの情報を見てください
。Cで定義された表を返す関数の例題がcontrib/tablefuncの中にあります。
マスタ/スレーブのレプリケーションは、読み/書きのクエリを受け取るシングルマス
タが可能で、スレーブでは読み/SELECTの問い合わせだけを受け付けることができます
。最も人気がある、フリーで利用できる、マスタ−スレーブのPosrgreSQLレプリケーシ
ョンソリューションは、 Slony-I です。
5.4)
ソース・ファイルを変更しました。再コンパイルしても変化が見られないのはなぜ
任垢
マルチ−マスタのレプリケーションは、読み/書きのクエリを受けとり、複数のレプリ
ケートさせるコンピュータに送ることができます。この機能は、サーバ間の変更の同期
が必要なため、性能に重大な衝撃を与えます。 Pgcluster は、このようなソリューショ
ンとしてPosrgreSQLのためにフリーで利用できるものとして、最も人気があります。
いくつかの Makefile
がインクルード・ファイルに対して適切な依存関係を持っていません。make
clean をしてからもう一度 make を行なわなくてはなりません。もし、GCC
をお使いであれば configure の --enable-depend
オプションを使って、コンパイラに依存関係を自動的に調べさせることもでき
ます。
_________________________________________________________________
この他にも、商用やハードウェア−ベースのレプリケーションソリューションがいろい
ろなレプリケーションモデルをサポートしています。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[訳注:
日本語版の製作については以下の通りです。
最終更新日: 2005年01月12
最終更新日: 2005年05月18
翻訳者: 桑村 潤 (Jun Kuwamura <juk at PostgreSQL.jp>)
このFAQの和訳の作成にあたり協力をしてくださった方々(敬称は略させていただい泙):
このFAQの和訳の作成にあたり協力をしてくださった方々(敬称は略させていただきます):
田仲 (Minoru TANAKA <Tanaka.Minoru at keiken.co.jp>)
田仲 (Minoru TANAKA <Tanaka.Minoru at keiken.co.jp>)
石井 達夫(Tatsuo ISHII <t-ishii at sra.co.jp>)
齊藤 知人(Tomohito SAITOH <tomos at elelab.nsc.co.jp>)
馬場 肇(Hajime BABA <baba at kusastro.kyoto-u.ac.jp>)
岡本 一幸(Kazuyuki OKAMOTO <kokamoto at itg.hitachi.co.jp>)
小菅 昭一(Shoichi Kosuge <s-kosuge at str.hitachi.co.jp>)
山下 義之(Yoshiyuki YAMASHITA <dica at eurus.dti.ne.jp>)
真太郎(Sintaro SAKAI <s_sakai at mxn.mesh.ne.jp>)
真太郎(Sintaro SAKAI <s_sakai at mxn.mesh.ne.jp>)
生越 昌己(Masami OGOSHI <ogochan at zetabits.com>)
石川 俊行(Toshiyuki ISHIKAWA <tosiyuki at gol.com>)
本田 茂(Shigehiro HONDA <fwif0083 at mb.infoweb.ne.jp>)
本田 茂(Shigehiro HONDA <fwif0083 at mb.infoweb.ne.jp>)
せせ じゅん(Jun SESE <sesejun at linet.gr.jp>)
神谷 英孝(Hidetaka KAMIYA <hkamiya at catvmics.ne.jp>)
菅原 敦(Atsushi SUGAWARA <asugawar at f3.dion.ne.jp>)
稲葉 香理(Kaori Inaba <i-kaori at sra.co.jp>)
石井 達夫(Tatsuo Ishii <t-ishii at sra.co.jp>)
をはじめ、ポストグレスに関する話題防戮米楔譽櫂好肇哀譽后Ε瓠璽螢鵐哀螢好函
和訳のい辰韻鮑遒辰討譴 JF(Linux Japanese FAQ Mailing List)プロジェクト、FreeBSD ドゥ絅瓮鵐董璽轡腑鵐廛蹈献Д函
その他、直接あるいは間接的にかかわっているすべてのオープンソースコミュニティーの皆さんに感謝します。
をはじめ、ポストグレスに関する話題豊富な日本語ポストグレス・メーリングリ
スト、 和訳のきっかけを作ってくれた JF(Linux Japanese FAQ Mailing List)プロジェ
クト、FreeBSD ドキュメンテーションプロジェクト、 その他、直接あるい
は間接的にかかわっているすべてのオープンソースコミュニティーの皆さんに
感謝します。
日本語版のこの文書は、以下からもたどれます。
http://www.rccm.co.jp/~juk/pgsql/(FAQ和訳 PostgreSQL についてよくある質問)
日本語版のこの文書は 本家 "Frequently Asked Questions" のページに "Japanese FAQ" という見出であります。
また、最新版は以下のサイトにあります。
http://www.PostgreSQL.jp/wg/jpugdoc/JPUG文書・書籍関連分科会
http://www.linux.or.jp/JF/Linux JFプロジェクト
http://www.rccm.co.jp/~juk/pgsql/(FAQ和訳 PostgreSQL についてよくある質問)
なお、この和訳に関するご意見は(juk at PostgreSQL.jp)までお寄せ下さい。
なお、この和訳に関するご意見・ご質問は(juk at PostgreSQL.jp)までお寄せください。
]
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment