mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-25 12:07:18 +02:00
1127 lines
47 KiB
Plaintext
1127 lines
47 KiB
Plaintext
PostgreSQL(ポストグレス・キュー・エル)についてよくある質問とその解答(FAQ)
|
||
|
||
原文最終更新日: Thu Jan 01 14:01:00 EDT 2009
|
||
|
||
現在の維持管理者: Bruce Momjian (bruce@momjian.us)
|
||
Maintainer of Japanese Translation: Jun Kuwamura (juk at postgresql.jp)
|
||
|
||
この文書の最新版は http://www.postgresql.org/docs/faqs.FAQ.html で見ることがで
|
||
きます。
|
||
|
||
プラットホームに特有の質問については: http://www.postgresql.org/docs/faq/
|
||
に解答があります。
|
||
|
||
(以下、訳者による注釈を [訳注: と ] とで囲んで記します。)
|
||
[訳注:
|
||
日本語版のFAQは、
|
||
http://www.postgresql.org/docs/faqs.FAQ_japanese.html
|
||
にあります。
|
||
最新の日本語版については、この文書の最後にある「日本語版について」をごらんください。
|
||
|
||
]
|
||
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
一般的な質問
|
||
|
||
1.1) PostgreSQLとは何ですか?その呼び方は? Postgresとは?
|
||
1.2) 誰が PostgreSQL をコントロールしていますか?
|
||
1.3) PostgreSQLの著作権はどうなってますか?
|
||
1.4) PostgreSQLをサポートするプラットホームは?
|
||
1.5) PostgreSQLはどこから入手できますか?
|
||
1.6) 最新のリリースはどれですか?
|
||
1.7) サポートはどこで受けられますか?
|
||
1.8) バグレポートはどのように発信しますか?
|
||
1.9) 既知のバグや未だ無い機能はどうやって見つけますか?
|
||
1.10) どのような文書がありますか?
|
||
1.11) SQLはどうすれば学べますか?
|
||
1.12) パッチを提供したり、開発チーム参加するにはどうすればよいですか?
|
||
1.13) 他のDBMSと比べてPostgreSQL はどうなのですか? PostgreSQLを組み込みに使え
|
||
ますか?
|
||
1.14) PostgreSQLは国毎の最新の夏時間の変更を扱いますか?
|
||
1.15) PostgreSQLのメーリングリストの購読をやめるにはどうすればよいですか?また
|
||
、電子メールを重複して受け取らないようにするにはどうしますか?
|
||
|
||
ユーザ・クライアントの質問
|
||
|
||
2.1) PostgreSQL にはどんなインターフェースが使えますか?
|
||
2.2) PostgreSQL を Web ページと連携させるにはどんなツールがありますか?
|
||
2.3) PostgreSQL にグラフィカル・ユーザインターフェースはありますか?
|
||
|
||
管理上の質問
|
||
|
||
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) 最初のいくつかのロウのみを select するにはどうしますか?ランダムなロウ?
|
||
4.2) 定義されたテーブル、インデックス、データベース、および、ユーザをどのように
|
||
して見つけ出しますか?
|
||
4.3) カラムのデータタイプを変更するにはどうしますか?
|
||
4.4) ロウ、テーブル、データベースの最大サイズは?
|
||
4.5) 一般的なテキストファイルのデータを保存するには、データベースのディスク容量
|
||
はどのくらい必要ですか?
|
||
4.6) クエリが遅いのはなぜでしょう?なぜ、インデックスが使われないのでしょうか?
|
||
4.7) クエリオプティマイザが、どのようにクエリを評価していかを、見るにはどうしま
|
||
すか?
|
||
4.8) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現
|
||
しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使い
|
||
ますか?
|
||
4.9) クエリの中で、フィールドが NULL であることを検出するにはどうしますか?
|
||
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) どのようなレプリケーションのソリューションがありますか?
|
||
4.21) テーブルとカラムの名前がクエリーの中で認識されないのはなぜですか?なぜ大
|
||
文字化(キャピタライズ)は温存されないのですか?
|
||
|
||
日本語に関する質問
|
||
|
||
5.1) 日本語がうまく扱えないのはなぜですか?
|
||
5.2) psql でWindowsからアクセスしたときに、日本語が文字化けするのですが?
|
||
5.3) PostgreSQLで日本語の全文検索はできますか?
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
一般的な質問
|
||
|
||
1.1) PostgreSQLとは何ですか?その呼び方は? Postgresとは?
|
||
|
||
PostgreSQLはPost-Gres-Q-L(ポスト・グレス・キュー・エル) と発音しますが、会話の
|
||
中では単純に Postgres と呼ばれることもあります。("PostgreSQL"をどう発音するか
|
||
気になる人のために、音声ファイルを用意してあります。
|
||
|
||
PostgreSQL はオブジェクト-リレーショナルデータベースシステムで、伝統的な商用デ
|
||
ータベースシステムに、次世代DBMSシステムに見られるような改良が施された特徴を有
|
||
します。PostgreSQLは、無料で完全なソースコードを手に入れることができます。
|
||
|
||
PostgreSQL の開発は、ほとんどが、世界中にひろがったボランティアの開発者によって
|
||
、インターネットを通したコミュニケーションによって行われています。コミュニティ
|
||
によるプロジェクトであるため、どの企業の制御もうけません。開発に参加したければ
|
||
、 http://www.postgresql.org/docs/faqs.FAQ_DEV.html にある開発者のFAQを見てくだ
|
||
さい。
|
||
|
||
PostgresはPostgreSQLの広く使われている愛称です。また、バークレーでのプロジェク
|
||
トでもともと使われていた名前で、ほかのいずれの愛称に比べても遥かに好ましいです
|
||
。'PostgreSQL' の発音が難しいと思うのであれば、そのかわりに 'Postgres' と呼ぶよ
|
||
うにしましょう。
|
||
|
||
1.2) 誰が PostgreSQL をコントロールしていますか?
|
||
|
||
PostgreSQLの門番、中央委員会、あるいは、コントロールをする会社を探そうとしても
|
||
、諦めざるをえず ---- 存在しないのです。我々は、中心となるコミッティとCVSコミッ
|
||
タを持ちますが、これらのグループはコントロールするためというよりも、管理上のも
|
||
のです。ここでは、プロジェクトは、だれでも参加ができる開発者とユーザのコミュニ
|
||
ティにより方向付けられます。読者がやらなければならないことは、メーリングリスト
|
||
をサブスクライブして、議論に参加することです。(Developer's FAQには、PostgreSQL
|
||
開発に加わり方についての情報があります。)
|
||
|
||
1.3) PostgreSQL の著作権はどうなってますか?
|
||
|
||
PostgreSQL は下記の著作権に従います。
|
||
|
||
PostgreSQLは古くからのBSDライセンスの下で配布されています。それは基本的には、利
|
||
用者がそのコードを好き勝手に利用することが許されています。制限があるとすれば、
|
||
このソフトウェアに伴ういかなる問題においても法的に責任を我々に負わせることがで
|
||
きないということです。また、この著作権表示がこのソフトウェアのすべての複製に表
|
||
示することも必要です。以下に、我々が実際に使っているBSD使用許諾書を示します:
|
||
|
||
[訳注:
|
||
正文は英語です。参考として、訳文を併記掲載します。
|
||
]
|
||
|
||
|
||
PostgreSQL Data Base Management System
|
||
|
||
Portions Copyright (c) 1996-2009, 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-2009, PostgreSQL国際開発グループ
|
||
部分的著作権 (c) 1994-1996 カリフォルニア大学本校
|
||
|
||
|
||
本ソフトウェアおよびその文書一式は上記の著作権表示と、この文章
|
||
およびこれに続く二つの段落が全ての複製に添付されている限りにおい
|
||
て、使用、複製、修正および配付の許可を、いかなる目的であっても、
|
||
無償でかつ同意書無しに行なえることをここに認めます。
|
||
|
||
カリフォルニア大学は、いかなる当事者にたいしても、利益の壊失を
|
||
含む、直接的、間接的、特別、偶然あるいは必然的にかかわらず生じた
|
||
損害について、たとえカリフォルニア大学がこれらの損害について訴追
|
||
を受けていたとしても、一切の責任を負いません。
|
||
|
||
カリフォルニア大学は、商用目的における暗黙の保証と、特定目的で
|
||
の適合性に関してはもとより、これらに限らず、いかなる保証も放棄す
|
||
ることを明言します。以下に用意されたソフトウェアは「そのまま」を
|
||
基本原理とし、カリフォルニア大学はそれを維持、支援、更新、改良あ
|
||
るいは修正する義務を負いません。
|
||
|
||
[訳注:
|
||
著作権に関する正文は上記の英語による表記です。日本語訳はあくまで
|
||
参考程度としてください。
|
||
]
|
||
|
||
|
||
1.4) PostgreSQLをサポートするプラットホームは?
|
||
|
||
一般的に、最近のUnix互換プラットホームであればPostgreSQLを稼働させられるはずで
|
||
す。リリースの時点で実際にテストを行なったことの報告がなされたプラットホームに
|
||
ついてはインストール手引書に列挙してあります。
|
||
|
||
PostgreSQL は、Win2000 SP4, WinXP, そして、Win2003 など Microsoft Windows NTベ
|
||
ースのオペレーティングシステムで、ネイティブに走ります。あらかじめパッケージに
|
||
されたインストーラが http://www.postgresql.org/download/windows からダウンロー
|
||
ドできます。 MSDOSベースのWindowsのバージョン(Win95, Win98, WinMe)では、Cygwin
|
||
を使って PostgreSQL を走らせることができます。
|
||
|
||
[訳注
|
||
日本語での情報は、次の Windows版に関するFAQの和訳をごらんくださ
|
||
い(やや古いです)。
|
||
http://old.postgresql.jp/wg/jpugdoc/FAQ_windows.ja.html
|
||
]
|
||
|
||
|
||
次のサイトに Novell Netware 6 への移植版もあります。 http://
|
||
developer.novell.com/wiki/index.php/Postgresql また、OS/2 (eComStation) バージ
|
||
ョンは、 http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=
|
||
postgreSQL&stype=all&sort=type&dir=%2Fにあります。
|
||
|
||
|
||
1.5) PostgreSQL はどこから入手できますか?
|
||
|
||
Webブラウザ経由だと、 http://www.postgresql.org/ftp/、それから、ftp経由だと、
|
||
ftp://ftp.postgresql.org/pub/ を使います。
|
||
|
||
1.6) 最新のリリースはどれですか?
|
||
|
||
PostgreSQL の最新版はバージョン 8.3.5 です。
|
||
|
||
我々は、1年毎にメジャーリリースを、数ヵ月ごとのマイナーリリースを行なうことを計
|
||
画しています。
|
||
|
||
[訳注
|
||
バージョン番号の x.y.z の最初の x.y がメジャーリリースの番号に相
|
||
当し、最後の z がマイナーリリースの番号になります。メジャーリリー
|
||
スの番号が同じであれば、データベース・クラスタに互換性があります。
|
||
]
|
||
|
||
|
||
1.7) サポートはどこで受けられますか?
|
||
|
||
PostgreSQL コミュニティは多くのユーザのために、電子メール経由の支援を提供してい
|
||
ます。電子メールリストをサブスクライブするためのメインとなるウェブサイトは
|
||
http://www.postgresql.org/community/lists/です。これから、始めるのであれば
|
||
general または、bugs といったリストがよいでしょう。
|
||
|
||
メジャーなIRC チャンネルは、Freenode (irc.freenode.net)の #postgresql というチ
|
||
ャンネルです。UNIX コマンドでは、 irc -c '#PostgreSQL' "$USER" irc.freenode.net
|
||
を使って参加できます。同じネットワークに、スペイン語のチャンネル (#
|
||
postgresql-es)、フランス語のチャンネル (#postgresqlfr)、ブラジル語チャンネル (#
|
||
postgresql-br) もあります。また、EFNetにもPostgreSQLチャンネルがあります。
|
||
|
||
[訳注:
|
||
1999年7月23日、日本ポストグレスユーザー会、略称JPUGが設立されました。
|
||
JPUG は非営利組織で、PostgreSQLを利用する人達の相互協力の場となっています。
|
||
(2006年 特定非営利活動(NPO)法人日本PostgreSQLユーザ会になりました。
|
||
Web会員と正会員の会費は無料ですが、協賛会員の会費と会員の貢献で
|
||
会は運営されています。)
|
||
詳しくは、JPUG のWeb サイト:
|
||
http://www.postgresql.jp/
|
||
をごらんください。
|
||
|
||
日本語のIRCチャンネル '#PostgreSQL:*.jp' も存在します。
|
||
]
|
||
|
||
|
||
商用サポート会社のリストは http://www.postgresql.org/support/
|
||
professional_supportにあります。
|
||
|
||
1.8) バグレポートはどのように発信しますか?
|
||
|
||
http://www.postgresql.org/support/submitbug のPostgreSQL バグフォームを訪れてく
|
||
ださい。バグレポートを提出する仕方についての手引と指針があります。
|
||
|
||
それと同時に ftp サイト ftp://ftp.postgresql.org/pub/ で、最新バージョンの
|
||
PostgreSQL を探してみてください。
|
||
|
||
1.9) 既知のバグや未だ無い機能はどうやって見つけますか?
|
||
|
||
PostgreSQLは拡張されたSQL:2003のサブセットをサポートします。我々のページの TODO
|
||
リストに、既知のバグや欠落機能や将来計画についての記述があります。
|
||
|
||
特徴の要求は普通次のいずれかの解答の中にあります:
|
||
|
||
・ 既にここにある機能は、 TODO リストです
|
||
・ 次のような機能は目論まれていません。それは:
|
||
□ SQL規格に準ずる既存の機能と重複するもの
|
||
□ コードの複雑性ばかりを高めて、得るものが少ない機能
|
||
□ 安全性が確められない機能
|
||
・ 新しい機能は、 TODO のリストに加えられられます。
|
||
|
||
我々は、PostgreSQL に関して、電子メールで直接対応して TODO リストを最新に更新し
|
||
てゆくほうがより効果的であることを知っていますので、バグ追跡システムは使いませ
|
||
ん。現実に、このソフトウェアの中でバグはそれほど長くはい続けませんし、多くのユ
|
||
ーザに影響するバグは早急に修正されます。PostgreSQLのリリースで、すべての変更点
|
||
、改良点、そして、修正点を知りたければ、 CVS のログメッセージを見てください。リ
|
||
リースノートにさえ、このソフトウェアに加えられたすべての変更点は網羅されていま
|
||
せん。
|
||
|
||
1.10) どのような文書がありますか?
|
||
|
||
配付の中に、いくつかのマニュアルとオンライン・マニュアル(マニュアル・ページ)お
|
||
よびいくつかの小さなテスト例題が含まれます。 /docディレクトリをごらんください。
|
||
また、マニュアルは、 http://www.postgresql.org/docs/でオンラインでも閲覧できま
|
||
す。
|
||
|
||
[訳注:
|
||
JPUG 文書・書籍関連分科会で翻訳されたマニュアルもあります。
|
||
|
||
http://www.postgresql.jp/document/pg830doc/
|
||
インプレスから、
|
||
|
||
PostgreSQLオフィシャルマニュアルとして出版されています。
|
||
]
|
||
|
||
|
||
オンラインで参照できる PostgreSQL の本も2冊あります。 http://www.postgresql.org
|
||
/docs/books/awbook.html
|
||
|
||
[訳注:
|
||
この本は、JPUG「PostgreSQL Book翻訳分科会」
|
||
で翻訳され、ピアソンから
|
||
「はじめてのPostgreSQL」として出版されています。
|
||
]
|
||
|
||
|
||
および、 http://www.commandprompt.com/ppbook/です。
|
||
|
||
[訳注:
|
||
邦訳は「実践 PostgreSQL」
|
||
がオライリーから出版されています。
|
||
]
|
||
|
||
|
||
購入可能な書籍の目録は、http://www.postgresql.org/docs/books/ にあります。
|
||
PostgreSQL 技術情報記事も、http://wiki.postgresql.org/wiki/
|
||
Community_Generated_Articles%2C_Guides%2C_and_Documentation にあります。
|
||
|
||
[訳注:
|
||
日本語の書籍等については、日本PostgreSQLユーザ会の、http://www.postgresql.jp/PostgreSQL/references.html
|
||
もごらんください。
|
||
]
|
||
|
||
|
||
コマンドラインのクライアントプログラムpsql にも、型、演算子、関数、集約、その他
|
||
の情報を調べるために、素晴らしい \d コマンドがいくつかあります。 \? を入力する
|
||
と利用可能なコマンドが表示されます。
|
||
|
||
我々の Web サイトには、さらに沢山の文書があります。
|
||
|
||
[訳注:
|
||
2008年11月18日、PostgreSQL普及のために一般向けの情報を扱う
|
||
「Let's Postgres」というポータルサイトがオープンしました。http://lets.postgresql.jp/
|
||
]
|
||
|
||
|
||
1.11) SQL はどうすれば学べますか?
|
||
|
||
まず、上記で述べた PostgreSQL についての本を読むことを検討してください。 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://sqlcourse.com
|
||
http://www.w3schools.com/sql/default.asp
|
||
http://mysite.verizon.net/Graeme_Birchall/id1.html
|
||
http://sqlzoo.net にあります。
|
||
|
||
[訳注:
|
||
日本PostgreSQLユーザ会の日本語の参考文献の紹介ページ
|
||
|
||
http://www.postgresql.jp/PostgreSQL/references.html
|
||
があります。
|
||
堀田倫英氏の「PostgreSQL日本語マニュアル」
|
||
http://www.net-newbie.com/
|
||
ではオンラインマニュアルの検索ができます。
|
||
丸山不二夫氏のUNIX データベース入門
|
||
http://www.wakhok.ac.jp/DB/DB.html
|
||
もオンラインで読むことができます。
|
||
Nikkei BP IT Pro にある石井達夫氏の PostgreSQL ウォッチ
|
||
では毎回新しい情報をとりあげています。
|
||
]
|
||
|
||
|
||
1.12) パッチを提供したり、開発チーム参加するにはどうすればよいですか?
|
||
|
||
(開発者向けの)Developer's FAQをごらんください。
|
||
|
||
1.13) 他のDBMSと比べPostgreSQLはどうなのですか? PostgreSQLを組み込みに使えます
|
||
か?
|
||
|
||
ソフトウェアを評価する方法にはいくつかあります。機能と性能と信頼性とサポートと
|
||
価格です。
|
||
|
||
機能(Features)
|
||
PostgreSQLは、トランザクション、サブクエリ、トリガー、ビュー、外部キー整合
|
||
性参照、および、洗練されたロック機構など、大規模商用 DBMSが持つ機能をほとん
|
||
ど持っています。さらに PostgreSQLは、ユーザ定義型、継承、ルール、それから、
|
||
ロック競合を縮小するマルチバージョン同時性制御など、商用DBMSも持ち合わせな
|
||
いような機能をいくつか持ち合わせています。
|
||
性能(Performance)
|
||
PostgreSQLは他の商用あるいはオープンソースのデータベースと互角の性能も持ち
|
||
ます。ある面ではより早かったり、ほかの面ではより遅かったりします。他のデー
|
||
タベースに比べた性能は、ふつう +/-10% くらいでしょう。
|
||
信頼性(Reliability)
|
||
我々は、DBMSの信頼性が高くなくてはその価値が無いことを理解してます。十分テ
|
||
ストして、安定したコードをバグを最小にしてからリリースするように努めてます
|
||
。それぞれのリリースは少なくとも1 カ月以上のベータ・テストを行ない、これま
|
||
でのリリースの履歴が、製品版として安定した堅固なリリースであることを物語っ
|
||
ています。この分野では、他のデータベースと比べても遜色がないことに自信を持
|
||
っています。
|
||
サポート(Support)
|
||
我々のメーリングリストは、遭遇するいかなる問題についても解決への手助けをし
|
||
てくれる、開発者やユーザの大きな集まりへの接点を提供しています。我々は問題
|
||
の解決を保証することはできませんが、商用データベースであっても常に解決され
|
||
るわけではありません。開発者や、ユーザ・コミュニティ、マニュアル類、それに
|
||
、ソースコードなどへ直接アクセスできることによって、PostgreSQLのサポートは
|
||
、他のDBMS サポートよりも優れたものとなっています。御要望に答えて、事柄毎の
|
||
商用サポートなどもあります(FAQ1.7節をごらんください)。
|
||
価格(Price)
|
||
PostgreSQLの利用は、商用でも非商用でも、すべて無料です。上記に示してあるBSD
|
||
スタイルの使用許諾に外れない限り、PostgreSQLのコードを制限無しで商品に組み
|
||
込むことができます。
|
||
|
||
PostgreSQLはクライアント/サーバ・アーキテクチャで設計されていて、クライアント
|
||
とサーバおよびそれを補助するいろいろなプロセスが別々に走ることが要求されます。
|
||
多くの組み込みアーキテクチャはこのような要求をサポート可能です。しかし、お使い
|
||
になっている組み込みアーキテクチャによっては、データベースサーバがアプリケーシ
|
||
ョン・プロセスの中で走ることを要求される場合があり、Postgresを使うことはできな
|
||
いので、軽量のデータベースソリューションを選択すべきです。
|
||
|
||
1.14) PostgreSQLは国毎の最新の夏時間の変更を扱いますか?
|
||
|
||
合州国の夏時間の変更は、PostgreSQLのリリース8.0.4以降[4+]と、その後のメジャーリ
|
||
リース、たとえば 8.1 には含まれています。カナダとオー西部ストラリアの変更は、
|
||
8.0.[10+], 8.1.[6+] および、その後のメジャーリリースのすべてに含まれます。8.0よ
|
||
り前のPosrgreSQLではオペレーティングシステムのタイムゾーンデータベースを夏時間
|
||
情報のために使っています。
|
||
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
1.15) PostgreSQLのメーリングリストの購読をやめるにはどうすればよいですか?また
|
||
、電子メールを重複して受け取らないようにするにはどうしますか?
|
||
|
||
PostgreSQLのMajordomo ページから、PostgreSQLに関する複数のメーリングリストの購
|
||
読の開始と中止ができるようになっています。(ログインするためにはMajaordomoから
|
||
送られる御本人のパスワードが必要になります。)
|
||
|
||
PostgreSQLnoすべてのメーリングリストでは、返信はメーリングリストとかつ元のメー
|
||
ルの投稿者へ送られるように構成してあります。これにり利用者は、もっとも迅速にメ
|
||
ールへの返信を受けられるようになっています。既に直接受け取っているメールを、リ
|
||
ストから重複して受け取りたくない場合は、Majordomo のChange Settingsページから、
|
||
eliminateccをチェックします。また、selfcopyのチェックをはずすことで、自分の送っ
|
||
たメールのコピーを受け取らないようにもできます。
|
||
|
||
ユーザ・クライアントの質問
|
||
|
||
2.1) PostgreSQL にはどんなインターフェースが使えますか?
|
||
|
||
PostgreSQL のインストールに含まれる物はCと組込み Cのインターフェースだけです。
|
||
その他のインターフェースは独立したプロジェクトで、別々にダウンロードされます。
|
||
分かれることで、それぞれの開発チームが独自のリリーススケジュールを持つことが許
|
||
されます。
|
||
|
||
PHP のようないくつかのプログラミング言語は、 PostgreSQLのインターフェースを含ん
|
||
でいます。Perl, TCL, Python, そして、そのほかの利用可能な言語のインターフェース
|
||
は、http://pgfoundry.org の Drivers/Interfaces の節の中とインターネットの検索で
|
||
みつけられます。
|
||
|
||
2.2) PostgreSQL を Web ページと連携させるにはどんなツールがありますか?
|
||
|
||
データベースを裏に持つ Web ページについての素晴らしい紹介が、
|
||
http://www.webreview.comにあります。
|
||
|
||
Web への拡張のためには、PHP(http://www.php.net/) が卓越したインターフェースとな
|
||
っています。
|
||
|
||
[訳注:
|
||
PHPに関する日本語の情報は、2000年4月19日に発足した日本PHPユーザ会のサイト
|
||
http://www.php.gr.jp/
|
||
あるいは、廣川 類さんのサイト
|
||
http://www.geocities.jp/rui_hirokawa/php/
|
||
にかなりまとめられています。
|
||
]
|
||
|
||
|
||
処理が複雑な場合、多くの人は Perl インターフェースと CGI.pm か mod_perl を使い
|
||
ます。
|
||
|
||
2.3) PostgreSQL にグラフィカル・ユーザインターフェースはありますか?
|
||
|
||
商用とオープンソース開発者によるもの両方で、PostgreSQLには多くのGUIツールが利用
|
||
可能で、詳細なリストは、 PostgreSQL GUI ツールについてのコミュニティガイドにて
|
||
ごらんください。
|
||
|
||
[訳注:
|
||
pgAdmin3 はPostgreSQL標準GUI管理ツールで、Windows版(PostgreSQL
|
||
for Windows) に同梱されています。詳しい情報は、
|
||
http://www.pgadmin.org/にあります。
|
||
]
|
||
|
||
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
管理上の質問
|
||
|
||
3.1) どのようにすれば /usr/local/pgsql 以外の場所にインストールできますか?
|
||
|
||
簡単な方法は、 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://www.powerpostgresql.com/PerfList/
|
||
と、 http://momjian.us/main/writings/pgsql/hw_performance/index.html (JPUG
|
||
サイトの日本語版) に述べられています。
|
||
|
||
|
||
[訳注:
|
||
JPUG理事長の片岡裕生氏による、「今すぐできるPostgreSQLチューニング」
|
||
というコーナーが ThinkIT サイトにあり、実作業の参考になります。
|
||
http://www.thinkit.co.jp/free/tech/10/1/1.html
|
||
]
|
||
|
||
|
||
3.4) どのようなデバグ機能が使えますか?
|
||
|
||
サーバ構成変数については、 href="http://www.postgresql.org/docs/current/
|
||
interactive/runtime-config-logging.html">http://www.postgresql.org/docs/current
|
||
/interactive/runtime-config-logging.html に示されるように多くの log_* があり、
|
||
クエリとプロセスの統計情報を出力することができ、デバグや性能測定にはとても便利
|
||
です。
|
||
|
||
3.5) 接続しようとするときに 'Sorry, too many clients' が出るのはなぜですか?
|
||
|
||
既定での制限である 100 のデータベースセッションに達してしまっています。サーバー
|
||
の同時接続できるバックエンドプロセスの制限値を増やす必要があります。
|
||
postgresql.conf の中のmax_connections の値を変更してサーバを再起動することで可
|
||
能になります。
|
||
|
||
3.6) PostgreSQLのアップグレードの手順はどうなりますか?
|
||
|
||
バージョン番号付けの方針について、更新全般についての解説はhttp://
|
||
www.postgresql.org/support/versioning を、そして、アップグレードについての一般
|
||
的な説明は http://www.postgresql.org/docs/current/static/install-upgrading.html
|
||
をご覧ください。
|
||
|
||
[訳注:
|
||
アップグレードについての和訳版は下記にあります。
|
||
http://www.postgresql.jp/document/current/html/install-upgrading.html
|
||
]
|
||
|
||
[訳注:
|
||
原文では、下記の内容は独立したページに移され、削除されています。
|
||
|
||
新しい機能を盛り込むPostgreSQLのメジャーリリースはだいたい年に1回程度行ないます
|
||
。メジャーリリースは、たとえば、8.1から8.2へのように、バージョン番号の1番目か2
|
||
番目の部分を増やしてゆきます。
|
||
|
||
PostgreSQLのメジャーリリースは通常、システムテーブルとデータの内部フォーマット
|
||
を変更します。これらの変更はたいていは複雑なのでで、データファイルの後方互換性
|
||
を維持したりはしません。メジャーアップグレードのためには、データベースのダンプ/
|
||
リロードが必要になります。
|
||
|
||
マイナーリリースは、たとえば、8.1.5 から8.1.6へのように、バージョン番号の3番目
|
||
の値を増やします。PostgreSQLチームは、マイナーリリースに対しては、バグフィクス
|
||
しか行ないません。すべてのユーザは、できるだけ最新のマイナーリリースに更新すべ
|
||
きです。アップグレードには、常にリスクがつきものですから、PostgreSQLのマイナー
|
||
修正リリースでは、頻繁に発生したり、セキュリティに関係したり、データがつぶれる
|
||
バグだけを修正し、アップグレードのリスクを最小限にとどめます。我々のコミュニテ
|
||
ィでは、アップグレードするリスクよりも、アップグレードしないリスクのほうが高い
|
||
と考えています。
|
||
|
||
マイナーリリースのアップグレードにはダンプとリストアの必要はなく、データベース
|
||
サーバを停止して、アップデートされたバイナリをインストールし、サーバをリスター
|
||
トします。
|
||
|
||
]
|
||
|
||
3.7) ハードウェアにはどのようなコンピュータを使えばよいですか?
|
||
|
||
PCハードウェアはほとんど互換性がありますので、ほとんどの人は、すべてのPCハード
|
||
ウェアが同じ品質だと思い込む傾向があります。しかし、それは間違いです。ECC RAM、
|
||
SCSI、および、高品質マザーボードは、安いハードウェアに比べると、より信頼性が高
|
||
く、より性能も良いのです。 PostgreSQL はほとんどのハードウェアで稼働しますが、
|
||
信頼性や性能が重要な場合は、使用中のハードウェアのオプションについて調査するこ
|
||
とが賢明です。バッテリーバックアップ付きのキャッシュを持つディスクコントローラ
|
||
も役に立ちます。我々のメーリングリスト上でもハードウェアオプションのトレードオ
|
||
フについて議論することができます。
|
||
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
操作上の質問
|
||
|
||
4.1) 最初の数ロウのみを SELECTするにはどうしますか?ランダムなロウ?
|
||
|
||
取得したいロウがほんの数行で、SELECT の実行時に取得するロウの数が分かっていれば
|
||
LIMIT を使いましょう。インデックスが ORDER BY とマッチすれば、クエリ全体を(丸ご
|
||
と)実行しなくても済む場合もあります。SELECT する時点でロウの数が不明なら、カー
|
||
ソルを使って FETCH しましょう。
|
||
|
||
ランダムにロウをSELECTするには、次の文を使います:
|
||
|
||
SELECT col
|
||
FROM tab
|
||
ORDER BY random()
|
||
LIMIT 1;
|
||
|
||
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.4) ロウ、テーブル、データベースの最大サイズは?
|
||
|
||
制限は以下のとおりです:
|
||
|
||
データベースの最大サイズ? 制限無し (32 TB のデータベースも存在しま
|
||
す)
|
||
テーブルの最大サイズ? 32 TB
|
||
ロウの最大サイズ? 400 GB
|
||
フィールドの最大サイズ? 1 GB
|
||
テーブル内での最大ロウ数? 制限無し
|
||
テーブル内での最大カラム数? カラムの型によって 250-1600
|
||
テーブル内での最大インデックス 制限無し
|
||
数?
|
||
|
||
もちろん、これらは実際は無制限ではなく、ディスク容量とメモリーやスワップスペー
|
||
スの大きさにより制限されます。性能はこれらの値がことのほか大きな時に煽りを受け
|
||
ます。
|
||
|
||
最大テーブルサイズの32TBはオペレーティングシステムによる巨大ファイルのサポート
|
||
は必要としません。巨大なテーブルは複数の1GBのファイルに分けて保存されますので、
|
||
ファイルシステムの制限は重要ではありません。
|
||
|
||
デフォルトのブロックサイズを32kに増加することで、最大テーブルサイズと行サイズと
|
||
最大カラム数とを4倍にすることができます。また、最大テーブルサイズはテーブルパー
|
||
ティションを使って増やすこともできます。
|
||
|
||
ひとつの制限は、約2,000文字以上の長さのカラムにインデックスを付けることができな
|
||
いことです。幸いにも、そのようなインデックスは実際は必要ありません。長いカラム
|
||
のMD5ハッシュの関数インデックスは一意性がなによりの保険で、また、フルテキストの
|
||
インデックスではカラム内の単語を検索することができます。
|
||
|
||
4.5) 一般的なテキストファイルのデータを保存するには、データベースのディスク容量
|
||
はどのくらい必要です?
|
||
|
||
普通のテキストファイルを PostgreSQL のデータベースに保存するには、最大で約5倍の
|
||
ディスク容量を必要とします。
|
||
|
||
例題として、各行に整数とテキスト記述を持つ 100,000行のファイルを考えてみましょ
|
||
う。テキストの文字列の平均長さを20バイトと仮定すると、フラットファイルの大きさ
|
||
は約2.8MB です。このデータを含む PostgreSQL データベースファイルの大きさは次の
|
||
ように約5.2MBと見積もることができます:
|
||
|
||
24 bytes: 各ロウのヘッダ(概算)
|
||
24 bytes: 整数(int)フィールドとテキスト(text)フィールド
|
||
+ 4 bytes: ページ上のタップルへのポインタ
|
||
----------------------------------------
|
||
52 bytes per row
|
||
|
||
PostgreSQL のデータページサイズは 8192バイト(8KB)なので:
|
||
|
||
8192 bytes per page
|
||
------------------- = 146 rows per database page (切り捨て)
|
||
52 bytes per row
|
||
|
||
100000 data rows
|
||
-------------------- = 633 database pages (切り上げ)
|
||
158 rows per page
|
||
|
||
633 database pages * 8192 bytes per page = 5,185,536 bytes (5.2 MB)
|
||
|
||
インデックスは、これほどのオーバヘッドは要求しませんが、インデックス付けされる
|
||
データを含む以上、それなりに大きくなります。
|
||
|
||
NULLはビットマップとして保存されていて、それらがわずかにスペースを使います。
|
||
|
||
4.6) クエリが遅いのはなぜでしょう?なぜ、インデックスが使われないのでしょうか?
|
||
|
||
インデックスは、すべてのクエリで使われるわけではありません。テーブルが最小サイ
|
||
ズより大きく、クエリでそのわずかなパーセンテージのロウを選択する時だけ、インデ
|
||
ックスは使われます。これはインデックススキャンにより起こされるランダムなディス
|
||
クアクセスは、テーブルをストレートに読む順次走査よりも遅くなることがあるからで
|
||
す。
|
||
|
||
インデックスを使うかを決定するために、PostgreSQL はテーブルについての統計情報を
|
||
持たなければなりません。この統計情報は、 VACUUM ANALYZEまたは、単に ANALYZE を
|
||
使って収集することができます。統計情報を使ってオプティマイザはテーブルの中にあ
|
||
るロウ数を知り、インデックスを使うべきかの決定をより正しくできます。統計情報は
|
||
最適な結合順や結合方法を決める上でも貴重なものもあります。統計情報の収集は、テ
|
||
ーブルの内容が変わる毎に繰返しなされるべきです。
|
||
|
||
インデックスは、通常 ORDER BY や結合を行なうためには使われません。順次スキャン
|
||
に続く明示的ソートは、巨大なテーブルのインデックススキャンよりも普通は高速です
|
||
。
|
||
|
||
しかし、ORDER BYと組み合わされたLIMIT は、テーブルの小さな部分を返すためにたび
|
||
たびインデックスを使うでしょう。
|
||
|
||
もし、オプティマイザが間違ってシーケンシャルスキャンを選択したことに疑いがなけ
|
||
れば、SET enable_seqscan TO 'off'に設定して、クエリをもう一度実行し、インデック
|
||
ススキャンがまちがいなく速くなっているかどうかをみてください。
|
||
|
||
LIKE あるいは ~ のようなワイルドカード演算子は特別な環境でしか使えません:
|
||
|
||
・ 検索文字列が文字列の最初にききます。たとえば:
|
||
□ LIKE パターンが%で始まらない
|
||
□ ~ (正規表現) パターンは^で始まらなければならない
|
||
・ 検索文字列を文字クラスから始めることはできません。たとえば、[a-e]。
|
||
・ ILIKE や ~* のような大文字と小文字を区別しない検索は使えません。そのかわり
|
||
、このFAQの4.8節で説明する式インデックスが使えます。
|
||
・ initdb においては、デフォルトでCロケールが使われなくてはなりません。その理
|
||
由は、Cロケール以外では次に大きな文字を知ることができないからです。このよう
|
||
な場合、
|
||
|
||
LIKE
|
||
|
||
インデクシングにだけ働くような、特別な
|
||
|
||
text_pattern_ops
|
||
|
||
インデックスを作成することもできます。また、それを全文検索のフルテキストの
|
||
インデックス作成に使うことができます。
|
||
|
||
4.7) 問い合わせオプティマイザがどのように問い合わせを評価するのかを見るにはどう
|
||
しますか?
|
||
|
||
オンラインマニュアルで EXPLAIN を見てください。
|
||
|
||
4.8) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現
|
||
しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使い
|
||
ますか?
|
||
|
||
~演算子は正規表現照合を行ない、~* は大文字と小文字を区別しない
|
||
(case-insensitive)正規表現照合を行います。大文字と小文字を区別しない LIKE 演算
|
||
子を ILIKE といいます。
|
||
|
||
大文字と小文字を区別しない等値比較は次のように表現できる:
|
||
|
||
SELECT *
|
||
FROM tab
|
||
WHERE lower(col) = 'abc';
|
||
|
||
標準インデックスでは使われず、しかしながら、もし、式インデックスを作ったならそ
|
||
れが使われるでしょう。
|
||
|
||
CREATE INDEX tabindex ON tab (lower(col));
|
||
|
||
上記のインデックスがUNIQUEで作成された場合、カラムは大文字と小文字を格納できま
|
||
すが、その違いが文字ケースだけであっても同一にはなりません。あえて特定の文字ケ
|
||
ースをカラムに格納するには CHECK制約か、トリガーを使ってください。
|
||
|
||
4.9) クエリの中で、フィールドがNULL であることを検出するにはどうしますか? NULL
|
||
であることを検出するにはどうしますか?フィールドがNULLかどうかでどのようにソー
|
||
トができますか?
|
||
|
||
以下のように、IS NULL と IS NOT NULLで、そのカラムをテストしてみます:
|
||
|
||
SELECT *
|
||
FROM tab
|
||
WHERE col IS NULL;
|
||
|
||
NULLの可能性のあるものを連結するには、COALESCE()を次のように使います。
|
||
|
||
SELECT COALESCE(col1, '') || COALESCE(col2, '')
|
||
FROM tab
|
||
|
||
NULL状態でソートするには、IS NULL と IS NOT NULL の修飾子を ORDER BY 句の中で使
|
||
ってみます。true のものは false のものよりも高い値として並べられますので、次の
|
||
例では NULL の記載が結果リストの上部に置かれます。
|
||
|
||
SELECT *
|
||
FROM tab
|
||
ORDER BY (col IS NOT NULL)
|
||
|
||
4.10) いろいろな文字型のそれぞれの違いは何ですか?
|
||
|
||
型 内部名 備考
|
||
VARCHAR(n) varchar 最大長のサイズを指定する、詰め物無し
|
||
CHAR(n) bpchar 指定された固定長となるように空白が詰められる
|
||
TEXT text 長さに特別な上限は無し
|
||
BYTEA bytea 可変長のバイト配列(null-byte safe)
|
||
"char" char 1文字
|
||
|
||
内部名にお目にかかるのは、システム・カタログを調べるときや、エラーメッセージを
|
||
受け取るときです。
|
||
|
||
上記の型のうち最初の4つの型は "varlena" 型です(すなわち、ディスクの最初の4バ
|
||
イトがデータ長で、それの後に実際のデータが続きます)。このように実際の空間は宣言
|
||
された大きさよりも少し大きくなります。しかし、長い値は圧縮されるので、ディスク
|
||
上の空間は思ったよりも小さくなります。
|
||
|
||
VARCHAR(n) は可変長の文字列を保存するのに最適ですが、保存できる文字列の長さに制
|
||
限があります。TEXT は長さに制限の無い文字列の保存のためのもので、最大で 1ギガバ
|
||
イトです。 CHAR(n)は、VARCHAR(n)が与えられた文字だけを保存するのに対し、ブラン
|
||
クを詰め込んでいつも同じ長さで文字列を保存するのに最適です。BYTEAは、部分的に
|
||
NULL のバイトを含むバイナリデータを保存するためのものです。これらのタイプは同じ
|
||
くらいの性能特性をもちます。
|
||
|
||
4.11.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 以降は自動的には行なわれなくなりました。
|
||
]
|
||
|
||
|
||
自動的につくられる通番は、 <table>_<serialcolumn>_seq と名付けられていて、table
|
||
と serialcolumn は、それぞれテーブルと SERIAL カラムの名前です。通番については
|
||
、オンラインマニュアルでcreate_sequence をごらんください。
|
||
|
||
4.11.2) SERIALデータ型に挿入される値は、どうすれば得られますか?
|
||
|
||
最も簡単な方法は、割り当てられたSERIAL値を RETURNINGとして取得することです。
|
||
4.11.1の例題テーブルを使うと次のようになります。
|
||
|
||
INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
|
||
|
||
4.11.3) currval() は他のユーザとの競合状態に陥ることはないですか?
|
||
|
||
それはありません。currval() は、すべてのユーザではありませんが、読者のセッショ
|
||
ンに与えられた現在の値を返します。
|
||
|
||
4.11.4) トランザクションが中断したときにもういちどシーケンス番号が使われないの
|
||
はなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか?
|
||
|
||
同時性を改善するために、実行中のトランザクションに、必要に応じてトランザクショ
|
||
ンが終了するまでロックされないようシーケンス値を与えています。このためトランザ
|
||
クションが中断されると番号割り当てにギャップを生じます。
|
||
|
||
4.12) OID とは何ですか? CTID とは何ですか?
|
||
|
||
テーブルがWITH OIDSでつくられた場合は、それぞれのロウに一意なOIDが取られます。
|
||
OIDは自動的に4バイトの整数で与えられ、それは、全インストレーションを通して一意
|
||
な値となります。しかし、約40億でオーバーフローし、そして、OIDは重複をしはじめま
|
||
す。PostgreSQLは内部システムテーブルを一緒にリンクするためにOID を使います。
|
||
|
||
ユーザのテーブルのカラムに一意の番号を付けるためには、 OID ではなく SERIAL を使
|
||
うのが最もよいでしょう。SERIALの連番は1つのテーブル内でのみ一意になるからで、オ
|
||
ーバーフローを起こしにくいと考えられます。 8バイトのシーケンス値を保存するため
|
||
に、SERIAL8があります。
|
||
|
||
CTID は、特定の物理ロウをブロックとオフセットの値で識別するために使われます。
|
||
CTIDは、ロウが修正されたり再読込みされたときに変わります。また、物理ロウを差す
|
||
ためにインデックスの記載に使われます。
|
||
|
||
4.13) エラーメッセージ "ERROR: Memory exhausted in AllocSetAlloc()"が出るのはな
|
||
ぜですか?
|
||
|
||
おそらく、システムの仮想メモリーを全て使い果たしてしまっている可能性があるか、
|
||
カーネルがあるリソースについてもつ制限値が低すぎる可能性があります。サーバを始
|
||
動する前にこれを試してみてください:
|
||
|
||
ulimit -d 262144
|
||
limit datasize 256m
|
||
|
||
シェルによって、どちらかひとつが成功するでしょうが、これはプロセスのデータセグ
|
||
メント制限をより高く設定し、たぶんクエリが完結するようになるでしょう。このコマ
|
||
ンドは現行のプロセスと、このコマンドを走らせた後に作られる全てのサブプロセスに
|
||
ついて適用されます。バックエンドがとても多くのデータを返すためにSQL クライアン
|
||
トで問題が続いているのであれば、クライアントを開始する前にこれを試してみてくだ
|
||
さい。
|
||
|
||
4.14) どのバージョンの PostgreSQL を走らせているかを調べるにはどうしますか?
|
||
|
||
psql から SELECT version(); をタイプします。
|
||
|
||
4.15) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか?
|
||
|
||
CURRENT_TIMESTAMPを使います:
|
||
|
||
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
|
||
|
||
4.16) 外部結合(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結合と呼ばれます。
|
||
|
||
4.17) 複数のデータベースを使う問い合わせはどのようにすればできますか?
|
||
|
||
現行のデータベース以外への問い合わせの方法はありません。というのもPostgreSQLが
|
||
データベース仕様のシステムカタログを読み込むためで、そこには、たとえそのふりを
|
||
するだけにしろ、データベースを越えて問い合わせをするすべがありません。
|
||
|
||
contrib/dblink はデータベース間(cross-database)の問い合わせを関数呼出しにより許
|
||
します。もちろん、クライアントは同時に接続を別のデータベースへも張らなくてはな
|
||
らず、結果をクライアント側でマージしなくてはなりません。
|
||
|
||
4.18) 関数から複数のロウまたはカラムを返すにはどうしますか?
|
||
|
||
集合を返す関数(Set Returning Functions): http://wiki.postgresql.org/wiki/
|
||
Return_more_than_one_row_of_data_from_PL/pgSQL_functions を使うと簡単です
|
||
|
||
。
|
||
|
||
4.19) PL/PgSQL の関数の中で一時テーブルにアクセスするとき、どうして "relation
|
||
with OID ##### does not exist" というエラーを受け取るのでしょうか?
|
||
|
||
バージョン8.3より前の PostgreSQL では、PL/PgSQL は関数スクリプトをキャッシュし
|
||
たため、運悪くその副作用がありました。PL/PgSQL 関数が一時テーブルにアクセスして
|
||
後でそのテーブルを消して作りした場合に、関数がもう一度呼び出されたときは、その
|
||
関数のキャッシュしていた内容がまだ古い一時テーブルを指し示したままだったからで
|
||
す。この、解決策として、PL/PgSQLの中で EXECUTE を一時テーブルへのアクセスのため
|
||
に使います。そうすると、クエリは毎回パースをやり直しされるようになります。
|
||
|
||
この問題は、 PostgreSQL バージョン8.3 以降では起きません。
|
||
|
||
4.20) どのようなレプリケーションのソリューションがありますか?
|
||
|
||
「レプリケーション」と一言でいいますが、レプリケーションをするための技術はいく
|
||
つかあり、それぞれ、利点と欠点があります。
|
||
|
||
マスタ/スレーブのレプリケーションは、読み/書きのクエリを受け取るシングルマス
|
||
タが可能で、スレーブでは読み/SELECTの問い合わせだけを受け付けることができます
|
||
。最も人気がある、フリーで利用できる、マスタ-スレーブのPostgreSQLレプリケーシ
|
||
ョンソリューションは、 Slony-I です。
|
||
|
||
マルチ-マスタのレプリケーションは、読み/書きのクエリを受けとり、複数のレプリ
|
||
ケートさせるコンピュータに送ることができます。この機能は、サーバ間の変更の同期
|
||
が必要なため、性能に重大な衝撃を与えます。 PGCluster は、このようなソリューショ
|
||
ンとしてPostgreSQLのためにフリーで利用できるものとして、最も人気があります。
|
||
|
||
この他にも、商用やハードウェア-ベースのレプリケーションソリューションがいろい
|
||
ろなレプリケーションモデルをサポートしています。
|
||
|
||
4.21)テーブルとカラムの名前がクエリーの中で認識されないのはなぜですか?なぜ大文
|
||
字化(キャピタライズ)は温存されないのですか?
|
||
|
||
名前が認識されない、最も一般的な原因は、テーブルを作成する際に、テーブルやカラ
|
||
ムを囲う二重引用符の使用です。二重引用符を使うと、テーブルとカラムの名前(識別
|
||
子といいます)は大文字と小文字の区別をして格納されます。したがって、pgAdminのよ
|
||
うにテーブル作成のときに自動的に二重引用符を使うものはクエリの中でそれらの名前
|
||
を使うときに二重引用符を付けなくてはならないことを意味します。このため、識別子
|
||
を認識させるためには以下のいずれかを心がけます。
|
||
|
||
・ テーブルを作成するときに二重引用符で識別子を囲うことを避ける
|
||
・ 識別子には小文字だけを使う
|
||
・ クエリの中で参照するときは二重引用符で識別子を囲う
|
||
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
日本語に関する質問
|
||
|
||
5.1)日本語がうまく扱えないのはなぜですか?
|
||
|
||
createdb -Eコマンドオプションに UTF8 あるいは EUC_JP のエンコーディングを指定し
|
||
てデータベースを作成するか、次のようにエンコーディングを指定してデータベースを
|
||
作成してください。
|
||
|
||
CREATE DATABASE dbname WITH ENCODING 'UTF8';
|
||
もしくは、
|
||
CREATE DATABASE dbname WITH ENCODING 'EUC_JP';
|
||
|
||
5.2) psql でWindowsからアクセスしたときに、日本語が文字化けするのですが?
|
||
|
||
psqlの中でクライアントのエンコーディングを指定してください。
|
||
|
||
SET client_encoding TO 'SJIS'
|
||
|
||
PostgreSQLデータベースのエンコーディングに使える日本語文字コードは EUC_JP か
|
||
UTF-8(UNICODE) であるため、Shift-JIS表示のコマンドプロンプトからは、
|
||
client_encodingを設定しておかないと、日本語を表示する際に文字化けがおきます。
|
||
|
||
5.3) PostgreSQLで日本語の全文検索はできますか?
|
||
|
||
バージョン8.3では、TSearch2全文検索機能が本体に組み込まれましたが、そのままでは
|
||
日本語のインデックスを作る事が難しい状況です。これを解決するために、Takahiro
|
||
Itagaki氏によって、Mecabという形態素解析プログラムを利用する日本語全文検索モジ
|
||
ュール textsearch_ja が開発されました。TSearch2対応の製品をわずかに改修すること
|
||
で日本語対応にきます。
|
||
|
||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||
|
||
「日本語版について」
|
||
|
||
[訳注:
|
||
日本語版の製作については以下の通りです。
|
||
|
||
最終更新日: 2008年10月8日
|
||
翻訳者: 桑村 潤 (Jun KUWAMURA <juk at postgresql.jp>)
|
||
|
||
このFAQの和訳の作成にあたり協力をしてくださった方々(敬称は略させていただきます):
|
||
|
||
田仲 稔(Minoru TANAKA <Tanaka.Minoru at keiken.co.jp>)
|
||
石井 達夫(Tatsuo ISHII <ishii at sraoss.co.jp>)
|
||
齊藤 知人(Tomohito SAITOH <tomos at elelab.nsc.co.jp>)
|
||
馬場 肇(Hajime BABA <baba at kusastro.kyoto-u.ac.jp>)
|
||
岡本 一幸(Kazuyuki OKAMOTO <kaz-okamoto at hitachi-system.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>)
|
||
生越 昌己(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 sraoss.co.jp>)
|
||
芳賀 靖史(Yasufumi Haga <yasufumi.haga at nifty.com>)
|
||
|
||
をはじめ、ポストグレスに関する話題豊富な日本語PostgreSQLメーリングリスト、
|
||
和訳のきっかけを作ってくれたり、いつもチェックをしてくれる
|
||
JF(Linux Japanese FAQ)プロジェクト、FreeBSD ドキュメンテーションプロジェクト
|
||
の方々、それから、直接あるいは間接的にかかわってくださるすべてのオープンソース
|
||
コミュニティのみなさまに感謝いたします。
|
||
|
||
|
||
この翻訳文書は 本家 "Frequently Asked Questions" のページに "Japanese FAQ"
|
||
という項目であります。
|
||
|
||
また、最新版は以下のサイトにあります。
|
||
http://www.postgresql.jp/wg/jpugdoc/ 「JPUG文書・書籍関連分科会」
|
||
http://www.linux.or.jp/JF/JFdocs/INDEX-database.html 「Linux JFプロジェクト」 http://www.linet.gr.jp/~juk/pgsql/ 「PostgreSQL Notes for Japanese」(翻訳者ページ)
|
||
|
||
なお、この和訳に関するご意見・ご質問は(juk at postgresql.jp)までお寄せください。
|
||
(※ メールアドレスの " at " は適切に直してください。半角の "@" です。)
|
||
]
|
||
|