mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-11-27 07:21:09 +08:00
b9de4a26cf
change content (at least not supposed to). Magnus Hagander
1529 lines
63 KiB
Plaintext
1529 lines
63 KiB
Plaintext
|
||
PostgreSQL(ポストグレス・ゥ紂次Ε┘<CE95>)についてよくある質問とその解答(FAQ)
|
||
|
||
原文最終更新日: Sun Jan 9 14:44:04 EST 2005
|
||
|
||
現在の維持管理者: Bruce Momjian (pgman@candle.pha.pa.us)
|
||
Maintainer of Japanese Translation: Jun Kuwamura (juk at
|
||
PostgreSQL.jp)
|
||
|
||
この文書の最新版は
|
||
http://www.postgresql.org/files/documentation/faqs/FAQ.html
|
||
で見ることがでい泙后<E6B399>
|
||
|
||
プラットホームに特佑亮遡笋砲弔い討<E38184>:
|
||
http://www.postgresql.org/docs/faq/
|
||
に回答があります。
|
||
(以下、訳者による注釈を [訳注: と ] とで囲んで気靴泙后<E6B399>)
|
||
[訳注:
|
||
日本語版製作についてのメモは最後尾へ移動しました。
|
||
|
||
日本語版のこの文書は 本家 "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/
|
||
|
||
この和訳についてお気づい療世<E79982>(juk at PostgreSQL.jp)までメールでお寄せ下さい。
|
||
|
||
2005年01月12日 桑村 潤
|
||
]
|
||
_________________________________________________________________
|
||
|
||
一般的な質問
|
||
|
||
1.1) PostgreSQLとは何ですか? 何と読みますか?
|
||
1.2) PostgreSQLの著作権はどうなってますか?
|
||
1.3) PostgreSQLの動作するUnixプラットホームは?
|
||
1.4) Unix以外の移植版で使えるものは?
|
||
1.5) PostgreSQLはどこから入手でい泙垢<E6B399><E59EA2>
|
||
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を資金面で援助するにはどうすればよいですか?
|
||
|
||
ユーザー・クライアントの質問
|
||
|
||
2.1) PostgreSQL の ODBC ドライバーはありますか?
|
||
2.2) PostgreSQL を Web
|
||
ページと連携させるにはどんなツールがありますか?
|
||
2.3) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか?
|
||
2.4) どのような言語で PostgreSQL と通信でい垢<E38184><E59EA2>
|
||
|
||
管理上の質問
|
||
|
||
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) 接続しようとするとい<E381A8> 'Sorry, too many clients'
|
||
が出るのはなぜですか?
|
||
3.9) pgsql_tmp ディレクトリの中には何がありますか?
|
||
3.10)
|
||
PostgreSQLのメジャーリリースをアップデートするのにダンプとリストアをし
|
||
なくてはならないのはなぜですか?
|
||
3.11) ハードウェアにはどんなコンピュータを使えばよいですか?
|
||
|
||
操作上の質問
|
||
|
||
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カラムに空い<E7A9BA>△襪里呂覆爾任垢<E4BBBB><E59EA2>
|
||
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) 複数のデータベースを使う問い合わせはどのようにすればでい泙垢<E6B399><E59EA2>
|
||
4.25) 関数で複数のロウまたはカラムを返すにはどうしますか?
|
||
4.26) なぜ、PL/PgSQL 関数の中から一時テーブルを確実に create/drop
|
||
することがでい覆い里任靴腓Δ<E88593><CE94>
|
||
4.27) どのような暗号化オプションを利用でい泙垢<E6B399>?
|
||
|
||
PostgreSQLの拡張についての質問
|
||
|
||
5.1) 自分で書いたユーザ定義関数を psql
|
||
の中で実行するとコア・ダンプしてしまうのはなぜですか?
|
||
5.2) PostgreSQL
|
||
用に書いたちょっと素敵な新しい型や関数を提供してプロジェクトに貢献した
|
||
いのですが?
|
||
5.3) タプルを返す C言語の関数はどのように書い泙垢<E6B399><E59EA2>
|
||
5.4)
|
||
ソース・ファイルを変更しました。再コンパイルしても変化が見られないのは
|
||
なぜですか?
|
||
_________________________________________________________________
|
||
|
||
一般的な質問
|
||
|
||
1.1) PostgreSQL とは何ですか? 何と読みますか?
|
||
|
||
PostgreSQLはPost-Gres-Q-L(ポスト - グレス - ゥ紂<E382A5> - エル)
|
||
と発音します。
|
||
|
||
PostgreSQL は次世代 DBMS 研究用のプロトタイプであった POSTGRES
|
||
データベース管理システムの改良版です(このため、今でもとい匹<E38184>
|
||
"Postgres" と呼ばれることがあります)。PostgreSQL は POSTGRES
|
||
の強力なデータ・モデルと豊
|
||
富なデータ・タイプ(型)を保持しながら、POSTGRES で使われた PostQuel
|
||
問い合わせ言語を、拡張した SQL のサブセットに置き
|
||
換えています。PostgreSQL は無料で完全なソースを利用でい泙后<E6B399>
|
||
|
||
PostgreSQL の開発は、PostgreSQL
|
||
開発メーリングリストに参加している開発者達のチームですべて行なわれてい
|
||
ます。現在の座長は Marc G. Fournier (scrappy@PostgreSQL.org
|
||
)です。(下気<E4B88B>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 は下気涼<E6B097>邯△暴召い泙后<E6B399>
|
||
[訳注:
|
||
正文は英語です。参考として、訳文を併儀悩椶靴泙后<E6B399>
|
||
]
|
||
|
||
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 データベース管理システム
|
||
|
||
部分的著作権 (c) 1996-2004, PostgreSQL国際開発チーム
|
||
部分的著作権 (c) 1994-6 カリフォルニア大学本校
|
||
|
||
|
||
本ソフトウェアおよびその文書一式は上気涼<E6B097>邯<EFBFBD>充┐函△海諒絃<E8AB92>
|
||
およびこれに続く二つの段落が全ての複製に添付されている限りにおい
|
||
て、使用、複製、修正および配付の許可を、いかなる目的であっても、
|
||
無償でかつ同意書無しに行なえることをここに認めます。
|
||
|
||
カリフォルニア大学は、いかなる当事者にたいしても、利益の壊失を
|
||
含む、直接的、間接的、特別、偶然あるいは必然的にかかわらず生じた
|
||
損害について、たとえカリフォルニア大学がこれらの損害について訴追
|
||
を受けていたとしても、一切の責任を負いません。
|
||
|
||
カリフォルニア大学は、商用目的における暗黙の保証と、特定目的で
|
||
の適合世亡悗靴討呂發箸茲蝓△海譴蕕妨造蕕此△い<E296B3>覆詈歉擇睚鉸<E79D9A><E989B8>
|
||
ることを明言します。以下に用意されたソフトウェアは「そのまま」を
|
||
基本原理とし、カリフォルニア大学はそれを維持、支援、更新、改良あ
|
||
るいは修正する義務を負いません。
|
||
|
||
[訳注:
|
||
著作権に関する正文は上気留儻譴砲茲詆週です。日本語訳はあくまで
|
||
参考です。
|
||
]
|
||
|
||
上気<E4B88A>BSDライセンスで古ぅ<E58FA4>璽廛鵐宗璽垢離薀ぅ札鵐垢任后<E4BBBB>宗璽好魁璽<E9AD81>
|
||
がどのように使われようとも制限しません。好ましいことなので、我々もそれ
|
||
を 変えるつもりはありません。
|
||
|
||
1.3) PostgreSQL の動作環兇蓮<E58587>
|
||
|
||
一般的に、最近のUnix互換プラットホームであればPostgreSQLを稼働させられ
|
||
るはずです。リリースの時点で実際にテストを行なったことの報告がなされた
|
||
プラットホームについてはインストール手引書に列挙してあります。
|
||
|
||
1.4) Unix以外の移植版で使えるものは?
|
||
|
||
バージョン8.0になり、PostgreSQL は、Win2000, WinXP, Win2003などの
|
||
Microsoft Windows
|
||
NTベースのオペレーティングシステムでネイティブに走るようになりました。
|
||
パッケージになったインストーラが、http://pgfoundry.org/projects/pginst
|
||
allerから入手でい泙后<E6B399> Windows (Win95, Win98,
|
||
WinMe)など、MSDOSベースのバージョンでは、Cygwin
|
||
を使ってPostgreSQLを走らせることがでい泙后<E6B399>
|
||
[訳注
|
||
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 はどこから入手でい泙垢<E6B399><E59EA2>
|
||
|
||
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/
|
||
]
|
||
|
||
1.6) サポートはどこで受けられますか?
|
||
|
||
主要なメーリング・リストは:
|
||
pgsql-general@PostgreSQL.orgです。PostgreSQL
|
||
に関することであれば議論ができ
|
||
ます。このリストへの参加は、電子メールの本文(Subject
|
||
行ではありません)に次の2行を書いて、
|
||
subscribe
|
||
end
|
||
|
||
pgsql-general-request@PostgreSQL.org へ送って下さい。
|
||
|
||
ダイジェスト版のメーリング・リストもあります。このリストへの参加は
|
||
"本文"に:
|
||
subscribe
|
||
end
|
||
|
||
と書いて pgsql-general-digest-request@PostgreSQL.org
|
||
へ電子メールを送って下さい。
|
||
|
||
ダイジェスト版は、メインリストで受信するメッセージが 30k
|
||
程度溜る毎にダイジェスト版リストのメンバーに送付されます。
|
||
|
||
バグレポート用のメーリングリストもあります。このリストへの参加は
|
||
"本文" に:
|
||
subscribe
|
||
end
|
||
|
||
と書いてpgsql-bugs-request@PostgreSQL.org へ電子メールを送って下さい。
|
||
|
||
開発者の議論のためのメーリングリストも利用でき
|
||
ます。このリストへの参加は電子メールの本文に:
|
||
subscribe
|
||
end
|
||
|
||
と書いて、pgsql-hackers-request@PostgreSQL.orgへ電子メールを送って下さ
|
||
い。
|
||
|
||
PostgreSQL についてもっと詳しく知りたければ、次の PostgreSQL
|
||
WWWホームページからたどれます:
|
||
|
||
http://www.PostgreSQL.org
|
||
|
||
メジャーなIRC チャンネルは、Freenode (irc.freenode.net)の #PostgreSQL
|
||
というチャンネルです。 UNIX コマンドで、 irc -c '#PostgreSQL' "$USER"
|
||
irc.freenode.net. を使って参加でい泙后<E6B399>
|
||
同じネットワークに、スペイン語のチャンネル(#postgresql-es)もあ
|
||
り、フランス語のチャンネル(#postgresqlfr)もあります。
|
||
EFNetにもPostgreSQLチャンネルがあります。
|
||
[訳注:
|
||
1999年7月23日、日本ポストグレスユーザー会、略称JPUGが設立されました。
|
||
JPUG は非営利組織で、PostgreSQLを利用する人達の相互協力の場となっています。
|
||
(2003年5月17日、「日本PostgreSQLユーザ会」に名称を改めました。)
|
||
正会員の会費は無料ですが、協賛会員の会費と会員の積極的な貢献が会の運営を助けています。
|
||
詳しくは、JPUG のWeb サイト:
|
||
http://www.PostgreSQL.jp/
|
||
をご覧ください。会員登録も可能となっています。
|
||
|
||
日本語のIRCチャンネル '#PostgreSQL*jp' も存在します。
|
||
|
||
商用サポート会社のリストはhttp://techdocs.postgresql.org/companies.php
|
||
にあります。
|
||
|
||
1.7) 最新版はどれですか
|
||
|
||
PostgreSQL の最新版はバージョン 7.4.6 です。
|
||
|
||
我々は、6~8カ月毎にメジャーリリースを行なうことを計画しています。
|
||
|
||
1.8) どのような文書がありますか?
|
||
|
||
配付の中に、いくつかのマニュアルとオンライン・マニュアル(マニュアル・<E383AB>
|
||
據璽<E6939A>)およびいくつかの小さなテスト例題が含まれます。/doc
|
||
ディレクトリをご覧下さい。また、マニュアルは、http://www.ca.PostgreSQL
|
||
.org/docs/でオンラインでも閲覧でい泙后<E6B399>
|
||
[訳注:
|
||
(株)SRAと日本PostgreSQLユーザ会で翻訳され、
|
||
「PostgreSQL オフィシャルマニュアル」
|
||
として出版されています。
|
||
]
|
||
|
||
オンラインで参照でい<E381A7> PostgreSQL
|
||
の本も2冊あります。http://www.PostgreSQL.org/docs/awbook.html
|
||
[訳注:
|
||
日本ポストグレスユーザー会の 「PostgreSQL Book翻訳分科会」
|
||
にて翻訳されました。
|
||
]
|
||
|
||
および、 http://www.commandprompt.com/ppbook/ です。
|
||
購入可能な書籍の目録は、http://techdocs.PostgreSQL.org/techdocs/bookre
|
||
views.php にあります。 PostgreSQL 技術情報記
|
||
事も、http://techdocs.PostgreSQL.org/ にあります。
|
||
|
||
[訳注:
|
||
和訳文書は、日本ポストグレスユーザー会のhttp://www.postgresql.jp/docum
|
||
ent/ をごらん下さい。 ]
|
||
|
||
コマンドラインのクライアントプログラムpsql
|
||
も、型、演算子、関数、集約、その他の情報をお見せする、いくつかの素晴ら
|
||
しい \d コマンドを持ちます。 - \?
|
||
を使うと利用可能なコマンドが表示されます。
|
||
|
||
我々の Web サイトには、もっと沢山の文書があります。
|
||
|
||
1.9) 既知のバグや未だ無い機能はどうやって見つけますか?
|
||
|
||
PostgreSQLは拡張されたSQL-92のサブセットをサポートします。
|
||
我々のページの TODO リストに、既知のバグや欠落機能や将
|
||
来計画についての欺劼<E6ACBA>△蠅泙后<E6B399>
|
||
|
||
1.10) SQL はどうすれば学べますか?
|
||
|
||
http://www.PostgreSQL.org/docs/awbook.html にあるPostgreSQL本で SQL
|
||
を教えています。
|
||
[訳注:
|
||
日本ポストグレスユーザー会の 「PostgreSQL Book翻訳分科会」
|
||
にて翻訳され出版されています。
|
||
]
|
||
|
||
その他にも 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にあります。
|
||
|
||
多くのユーザに、 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
|
||
があります。
|
||
近藤直文氏の「初心者向のDB設計入門・SQL入門参考書紹介」のコーナー
|
||
http://www.shonan.ne.jp/~nkon/ipsql/books_SQL.html
|
||
があります(やや古い2000年版)。
|
||
堀田倫英氏の「PostgreSQL日本語マニュアル」
|
||
http://www.net-newbie.com/
|
||
ではオンラインマニュアルの検索がでい泙后<E6B399>
|
||
丸山不二夫氏のUNIX データベース入門
|
||
http://www.wakhok.ac.jp/DB/DB.html
|
||
もオンラインで読むことがでい泙后<E6B399>
|
||
]
|
||
|
||
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はどうなのですか?
|
||
|
||
ソフトウェアを計る方法にはいくつかあります。機能と税修反<E4BFAE>蠕<EFBFBD>
|
||
とサポートと価格です。
|
||
|
||
機能(Features)
|
||
PostgreSQLは、トランザクション、副問い合わせ、トリガー、ビュー<E383A5>
|
||
<20>杏凜ー整合性
|
||
参照、および、洗練されたロック機構など、大規模商用DBMSが持つ機<E381A4>
|
||
修鬚曚箸鵑瓢<E9B591>辰討い泙后<E6B399>気蕕<E6B097>
|
||
PostgreSQLは、ユーザ定義型、継承、ルール、それから、ロック競合<E7ABB6>
|
||
鮟名<E9AE9F>垢襯泪襯船弌璽献腑麁瓜<E9BA81><E7939C>
|
||
制御など、商用DBMSも持ち合わせないような機能をいくつか持ち合わ<E59088>
|
||
擦討い泙后<E6B399>
|
||
|
||
税<>(Performance)
|
||
PostgreSQLは他の商用あるいはオープンソースのデータベースと互角<E4BA92>
|
||
寮<>
|
||
能も持ちます。ある面ではより早かったり、ほかの面ではより遅かっ<E3818B>
|
||
燭蠅靴泙后<E6B399>MySQLなどの特化型データベース・システムにくらべて、P
|
||
ostgreSQL は複数ユーザや複雑な問い合わせ、また、 read/write
|
||
問い合わせのロードがより高速です。MySQLは少ないユーザでの単純な
|
||
SELECT 問い合わせでは高速です。もちろん、MySQLには上記
|
||
のFeaturesの節に示すような機能はほとんどありません。我々は、Pos
|
||
tgreSQLに柔軟世筏’柔を組み込みながらも、絶えず性
|
||
能の改善を続けています。
|
||
|
||
信頼<E4BFA1>(Reliability)
|
||
我々は、DBMSの信頼性
|
||
が高くなくてはその価値が無いことを理解してます。十分テストして<E38197>
|
||
<20>堕蠅靴織魁璽匹鬟丱阿鮑脳<E9AE91>砲靴討<E99DB4>薀螢蝓璽垢垢襪茲Δ謀悗瓩討<E793A9>
|
||
す。それぞれのリリースは少なくとも1カ月以上のベータ・テストを行
|
||
ない、これまでのリリースの履歴が、製品版として安定した堅固なリ<E381AA>
|
||
蝓璽垢任△襪海箸鯤<E7AEB8>譴辰討い泙后<E6B399>海諒<E6B5B7>遒任蓮<E4BBBB>召離如璽織戞璽<E6889E>
|
||
と比べても遜色がないことに自信を持っています。
|
||
|
||
サポート(Support)
|
||
我々のメーリングリストは、遭遇するいかなる問題についても解決へ<E6B1BA>
|
||
亮蟒<E4BAAE>韻鬚靴討<E99DB4>譴襦<E8ADB4><E8A5A6><EFBFBD>圓筌罅璽兇梁腓<E6A281>
|
||
な集まりへの接点を提供しています。我々は問題の解決を保証するこ<E3828B>
|
||
箸呂任<E59182>
|
||
ませんが、商用データベースであっても常に解決されるわけではあり<E38182>
|
||
泙擦鵝3<E9B59D><EFBC93>圓筺▲罅璽供Ε灰潺絅縫謄<E7B8AB>▲泪縫絅▲詢燹△修譴法▲<E6B395>
|
||
ースコードなどへ直接アクセスでき
|
||
ることによって、PostgreSQLのサポートは、他のDBMSサポートよりも<E3828A>
|
||
イ譴燭發里箸覆辰討い泙后8耆徊召謀悊┐董∋<E891A3>阻茲両ν僖汽檗璽箸<E792BD>
|
||
どもあります(FAQ1.6節をご覧下さい)。
|
||
|
||
価格(Price)
|
||
PostgreSQLの利用は、商用でも非商用でも、すべて無料です。上記
|
||
に示してあるBSDスタイルの使用許諾に外れない限り、PostgreSQLのコ
|
||
ードを制限無しで商品に組み込むことがでい泙后<E6B399>
|
||
|
||
1.15) PostgreSQLを資金面で援助するにはどうすればよいですか?
|
||
|
||
PostgreSQLは、我々が始めた 1996年以来、最高クラスの情報基盤を持ってい
|
||
ます。これはすべて、Marc
|
||
Fournieさんのおかげで、彼はこの基盤を創り出し、何年にもわたって管理し<E79086>
|
||
討ました。
|
||
|
||
質の良い基盤は、オープンソース・プロジェクトにとってはとても大切なもの
|
||
で、プロジェクトが前進する勢いを失って分裂するのを回避します。
|
||
|
||
もちろん、この基盤は安いものではありません。維持し続けるためには毎月あ
|
||
るいは一時的に経費がかかります。もし、あなたやあなたの会社に、こうした
|
||
努力のための資金の援助を施すことができ
|
||
るようでしたら、http://store.pgsql.com/shopping/から寄付をお願いします
|
||
。
|
||
|
||
また、Webページには PostgreSQL,Inc とありますが、そこの
|
||
"貢献(contributions)"という項目は、 PostgreSQL
|
||
プロジェクトを支援するだけのためで、決して特定の会社のための資金ではあ
|
||
りません。もし、小切手(check)の方が都合よければ連絡先の住所へお送り下<E3828A>
|
||
気ぁ<E6B097>
|
||
|
||
さらに、PostgreSQLを使った成功事例をお持ちであれば、ぜひ、われわれの
|
||
事例紹介リスト pgsql-advocacy@postgresql.org へお送りください。
|
||
_________________________________________________________________
|
||
|
||
ユーザー・クライアントの質問
|
||
|
||
2.1) PostgreSQL のための ODBC ドライバーはありますか?
|
||
|
||
PsqlODBC と OpenLink ODBC の二つの ODBC ドライバーが利用可能です。
|
||
|
||
PsqlODBC は次の場所からダウンロードでい泙后<E6B399>
|
||
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php
|
||
|
||
OpenLink ODBC は http://www.openlinksw.com/から入手でい泙后I現狹<E78FBE><E78BB9>
|
||
ODBC
|
||
クライアント・ソフトウェアで使えますので、支援しているすべてのプラット
|
||
ホーム(Win, Mac, Unix, VMS)から PostgreSQL の ODBC が利用でい泙后<E6B399>
|
||
|
||
たぶん彼らは、商用品質のサポートの必要な人々に売っていると思いますが、
|
||
フリーウェア版はいつでも入手可能のようです。質問は、postgres95@openlin
|
||
k.co.uk へ送って下さい。
|
||
|
||
Programmer's Guide の ODBC の章もご覧ください。
|
||
|
||
2.2) PostgreSQL を Web ページと連携させるにはどんなツールがありますか?
|
||
|
||
データベースを裏に持つ Web ページについての素晴らしい紹介が、
|
||
http://www.webreview.comにあります。
|
||
|
||
Web への拡張のためには、PHP
|
||
が卓越したインターフェイスとなっています。http://www.php.net/にありま<E3828A>
|
||
后<>
|
||
[訳注:
|
||
PHPに関する日本語の情報は、2000年4月19日に発造靴親鐱<E8A6AA>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 と通信でい垢<E38184><E59EA2>
|
||
|
||
人気のあるほとんどの言語は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/
|
||
]
|
||
_________________________________________________________________
|
||
|
||
管理上の質問
|
||
|
||
3.1) どのようにすれば /usr/local/pgsql 以外の場所にインストールでい泙垢<E6B399><E59EA2>
|
||
|
||
簡単な方法は、 configure を走らせるとい<E381A8> --prefix
|
||
オプションを指定することです。
|
||
|
||
3.2) postmaster を走らせると、Bad System Call
|
||
とかコア・ダンプしたとのメッセージが出ます。なぜですか?
|
||
|
||
さまざまな問題が考えられますが、まず最初にあなたのカーネルに System V
|
||
IPC の拡張がインストールされているかを確認して見てください。PostgreSQL
|
||
はカーネルによる共優瓮皀蝓爾肇札泪侫<E6B3AA>離汽檗璽箸鯢<E7AEB8>廚箸靴泙后<E6B399>
|
||
|
||
3.3) postmaster を走らせようとすると、IpcMemoryCreate
|
||
エラーが出ます。なぜですか?
|
||
|
||
カーネルが共有
|
||
メモリーを持つ設定になっていなかったか、でなければ、カーネルに対して使
|
||
える共優瓮皀蝓爾梁腓さを大い<E5A4A7>瀋蠅垢詆<E59EA2>廚<EFBFBD>△蠅泙后6饌療<E9A58C>並腓<E4B8A6>
|
||
さは、使っているアーゥ謄<E382A5>船磴<E888B9>postmaster を走らせるとき
|
||
に設定するバッファの数とバックエンドプロセスに依存します。ほとんどのシ
|
||
ステムでは、既定値のバッファサイズのままで、少なくとも約1MBが必要です<E381A7>
|
||
<20> PostgreSQL Administrator's Guide/Server Run-time
|
||
Environment/Managing Kernel Resources に共有
|
||
メモリーとセマフォについての情報の詳細がありますのでご覧ください。
|
||
|
||
3.4) postmasterを走らせようとすると、IpcSemaphoreCreate
|
||
エラーが出ます。なぜですか?
|
||
|
||
もしエラーメッセージがIpcSemaphoreCreate: semget failed (No space left
|
||
on
|
||
device)であれば、カーネルが十分なセマフォを使えるように構成されていま<E38184>
|
||
擦鵝<E693A6>Postgresは潜在的なバックエンドプロセス毎に一つのセマフォを必要と<E8A681>
|
||
靴泙后<E6B399>箸蠅△┐困硫魴荳<E9ADB4><E88DB3>postmasterを起動するとき
|
||
に、バックエンドプロセスの数をより少なく制限をすることです。既定値の32
|
||
より小さな数のパラメータを-Nで使います。より恒久的な解決策は、カーネル
|
||
のSEMMNS と SEMMNI パラメータを増やすことです。
|
||
|
||
操作不能のセマフォも過度なデータベースアクセスの間にクラッシュを
|
||
起こす可能世<E883BD>△蠅泙后<E6B399>
|
||
|
||
もし、エラーメッセージがなにか他のものであれば、カーネルの構成でまった
|
||
くセマフォのサポートをしていないかもしれません。 PostgreSQL
|
||
Administrator's Guide に共有
|
||
メモリーとセマフォについての情報の詳細があります。
|
||
|
||
3.5) 他のホストからの接続はどのように制御しますか?
|
||
|
||
既定値では、PostgreSQL は Unix
|
||
ドメインソケット、または、TCP/IP接続のローカルマシンからの接続しか許し
|
||
ません。postgresql.conf の中の listen_addresses
|
||
を修正し、かつ、$PGDATA/pg_hba.conf
|
||
ファイルを適切に直して、ホスト主導型認証を有
|
||
効にしないかぎりは、他のマシンからは接続でい覆い任靴腓Α<E88593>
|
||
|
||
3.6) より良い性
|
||
能を得るためには、データベース・エンジンをどのように調整すれば良いですか?
|
||
|
||
確かにインデックスは問い合わせの速度を増します。EXPLAIN
|
||
ANALYZEコマンドで PostgreSQL
|
||
がどのようにあなたの問い合わせを翻訳しているかを見ることができ
|
||
、そして、どのインデックスが使われているかを見ることがでい泙后<E6B399>
|
||
|
||
もし INSERT を多用している場合は、COPY コマンドを使って大き
|
||
なバッチ処理でそれを行なうことを検討して下さい。これは、INSERT
|
||
を別々に行なうよりもっと高速です。次に、BEGIN WORK/COMMIT
|
||
のトランザクション・ブロックの中に無い文は、それら自身がそれぞれのトラ
|
||
ンザクションに入っていると見なされます。いくつかの文を一つのトランザク
|
||
ション・ブロックの中で行なうことを考えて下さい。これによりトランザクシ
|
||
ョンのオーバーヘッドが減ります。また、大き
|
||
なデータの変更を行なう際はインデックスを一度外して、作り直すことを考え
|
||
てみて下さい。
|
||
|
||
Administration Guide/Server Run-time Environment/Run-time
|
||
Configurationには、
|
||
チューニングのオプションがいくつかあります。fsyncオプションでfsync()
|
||
を無効にすることがでい泙后<E6B399>海譴砲茲辰董<E8BEB0>謄肇薀鵐競<E9B590>轡腑麕茲<E9BA95>
|
||
fsync() でディスクを更新するのを止めさせます。
|
||
|
||
shared_buffersオプションを使ってバックエンド・プロセスにより使われる共
|
||
優瓮皀蝓次Ε丱奪侫,鯊腓くすることもでき
|
||
ます。もし、このパラメータを高くしすぎると、カーネルの共有
|
||
メモリー空間の制限値を越えてしまうために postmaster
|
||
が走らなくなるでしょう。既定値では、それぞれのバッファの大い気<E38184> 8K
|
||
で、バッファ数は 1000 です。
|
||
|
||
sort_mem (PostgreSQL 8.0からは:
|
||
work_mem)オプションを使って、それぞれのバックエンド・プロセスが一時的<E69982>
|
||
癖造拌悗┐砲茲辰道箸Ε瓮皀蝓爾虜蚤腑汽ぅ困鯀<E59BB0>笋垢海箸發任ます。
|
||
既定値は 1024 (すなわち、1MB)です。
|
||
|
||
また、CLUSTER
|
||
コマンドを使って、テーブルのデータをインデックスに合わせるためにグルー
|
||
プ化することもでい泙后<E6B399>椶靴<E6A4B6>蓮▲<E893AE>鵐薀ぅ鵐泪縫絅▲襪<E296B2> CLUSTER
|
||
を見て下さい。
|
||
|
||
3.7) どのようなデバグ機能が使えますか?
|
||
|
||
PostgreSQL
|
||
は、デバグのために意味のある、状態情報を報告するいくつかの機能を持ちま
|
||
す。
|
||
|
||
まず、--enable-cassert オプションで configure
|
||
を走らせます。そうしてコンパイルすることにより、沢山の assert()
|
||
が、バックエンドの進捗状況を監視し、何か予期せぬことが起き
|
||
るとプログラムを停止するようになります。
|
||
|
||
postmaster と postgres
|
||
の両方でいくつかのデバグ・オプションの利用がでい泙后<E6B399>泙此⊆,里茲Δ<E88CB2>
|
||
postmaster を起動するとき
|
||
はいつでも、標準出力とエラー出力をログ・ファイルに送るようにしてあるこ
|
||
とを確かめて下さい。
|
||
cd /usr/local/pgsql
|
||
./bin/postmaster >server.log 2>&1 &
|
||
|
||
これにより PostgreSQL の最上部のディレクトリに server.log
|
||
ファイルが置かれます。このファイルはサーバーが遭遇した問題やエラーにつ
|
||
いて様僂幣霾鵑魎泙澆泙后<E6B399>Postmaster は更に詳細な情報を報告するための
|
||
-d オプションを持ちます。その -d
|
||
オプションは、デバグ・レベルを指定します。高いデバグ・レベルでは、大き
|
||
なログファイルを生成することに注意しなくてはなりません。
|
||
|
||
もし、postmasterが走っていなければ、postgresバックエンドをコマンドライ
|
||
ンから走らせることがでぁ<E381A7>樟<EFBFBD>SQL文をタイプすることができ
|
||
ます。このやりかたは、デバグ目的のとき
|
||
だけお奨めします。セミコロンではなく、改行が問い合わせの終りになること
|
||
に注意してください。もし、デバグシンボルを入れてコンパイルしていれば、
|
||
デバッガを使って何が起い討い襪<E38184>鮓<EFBFBD>襪海箸<E6B5B7>任ます。postmaster
|
||
からバックエンドを開始したわけではないので、独立な環境
|
||
で走っているのではなくロック/バックエンドとの対話の問題が重複すること
|
||
はありません。
|
||
|
||
もし、postmasterが走っていれば、あるウィンドウでpsqlを開始すると、SELE
|
||
CT pg_backend_pid()を使って、psql で使われる postgres
|
||
プロセスのPIDが見つかります。
|
||
デバッガを使ってpostgresのPIDにアタッチ(attach)します。デバッガの中か<E4B8AD>
|
||
薀屮譟璽<E8AD9F>Ε櫂ぅ鵐箸鬟札奪箸掘<E7AEB8>psql
|
||
から問い合わせを発行します。デバグのためにpostgresを始動する場合は、PG
|
||
OPTIONS="-W n" を設定でぁ△修譴<E4BFAE>蕁<EFBFBD>psql を開始します。これにより、n
|
||
秒開始を遅らせるはずなので、デバッガでプロセスにアタッチして、ブレーク
|
||
ポイントを設定し、開始から順を追って見てゆくことがでい泙后<E6B399>
|
||
|
||
いくつかのlog_*サーバ構成変数は、デバッグと性
|
||
能測定にとても役に立つプロセスの統計の印刷を可能にします。
|
||
|
||
何という関数がどのくらい実行時間を食っているかを見るために、プロファイ
|
||
リング(プロフィール付き
|
||
)でコンパイルすることも可能です。そのバックエンドのプロフィール・ファ
|
||
イルは pgsql/data/base/dbname
|
||
ディレクトリに格納されるでしょう。クライアントのプロフィールはクライア
|
||
ントの現行ディレクトリに置かれるでしょう。Linux
|
||
でまともなプロファイリングを行うには -DLINUX_PROFILE
|
||
でコンパイルする必要があります。
|
||
|
||
3.8) 接続しようとするとい<E381A8> 'Sorry, too many clients' が出るのはなぜですか?
|
||
|
||
postmasterが同時始動でき
|
||
るバックエンドプロセスに対する制限数を増やす必要があります。
|
||
|
||
既定の最大プロセスは32プロセスです。-Nに適切な値を引数にしてpostmaster
|
||
を再起動するか、PostgreSQL.conf
|
||
を修正することによって、その値を増やすことがでい泙后<E6B399>
|
||
|
||
もし、-N を 32よりも大い<E5A4A7>垢襪里任△譴弌<E8ADB4>-Bも既定の64より大き
|
||
い値に増加させなくてはならないし、-B は少なくとも -N
|
||
の2倍はなくてはならず、おそらく最高税修鯔召爐覆蕕个修譴茲蠡腓<E8A0A1>
|
||
い値が必要なはずです。バックエンドプロセスをたくさんにすると、いろいろ
|
||
なUnixカーネル構成パラメータも増やすことが必要になるかもしれません。
|
||
共優瓮皀蝓次Ε屮蹈奪<E8B988>虜蚤臙<E89AA4>(SHMMAX)、
|
||
セマフォの最大数(SEMMNSとSEMMNI)、 プロセスの最大数(NPROC)、
|
||
ユーザ毎の最大プロセス数(MAXUPRC)、
|
||
開くファイルの最大数(NFILEとNINODE) も確認事項に含まれます。
|
||
PostgreSQLに許されるバックエンドのプロセス数が制限されているのは、
|
||
システムのリソースを使い果してしまうことを避けるためです。
|
||
|
||
3.9) pgsql_tmp ディレクトリの中には何がありますか?
|
||
|
||
問い合わせ実行モジュールによって生成された一時的なファイルが、このディ
|
||
レクトリに含まれます。例えば、もし ORDER BY
|
||
句を満たすためにバックエンドの -S パラメータで許可した値よりも大き
|
||
なスペースがソートの際に必要だとすると、溢れたデータを保持するために一
|
||
時的なファイルがいくつかここに生成されます。
|
||
|
||
一時的なファイルは自動的に消し去られるはずですが、もし、ソートの途中で
|
||
バックエンドがクラッシュしてしまうとそうはなりません。postmasterの停止
|
||
とリスタートでこれらのファイルはディレクトリから消しさられます。
|
||
[訳注:
|
||
SYSLOGD 経由でログを出力するには、まず、configure を --enable-syslog
|
||
付い覗<E38184>蕕擦晋紂▲灰鵐僖ぅ襪肇ぅ鵐好函璽襪鮃圓覆い泙后<E6B399>
|
||
次に、syslog.conf に local?.* の 出力先を指定し(環曲竸瑤琶儿慌椎<E6858C>)、
|
||
syslogd に HUP シグナルを送って初期化しておい泙后<E6B399>修靴董<E99DB4>
|
||
$PGDATA/pg_options に syslog=2 を加えて、 postmaster を -S
|
||
オプション付い砲謄機璽丱癲璽匹乃<E58CB9>阿靴泙后<E6B399>(バージョン 7.1 からは
|
||
pg_options は PostgreSQL.conf になっています。)
|
||
]
|
||
|
||
3.10)
|
||
PostgreSQLのメジャーリリースをアップデートするのにダンプとリストアをしなく<E381AA>
|
||
討呂覆蕕覆い里呂覆爾任垢<E4BBBB><E59EA2>
|
||
|
||
PostgreSQLチームはマイナーリリースでは小さな変更しか行ないませんので、
|
||
7.2 から 7.2.1
|
||
へのアップグレードにはダンプとリストアの必要はありません。しかし、メジ
|
||
ャーリリース(たとえば、7.2から7.3へのような)では、システムテーブルやデ
|
||
ータファイルの内部フォーマットの変更をしばしば行ないます。これらの変更
|
||
はたいてい複雑で、そのため我々はデータファイルのための後方互換性
|
||
を維持することができ
|
||
ません。ダンプは汎用フォーマットでデータを出力し、それを新しい内部フォ
|
||
ーマットに読み込むことがでい泙后<E6B399>
|
||
|
||
ディスク上でのフォーマットに変更のない同一リリースでは、アップグレード
|
||
は、ダンプ/リストアではなく、pg_upgrade スクリプトを使うことができ
|
||
ます。リリースノートには、pg_upgrade が利用可能なリリースかどうか記
|
||
されています。
|
||
|
||
3.11) ハードウェアにはどんなコンピュータを使えばよいですか?
|
||
|
||
PCハードウェアはほとんど互換性
|
||
がありますので、ほとんどの人は、すべてのPCハードウェアが同じ品質だと思
|
||
い込む傾向があります。しかし、それは間違いです。ECC
|
||
RAM、SCSI、および、高品質マザーボードは、安いハードウェアに比べると、<E381A8>
|
||
茲蠖<E88CB2>蠕が高く、より税修睥匹い里任后<E4BBBB>PostgreSQL
|
||
はほとんどのハードウェアで稼働しますが、信頼世篝<E4B896>
|
||
能が重要な場合は、ハードウェアのオプションを研究することが賢
|
||
明です。メーリングリストでもハードウェアオプションとトレードオフについ
|
||
て議論することがでい泙后<E6B399>
|
||
_________________________________________________________________
|
||
|
||
操作上の質問
|
||
|
||
4.1) バイナリ・カーソルと通常カーソルとの厳密な違いは何ですか?
|
||
|
||
詳述は、オンラインマニュアルで DECLARE を見て下さい。
|
||
|
||
4.2) 最初の数ロウのみを SELECTするにはどうしますか?ランダムなロウ?
|
||
|
||
オンラインマニュアルでFETCHを見てください。あるいは、SELECT ...
|
||
LIMIT....を使ってみて下さい。
|
||
|
||
たとえ、欲しいのは最初の数ロウだけでも、すべての問い合わせを評価しなく
|
||
てはならないかもしれません。ORDER BY
|
||
を持った問い合わせを使うことを考えてみて下さい。 もし、ORDER
|
||
BYに合ったインデックスがあるとすると
|
||
PostgreSQLは要求された最初の数ロウだけで評価でき
|
||
るかもしれませんが、でなれば、PostgreSQL
|
||
は意図したロウが生成されるまですべてのロウを評価しなければならないかも
|
||
しれません。
|
||
|
||
ランダムなロウを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コマン<E3839E>
|
||
匹<>泙泙譴討い泙后<E6B399>泙拭<E6B399>psqlを -E
|
||
オプションと一緒に開始すると、実行させたコマンドを実行するために使う問
|
||
い合わせを出力するようになります。PostgreSQLはまた、SQLi対応の
|
||
INFORMATION SCHEMA
|
||
インターフェースを用意していて、データベースについての情報を得るために
|
||
問い合わせを使うことがでい泙后<E6B399>
|
||
|
||
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;
|
||
|
||
カラムのデータタイプは次の文で変えられます:
|
||
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
|
||
テーブル内での最大インデックス数? 制限無し
|
||
|
||
もちろん、これらは実際は無制限ではなく、ディスク容量とメモリーやスワッ
|
||
プスペースの大い気砲茲蠕<E88CB2>造気譴泙后<E6B399>能はこれらの値がことのほか大き
|
||
な時に煽りを受けます。
|
||
|
||
最大テーブルサイズの32TBはオペレーティングシステムによる巨大ファイルの
|
||
サポートは必要としません。巨大なテーブルは複数の1GBのファイルに分けて<E38191>
|
||
歛犬気譴泙垢里如▲侫.ぅ襯轡好謄爐寮<E78890>造禄斗廚任呂△蠅泙擦鵝<E693A6>
|
||
|
||
デフォルトのブロックサイズを32kにすることで、最大テーブルサイズと最大<E69C80>
|
||
<20>薀狄瑤箸鬘看椶砲垢襪海箸<E6B5B7>任ます。
|
||
|
||
4.6) 一般的なテキ
|
||
ストファイルからデータを保存するには、データベースのディスク容量はどのくら<E3818F>
|
||
ど<>廚任后<E4BBBB>
|
||
|
||
普通のテゥ好肇侫.ぅ襪<E38185> PostgreSQL
|
||
のデータベースに保存するには、最大で約5倍のディスク容量を必要とします<E381BE>
|
||
<20>
|
||
|
||
例題として、各行に整数とテゥ好筏述を持つ 100,000行のファイルを考え
|
||
てみましょう。テキ
|
||
ストの文字列の平均長さを20バイトと仮定すると、フラット ファイルの大き
|
||
さは約2.8MB です。このデータを含む PostgreSQL データベース
|
||
ファイルの大い気麓,里茲Δ北<CE94>6.4MBと見積もることがでい泙后<EFBFBD>
|
||
32 bytes: 各ロウのヘッダ(概算)
|
||
24 bytes: 整数(int)フィールドとテゥ好<E382A5>(text)フィールド
|
||
+ 4 bytes: ページ上のタップルへのポインタ
|
||
----------------------------------------
|
||
60 bytes per row
|
||
|
||
PostgreSQL のデータページサイズは 8192バイト(8KB)なので:
|
||
|
||
8192 bytes per page
|
||
------------------- = 136 rows per database page (切り捨て)
|
||
60 bytes per row
|
||
|
||
100000 data rows
|
||
-------------------- = 782 database pages (切り上げ)
|
||
128 rows per page
|
||
|
||
735 database pages * 8192 bytes per page = 6,021,120 bytes (6 MB)
|
||
|
||
インデックスは、これほどのオーバヘッドは要求しませんが、インデックス付
|
||
けされるデータを含む以上、それなりに大い<E5A4A7>覆蠅泙后<E6B399>
|
||
|
||
NULLはビットマップとして保存されていて、それらがわずかにスペースを使い
|
||
ます。
|
||
|
||
4.7)
|
||
定義されたテーブル、インデックス、データベース、および、ユーザをどのように<E38186>
|
||
靴童<E99DB4>弔噂个靴泙垢<E6B399><E59EA2>
|
||
|
||
psql
|
||
にはいろいろなバックスラッシュ・コマンドがあり、こうした情報を表示しま
|
||
す。バックスラッシュ・コマンドの種類を見るには \?
|
||
を使って下さい。また、pg_ で始まるシステムテーブルにも記
|
||
述されています。さらに、psql -l
|
||
はすべてのデータベースをリスト表示します。
|
||
|
||
また、pgsql/src/tutorial/syscat.source
|
||
ファイルを走らせてみて下さい。それは、沢山の SELECT
|
||
文により必要な情報をデータベースのシステム・テーブルから取り出して例示
|
||
してくれます。
|
||
|
||
4.8)
|
||
問い合わせが遅いうえ、インデックスを使っている様子がありません。なぜですか<E38199>
|
||
<20>
|
||
|
||
インデックスは自動的にすべての問い合わせで使われるわけではありません。
|
||
テー ブルが最小サイズより大き
|
||
く、問い合わせでそのわずかなパーセンテージのロウを
|
||
選択する時だけ、インデックスは使われます。これはインデックススキ
|
||
ャンによ
|
||
り起こされるランダムなディスクアクセスは、テーブルをストレートに読む順
|
||
次 走査よりも遅くなることがあるからです。
|
||
|
||
インデックスを使うかを決定するために、PostgreSQL はテーブルについ
|
||
ての統計情報を持たなければなりません。この統計情報は、VACUUM
|
||
ANALYZEまたは、単に ANALYZE を使って収集すること ができ
|
||
ます。統計情報を使ってオブティマイザはテーブルの中にあるロウ数を知
|
||
り、インデックスを使うべい<E381B9>侶萃蠅鬚茲蠕気靴<E6B097>任ます。統計情報は最適
|
||
な結合順や結合方法を決める上でも貴重なものもあります。統計情報の収集は
|
||
、 テーブルの内容がかわると毎に繰返しなされるべい任后<E4BBBB>
|
||
|
||
インデックスは、通常 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 パターンが%で始まらない
|
||
+ ~ (正規表現) パターンは^で始まらなければならない
|
||
* 検索文字列を文字クラスから始めることはでい泙擦鵝<E693A6>燭箸┐弌<E29490>[a-e]。
|
||
* ILIKE や ~* のような大文字と小文字を区別し
|
||
ない検索は使えません。そのかわり、このFAQの4.12節で説明する関数の<EFBFBD>
|
||
ぅ鵐妊奪<E5A68A>垢<EFBFBD>箸┐泙后<E6B399>
|
||
* initdb においては、デフォルトでCロケールが使われな
|
||
くてはなりません。その理由は、Cロケール以外では次に大き
|
||
な文字を知ること ができ
|
||
ないからです。このような場合、LIKEインデクシングにだけ
|
||
働くような、特別なtext_pattern_opsインデックスを作成
|
||
することもでい泙后<E6B399>
|
||
|
||
8.0より前のリリースでは、インデックスは、データ型がちょうどインデック<EFBFBD>
|
||
垢離<E59EA2>薀爐侶燭醗戝廚靴覆韻譴弌∋箸┐覆い海箸<E6B5B7>靴个靴个△蠅泙靴拭<E99DB4><E68BAD>修
|
||
蕕<><E89595>int2, int8, および numeric 等のカラムのインデックスがそうです。
|
||
[訳注: 強制的にインデックスを使うには SET enable_seqscan = off
|
||
を実行します。 ]
|
||
|
||
4.9)
|
||
問い合わせオブティマイザがどのように問い合わせを評価するのかを見るにはどう<E381A9>
|
||
靴泙垢<E6B399><E59EA2>
|
||
|
||
オンラインマニュアルで EXPLAIN を見て下さい。
|
||
|
||
4.10) R-tree インデックスとは何ですか?
|
||
|
||
R-tree
|
||
インデックスは空間的なデータにインデックスを付けるために使われます。ハ
|
||
ッシュインデックスでは範囲の検索がでい泙擦鵝<E693A6>泙拭<E6B399>B-tree
|
||
インデックスでは、1次元でしか範囲の検索がでい泙擦鵝<E693A6>R-tree
|
||
インデックスであれば多次元のデータを扱えます。たとえば、もし R-tree
|
||
インデックスを point 型の属世防佞韻襪海箸<E6B5B7>任<EFBFBD>
|
||
るとするとシステムは、「長方形に囲まれた点をすべて選択する」というよう
|
||
な問い合わせに、より効率良く答えられます。
|
||
|
||
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関係の文献を紹介して頂い泙靴拭<E99DB4>
|
||
日本語 Postgres ML のアーカイブから "Subject: [postgres95 801] spatialdata structures"
|
||
http://www.sra.co.jp/people/t-ishii/PostgreSQL/mhonarc/pgsql-jp/1996Oct/msg00007.html
|
||
をご覧下さい。
|
||
]
|
||
|
||
組込みの R-Tree でポリゴンやボックスを操作でい泙后M<E5908E>静<EFBFBD>砲<EFBFBD>R-Tree
|
||
はもっと高い次元を操作するようにも拡張でい泙后<E6B399>村租<E69D91>砲蓮<E7A0B2>R-Tree
|
||
の拡張にはちょっとした作業が必要でして、現在、我々はそれをどのようにす
|
||
るかについての文書を持っていません。
|
||
[訳注:
|
||
R-Tree インデックスはGiSTで開発されています。
|
||
http://www.sai.msu.su/~megera/postgres/gist/
|
||
]
|
||
|
||
4.11) 遺伝的問い合わせ最適化とは何ですか?
|
||
|
||
GEQO モジュールは、沢山のテーブルを結合するとき
|
||
に、遺伝的アルゴリズム(GA)で問合わせを高速化します。これにより、しらみ
|
||
つぶしに探索を行なわなくても、大い雰觜<E99BB0>(join queries)を扱うことができ
|
||
るようになります。
|
||
|
||
4.12)
|
||
正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現<E5AE9F>
|
||
靴泙垢<E6B399><E59EA2>臺源悊半<E6828A>源悊箸魘菠未靴覆じ〆<E38198>里燭瓩離ぅ鵐妊奪<E5A68A>垢呂匹里茲Δ忙<CE94>
|
||
いますか?
|
||
|
||
~演算子は正規表現照合を行ない、~*
|
||
は大文字と小文字を区別しない(case-insensitive)正規表現照合を行います。
|
||
大文字と小文字を区別しない LIKE 演算子を ILIKE といいます。
|
||
|
||
大文字と小文字を区別しない等値比較は次のように表現でい襦<E38184>
|
||
SELECT *
|
||
FROM tab
|
||
WHERE lower(col) = 'abc';
|
||
|
||
標準インデックスでは使われず、しかしながら、もし関数インデックスを
|
||
作ったならそれが使われるでしょう。
|
||
CREATE INDEX tabindex ON tab (lower(col));
|
||
|
||
|
||
4.13) 問い合わせの中で、フィールドが NULL
|
||
であることを検出するにはどうしますか?
|
||
|
||
カラムを IS NULL と IS NOT NULL とで試してみます。
|
||
|
||
4.14) 様々な文字型のそれぞれの違いは何ですか?
|
||
|
||
Type Internal Name Notes
|
||
--------------------------------------------------
|
||
VARCHAR(n) varchar 最大長のサイズを指定する、詰め物無し
|
||
CHAR(n) bpchar 指定された固定長となるように空白が詰められる
|
||
TEXT text 長さに上限の無いテゥ好<E382A5>
|
||
BYTEA bytea 可変長のバイト配列(null-byte safe)
|
||
"char" char 1文字
|
||
|
||
内部名にお目にかかるのは、システム・カタログを調べるとき
|
||
や、エラーメッセージを受け取るとい任后<E4BBBB>
|
||
|
||
上気侶燭里Δ塑能蕕裡瓦弔侶燭<E4BEB6> "varlena"
|
||
型です(すなわち、ディスクの最初の4バイトがデータ長で、それの後に実際<E5AE9F>
|
||
離如璽燭<E792BD>海ます)。このように実際の空間は宣言された大い気茲蠅眈<E8A085>径腓<E5BE84>
|
||
くなります。しかし、これらのデータ型はTOASTにより圧縮されたり複数ロウ<E383AD>
|
||
謀呂辰栃歛犬気譴燭蠅靴董▲妊<E296B2>好<EFBFBD>紊龍<E7B48A>屬六廚辰燭茲蠑<E88CB2>気<EFBFBD>覆蠅泙后<E6B399>
|
||
|
||
VARCHAR(n) は可変長の文字列を保存するのに最適ですが、保存でき
|
||
る文字列の長さに制限があります。TEXT
|
||
は長さに制限の無い文字列の保存のためのもので、最大で 1ギガバイトです。
|
||
CHAR(n)は、VARCHAR(n)が与えられた文字だけを保存するのに対し、ブランク<E383B3>
|
||
魑佑畊<E4BD91>鵑任い弔眛韻個垢気琶源﨓鵑鯤歛犬垢襪里忘播<E5BF98>任后<E4BBBB>BYTEAは、部分
|
||
的にNULL
|
||
のバイトを含むバイナリデータを保存するためのものです。これらのタイプは
|
||
同じくらいの税銃胆をもちます。
|
||
|
||
4.15.1) 通番(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 からは自動的には行なわれなくなりました。
|
||
]
|
||
|
||
通番についてのもっと詳しい情報は、オンラインマニュアルで
|
||
create_sequence をご覧下さい。
|
||
|
||
また、各ロウのOIDフィールドを一意値として使うこともでき
|
||
ます。しかしながら、もしもデータベースをダンプしてリロードする必要があ
|
||
る場合は、OIDを温存するためにpg_dump で
|
||
-oオプションを使うか、または、COPY WITH
|
||
OIDSオプションを使う必要があります。
|
||
|
||
4.15.2) SERIALデータ型に挿入される値は、どうすれば得られますか?
|
||
|
||
ひとつの方法は、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
|
||
テーブルに対する外部ァ<E983A8>(foreign
|
||
key)のように)使うとよいでしょう。自動的に作られたSEQUENCEオブジェクト<E382AF>
|
||
量樵阿蓮<E998BF><table>_<serialcolumn>_seq のようになり、このうち、table と
|
||
serialcolumn はそれぞれテーブルの名前とSERIALカラムの名前です。
|
||
|
||
あるいは、与えられたSERIAL値を、それが既定値として挿入された後で(after
|
||
)、 currval() 関数を使って取り出すこともでい泙后<E6B399>燭箸┐弌<E29490>
|
||
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 値を使えるようにすることはでい泙后<E6B399>
|
||
|
||
4.15.3) currval() は他のユーザとの競合状態に陥ることはないですか?
|
||
|
||
それはありません。currval()
|
||
は、すべてのユーザではありませんが、あなたのバックエンドに与えられた現
|
||
在の値を返します。
|
||
|
||
4.15.4) トランザクションが中断したとき
|
||
にもういちどシーケンス番号が使われないのはなぜですか?シーケンス/SERIALカ<4C>
|
||
薀爐剖<E78890>があるのはなぜですか?
|
||
|
||
同時性
|
||
を改善するために、実行中のトランザクションに、必要でトランザクションが
|
||
終了するまでロックされないシーケンス値を与えています。このためトランザ
|
||
クションが中断されると番号割り当てにギャップを生じます。
|
||
|
||
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
|
||
フィールドにインデックスを作ることがでい泙后<E6B399> OID
|
||
は、全てのデータベースで使われる中央領域から、全ての新しいロウに割り当
|
||
てられます。OID を他の何かに変えたい、あるいは元の OID
|
||
もテーブルと一緒にコピーしたいのなら、でい覆<E38184>呂△蠅泙擦鵝<E693A6>
|
||
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億を越えると溢れてしまう<E381BE>
|
||
任靴腓ΑC<CE91>發海譴<E6B5B7><E8ADB4><EFBFBD>
|
||
たと報告してくる人はいませんでしたが、そうなる前にこの制限を取り除くこ
|
||
とを計画しています。
|
||
|
||
TID
|
||
は特定の物理ロウをそのブロックとオフセット値で識別するために使われます
|
||
。TID はロウが修正されたり再ロードされると変わります。それらの TID
|
||
は、物理ロウを指すためにインデックス戯椶濃箸錣譴泙后<E6B399>
|
||
|
||
4.17) PostgreSQL で使われるいくつかの用語の意味は何ですか?
|
||
|
||
いくつかのソースコードや古い文書の中には、それぞの専門分野の中でもっと
|
||
一般的に使われる専門用語が使われています。
|
||
* テーブル(table)、関係(relation)、クラス(class)
|
||
* ロウ(row)、レコード(record)、タップル(tuple)
|
||
* カラム(column)、フィールド(field)、属<E38081>(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
|
||
|
||
シェルによって、どちらかひとつが成功するでしょうが、これはプロセスのデ
|
||
ータセグメント制限をより高く設定し、たぶん問い合わせが完結するようにな
|
||
るでしょう。このコマンドは現行のプロセスと、このコマンドを走らせた後に
|
||
作られる全てのサブプロセスについて適用されます。バックエンドがとても多
|
||
くのデータを返すためにSQL
|
||
クライアントで問題が続いているのであれば、クライアントを開始する前にこ
|
||
れを試してみてください。
|
||
|
||
4.19) どのバージョンの PostgreSQL
|
||
を走らせているかを調べるにはどうしますか?
|
||
|
||
psql から SELECT version(); をタイプします。
|
||
|
||
4.20) ラージ・オブジェクトの操作でinvalid large obj descriptor
|
||
を受け取りました。なぜでしょうか?
|
||
|
||
ラージ・オブジェクト操作をするとい蓮∩宛紊<E5AE9B>BEGIN
|
||
WORKとCOMMITを付ける必要があります。すなわち、lo_open ...
|
||
lo_closeをはさみ込みます。
|
||
|
||
現在は、PostgreSQLのトランザクションのコミット時にラージ・オブジェクト
|
||
・ハンドルを閉じることにより、lo_openコマンドが完了した直後に強制的に<E79A84>
|
||
襦璽襪鮗孫圓靴泙后<E6B399>海里燭瓠∈能蕕縫魯鵐疋襪紡个靴堂燭<E5A082>鬚靴茲Δ箸垢襪
|
||
函<>invalid large obj descriptor(ラージ・オブジェクトの記
|
||
述子が不正)となります。それで、もし、トランザクションを使うのを忘れる<E3828C>
|
||
函◆幣<E29786>覆<EFBFBD>箸發曚箸鵑匹了<E58CB9>屐貌<E5B190>い討い織魁璽匹<E792BD>┘蕁璽瓮奪察璽犬鮟个
|
||
垢里任后<E4BBBB>
|
||
|
||
もし、ODBCのようなクライアントインターフェイスをお使いなら、auto-commi
|
||
t offを設定する必要があるかもしれません。
|
||
|
||
4.21) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか?
|
||
|
||
CURRENT_TIMESTAMPを使います:
|
||
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
|
||
|
||
4.22) なぜ、INを使う副問い合わせがとても遅いのですか?
|
||
|
||
7.4
|
||
より前のバージョンでは、副問い合わせは、副問い合わせの結果を外部問い合
|
||
わせの各ロウについて順次走査することによって、外部の問い合わせに結合さ
|
||
せられる。
|
||
副問い合わせがわずかなロウしか返さず、外部問い合わせが沢山のロウを返す
|
||
場合は、INが最も早いです。他の問い合わせを高速化するには、INをEXISTSに
|
||
置換します:
|
||
SELECT *
|
||
FROM tab
|
||
WHERE col IN (SELECT subcol FROM subtab)
|
||
|
||
を、置ご垢┐董<E29490>
|
||
SELECT *
|
||
FROM tab
|
||
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col)
|
||
|
||
とします。 これが手っ取り早いですが、subcolは索引付ぅ<E4BB98>薀爐任△襪戮<E8A5AA>
|
||
です。
|
||
|
||
バージョン7.4以降では、INは、通常の問い合わせと同様の洗練されたジョイ<EFBFBD>
|
||
鵑竜蚕僂鮗尊櫃忙箸ぁ<E7AEB8>EXISTSを使うことを好みます。
|
||
|
||
4.23) 外部結合(outer join)はどのように実現しますか?
|
||
|
||
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
|
||
を使ってシミュレートでい泙后<E6B399> たとえば、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) 複数のデータベースを使う問い合わせはどのようにすればでい泙垢<E6B399><E59EA2>
|
||
|
||
現行のデータベース以外への問い合わせ方法はありません。というのもPostgr
|
||
eSQLがデータベース仕様のシステムカタログを読み込むためで、そこには、た
|
||
とえそのふりをするだけにしろ、データベースを越えて問い合わせをするすべ
|
||
がありません。
|
||
|
||
contrib/dblink
|
||
はデータベース間(cross-database)の問い合わせを関数呼出しにより許します
|
||
。もちろん、クライアントは同時に接続を別のデータベースへも張らなくては
|
||
ならず、結果をクライアント側でマージしなくてはなりません。
|
||
|
||
4.25) 関数で複数のロウまたはカラムを返すにはどうしますか?
|
||
|
||
7.3では関数から、複数のロウや複数カラムを簡単に返せます。
|
||
http://techdocs.postgresql.org/guides/SetReturningFunctions。
|
||
|
||
4.26)なぜ、PL/PgSQL 関数の中から一時テーブルを確実に create/drop
|
||
することがでい覆い里任靴腓Δ<E88593><CE94>
|
||
|
||
PL/PgSQL は関数の内容をゥ礇奪轡紊掘△修良垤<E889AF>壁益醉僂里燭瓠△發<E296B3>
|
||
PL/PgSQL
|
||
関数が一時テーブルにアクセスすると、そのテーブルはあとでドロップされ再
|
||
作成されますが、関数が再び呼び出されると、キ
|
||
ャッシュされているその関数の内容はまだ古い一時テーブルを依然として指し
|
||
ているからです。解決策は、 PL/PgSQL の中で EXECUTE
|
||
を一時テーブルアクセスのために使うことです。これで、毎回問い合わせをパ
|
||
ースし直すことになるでしょう。
|
||
|
||
4.27) どのような暗号化オプションを利用でい泙垢<E6B399>?
|
||
|
||
* contrib/pgcryptoにはSQL問い合わせの中で使うための沢山の暗号化を含<E38292>
|
||
澆泙后<E6B399>
|
||
* クライアントとサーバとの間の伝送を暗号化するには、サーバではpostgr
|
||
esql.confのsslオプションをtrue
|
||
に設定し、pg_hba.confには適用するhostあるいはhostsslの行がなくては
|
||
なりません。そして、クライアントではsslmodeをdisableにしてはなりま
|
||
せん。 (PostgreSQL純正のSSL接続のかわりに、stunnel や ssh
|
||
サードパーティ製の暗号化転送を使うことも可能であることも気靴討<E99DB4><E8A88E>
|
||
ます。)
|
||
* バージョン7.3
|
||
ではデータベースユーザのパスワードは保存される時に自動的に暗号化さ
|
||
れます。
|
||
それより前のバージョンではpostgresql.conf中でPASSWORD_ENCRYPTIONを
|
||
邑悊砲垢詆<E59EA2>廚<EFBFBD>△蠅泙后<E6B399>
|
||
* サーバーを走らせるのに暗号化ファイルシステムを使うこともでい泙后<E6B399>
|
||
|
||
[訳注
|
||
レプリケーション関連の項目がなくなりましたが、訳注のみ残してあります。
|
||
|
||
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
|
||
]
|
||
_________________________________________________________________
|
||
|
||
PostgreSQLの拡張についての質問
|
||
|
||
5.1) 自分で書いたユーザ定義関数を psql
|
||
の中で実行するとコア・ダンプしてしまうのはなぜですか?
|
||
|
||
問題は色々と考えられますが、まず最初に、作成したユーザ定義関数を単独の
|
||
テストプログラムにして試してみて下さい。
|
||
|
||
5.2) PostgreSQL
|
||
用に書いたちょっと素敵な新しい型や関数を提供してプロジェクトに貢献したいの<E38184>
|
||
任垢<E4BBBB><E59EA2>
|
||
|
||
皆さんの行なった拡張を、pgsql-hackers
|
||
メーリング・リストに送ってください。そして、ゆくゆくはそうした拡張が
|
||
contrib/ サブディレクトリの中に入ることになるでしょう。
|
||
|
||
5.3) タプルを返す C言語の関数はどのように書い泙垢<E6B399><E59EA2>
|
||
|
||
バージョン7.3以降のPostgreSQLでは、テーブルを返す関数を C,
|
||
PL/PgSQL、そして SQL
|
||
にて完全にサポートします。詳しくはプログラマガイドの情報を見てください
|
||
。Cで定義された表を返す関数の例題がcontrib/tablefuncの中にあります。
|
||
|
||
5.4)
|
||
ソース・ファイルを変更しました。再コンパイルしても変化が見られないのはなぜ<E381AA>
|
||
任垢<E4BBBB><E59EA2>
|
||
|
||
いくつかの Makefile
|
||
がインクルード・ファイルに対して適切な依存関係を持っていません。make
|
||
clean をしてからもう一度 make を行なわなくてはなりません。もし、GCC
|
||
をお使いであれば configure の --enable-depend
|
||
オプションを使って、コンパイラに依存関係を自動的に調べさせることもでき
|
||
ます。
|
||
_________________________________________________________________
|
||
|
||
[訳注:
|
||
日本語版の製作については以下の通りです。
|
||
|
||
最終更新日: 2005年01月12日
|
||
翻訳者: 桑村 潤 (Jun Kuwamura <juk at PostgreSQL.jp>)
|
||
|
||
このFAQの和訳の作成にあたり協力をしてくださった方々(敬称は略させていただい泙<E38184>):
|
||
|
||
田仲 <20>(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>)
|
||
<20> 真太郎(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>)
|
||
せせ じゅん(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>)
|
||
|
||
をはじめ、ポストグレスに関する話題防戮米鐱楔譽櫂好肇哀譽后Ε瓠璽螢鵐哀螢好函<E5A5BD>
|
||
和訳のい辰<EFBFBD>韻鮑遒辰討<EFBFBD>譴<EFBFBD> JF(Linux Japanese FAQ Mailing List)プロジェクト、FreeBSD ドゥ絅瓮鵐董璽轡腑鵐廛蹈献Д<E78CAE>函<EFBFBD>
|
||
その他、直接あるいは間接的にかかわっているすべてのオープンソースコミュニティーの皆さんに感謝します。
|
||
|
||
日本語版のこの文書は、以下からもたどれます。
|
||
http://www.rccm.co.jp/~juk/pgsql/(FAQ和訳 PostgreSQL についてよくある質問)
|
||
http://www.PostgreSQL.jp/wg/jpugdoc/JPUG文書・書籍関連分科会
|
||
http://www.linux.or.jp/JF/Linux JFプロジェクト
|
||
|
||
なお、この和訳に関するご意見は(juk at PostgreSQL.jp)までお寄せ下さい。
|
||
]
|