Update Japanese FAQ.

Jun Kuwamura
This commit is contained in:
Bruce Momjian 2004-05-01 01:27:03 +00:00
parent e572246565
commit 1a273556a3
2 changed files with 158 additions and 127 deletions

View File

@ -1,6 +1,6 @@
PostgreSQL(ポストグレス・キュー・エル)についてよくある質問とその解答(FAQ) PostgreSQL(ポストグレス・キュー・エル)についてよくある質問とその解答(FAQ)
原文最終更新日: Tue Sep 9 18:42:51 EDT 2003 原文最終更新日: Mon Mar 29 00:07:11 EST 2004
現在の維持管理者: Bruce Momjian (pgman@candle.pha.pa.us) 現在の維持管理者: Bruce Momjian (pgman@candle.pha.pa.us)
Maintainer of Japanese Translation: Jun Kuwamura (juk at PostgreSQL.jp) Maintainer of Japanese Translation: Jun Kuwamura (juk at PostgreSQL.jp)
@ -44,7 +44,7 @@ Maintainer of Japanese Translation: Jun Kuwamura (juk at PostgreSQL.jp)
1.11) PostgreSQLは西暦2000年問題(Y2K)に対応していますか? 1.11) PostgreSQLは西暦2000年問題(Y2K)に対応していますか?
1.12) 開発チームにはどのように参加しますか? 1.12) 開発チームにはどのように参加しますか?
1.13) バグレポートはどのように発信しますか? 1.13) バグレポートはどのように発信しますか?
1.14) 他のDBMSと比べてPostgreSQLはどうなのですか 1.14) 他のDBMSと比べてPostgreSQLはどうなのですか
1.15) PostgreSQLを資金面で援助するにはどうすればよいですか 1.15) PostgreSQLを資金面で援助するにはどうすればよいですか
ユーザー・クライアントの質問 ユーザー・クライアントの質問
@ -75,7 +75,7 @@ Maintainer of Japanese Translation: Jun Kuwamura (juk at PostgreSQL.jp)
操作上の質問 操作上の質問
4.1) バイナリ・カーソルと通常カーソルとの違いは何ですか? 4.1) バイナリ・カーソルと通常カーソルとの違いは何ですか?
4.2) 最初の数ロウのみを select するにはどうしますか?ランダムな 4.2) 最初の数ロウのみを select するにはどうしますか?ランダムなロウ
4.3) テーブルやその他の情報のリストを psql で見るにはどうしますか? 4.3) テーブルやその他の情報のリストを psql で見るにはどうしますか?
4.4) テーブルからカラムの削除、あるいは、データ型を変更するにはどうしますか? 4.4) テーブルからカラムの削除、あるいは、データ型を変更するにはどうしますか?
4.5) ロウ、テーブル、データベースの最大サイズは? 4.5) ロウ、テーブル、データベースの最大サイズは?
@ -134,18 +134,22 @@ Maintainer of Japanese Translation: Jun Kuwamura (juk at PostgreSQL.jp)
1.1) PostgreSQL とは何ですか?何と読みますか? 1.1) PostgreSQL とは何ですか?何と読みますか?
Post-Gres-Q-L.(ポスト - グレス - キュー - エル) と発音します。 Post-Gres-Q-L.(ポスト - グレス - キュー - エル) と発音します。この発音を聞きた
い人のために、オーディオファイルを http://www.postgresql.org/postgresql.mp3 に
用意してあります。
PostgreSQL は次世代 DBMS 研究用のプロトタイプであった POSTGRES データベース管理 PostgreSQL は次世代 DBMS 研究用のプロトタイプであった POSTGRES データベース管理
システムの改良版です。PostgreSQL は POSTGRES の強力なデータ・モデルと豊富なデー システムの改良版です(このため、今でもときどき "Postgres" と呼ばれることがあり
タ・タイプ(型)を保持しながら、POSTGRES で使われた PostQuel 問い合わせ言語を、拡 ます。PostgreSQL は POSTGRES の強力なデータ・モデルと豊富なデータ・タイプ(型)
張した SQL のサブセットに置き換えています。PostgreSQL は無料で完全なソースを利 を保持しながら、POSTGRES で使われた PostQuel 問い合わせ言語を、拡張した SQL の
用できます。 サブセットに置き換えています。PostgreSQL は無料で完全なソースを利用できます。
PostgreSQL の開発は、PostgreSQL 開発メーリングリストに参加している開発者達のチ PostgreSQL の開発は、PostgreSQL 開発メーリングリストに参加している開発者達のチ
ームですべて行なわれています。現在の座長は Marc G. Fournier ( ームですべて行なわれています。現在の座長は Marc G. Fournier (
scrappy@PostgreSQL.org )です。(下記の1.6節に参加の仕方があります。)現在、このチ scrappy@PostgreSQL.org )です。(下記の1.6節に参加の仕方があります。)現在、このチ
ームが PostgreSQL 開発のすべての面倒をみています。 ームが PostgreSQL 開発のすべての面倒をみています。このチームはコミュニティプロ
ジェクトであり、いかなる企業によっても制御を受けません。参加したければ、http://
www.PostgreSQL.org/docs/faqs/FAQ_DEV.html にある開発者向けのFAQを見てください。
Postgres95-1.01 の中心的な開発者は Andrew Yu と Jolly Chen でしたが、その他大勢 Postgres95-1.01 の中心的な開発者は Andrew Yu と Jolly Chen でしたが、その他大勢
の人々がこのコードの移植、テスト、デバグ、および、改良に参加しました。 の人々がこのコードの移植、テスト、デバグ、および、改良に参加しました。
@ -167,7 +171,7 @@ PostgreSQL
PostgreSQL Data Base Management System PostgreSQL Data Base Management System
Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group Portions Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group Portions
Copyright (c) 1994-6 Regents of the University of California Copyright (c) 1994-6 Regents of the University of California
Permission to use, copy, modify, and distribute this software and its Permission to use, copy, modify, and distribute this software and its
@ -189,14 +193,14 @@ SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
POSTGRESQL データベース管理システム POSTGRESQL データベース管理システム
部分的著作権 (c) 1996-2002, PostgreSQL国際開発チーム 部分的著作権 (c) 1996-2004, PostgreSQL国際開発チーム
部分的著作権 (c) 1994-6 カリフォルニア大学本校 部分的著作権 (c) 1994-6 カリフォルニア大学本校
本ソフトウェアおよびその文書一式は上記の著作権表示と、この文章 本ソフトウェアおよびその文書一式は上記の著作権表示と、この文章
およびこれに続く二つの段落が全ての複製に添付されている限りにおい およびこれに続く二つの段落が全ての複製に添付されている限りにおい
て、使用、複製、修正および配付の許可を、いかなる目的であっも、 て、使用、複製、修正および配付の許可を、いかなる目的であっも、
償でかつ同意書無しに行なえることをここに認めます。 償でかつ同意書無しに行なえることをここに認めます。
カリフォルニア大学は、いかなる当事者にたいしても、利益の壊失を カリフォルニア大学は、いかなる当事者にたいしても、利益の壊失を
含む、直接的、間接的、特別、偶然あるいは必然的にかかわらず生じた 含む、直接的、間接的、特別、偶然あるいは必然的にかかわらず生じた
@ -220,18 +224,18 @@ SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
1.3) PostgreSQL の動作環境は? 1.3) PostgreSQL の動作環境は?
一般的に、最近のUnix互換プラットホームならばPostgreSQLをはしらせられるはずです 一般的に、最近のUnix互換プラットホームであればPostgreSQLを稼働させられるはずで
。リリースの時点で実際にテストを行なったことの報告がなされたプラットホームに 。リリースの時点で実際にテストを行なったことの報告がなされたプラットホームに
いてはインストール手引書に列挙してあります。 いてはインストール手引書に列挙してあります。
1.4) Unix以外の移植版で使えるものは 1.4) Unix以外の移植版で使えるものは
クライアント クライアント
MS Windows プラットホーム上で走せるために、libpq C ライブラリ、psql、その他の MS Windows プラットホーム上で走せるために、libpq C ライブラリ、psql、その他の
ンターフェイス、および、クライアントアプリケーションをコンパイルすることは可 ンターフェイス、および、クライアントアプリケーションをコンパイルすることは可
です。この場合、クライアントを MS Windows 上で走らせて、TCP/IP 経由でサポート です。この場合、クライアントを MS Windows 上で走らせて、TCP/IP 経由でサポート
れている Unix プラットホーム上で走るサーバと通信します。 れている Unix プラットホーム上で走るサーバと通信します。
Win32 libpq ライブラリと psql を作るために、win32.mak が配布に含まれてます。 Win32 libpq ライブラリと psql を作るために、win32.mak が配布に含まれてます。
PostgreSQLは ODBC クライアントとも通信できます。 PostgreSQLは ODBC クライアントとも通信できます。
@ -306,8 +310,12 @@ pgsql-general-request@PostgreSQL.org
ダイジェスト版は、メインリストで受信するメッセージが 30k 程度溜る毎にダイジェス ダイジェスト版は、メインリストで受信するメッセージが 30k 程度溜る毎にダイジェス
ト版リストのメンバーに送付されます。 ト版リストのメンバーに送付されます。
バグレポート用のメーリングリストもあります。このリストへの参加は "本文"といっし バグレポート用のメーリングリストもあります。このリストへの参加は "本文" に:
ょに: bugs-request@PostgreSQL.org へ電子メールを送って下さい。
subscribe
end
と書いてbugs-request@PostgreSQL.org へ電子メールを送って下さい。
開発者の議論のためのメーリングリストも利用できます。このリストへの参加は電子メ 開発者の議論のためのメーリングリストも利用できます。このリストへの参加は電子メ
ールの本文に: ールの本文に:
@ -319,8 +327,9 @@ pgsql-general-request@PostgreSQL.org
http://www.PostgreSQL.org http://www.PostgreSQL.org
EFNet と OpenProjects に #PostgreSQL という IRC チャンネルもあります。 UNIX コ EFNetに #PostgreSQL という IRC チャンネルもあります。 UNIX コマンドで irc -c '#
マンドでirc -c '#PostgreSQL' "$USER" irc.phoenix.net を使っています。 PostgreSQL' "$USER" irc.phoenix.net. あるいは、 irc -c '#PostgreSQL' "$USER"
irc.freenode.net. を使って参加できます。
[訳注: [訳注:
1999年7月23日、日本PostgreSQLユーザー会(にほん ぽすとぐれす ゆーざー かい)、略称JPUG 1999年7月23日、日本PostgreSQLユーザー会(にほん ぽすとぐれす ゆーざー かい)、略称JPUG
@ -348,7 +357,7 @@ EFNet
1.7) 最新版はどれですか 1.7) 最新版はどれですか
PostgreSQL の最新版はバージョン 7.3.4 です。 PostgreSQL の最新版はバージョン 7.4.2 です。
我々は、68カ月毎にメジャーリリースを行なうことを計画しています。 我々は、68カ月毎にメジャーリリースを行なうことを計画しています。
@ -454,7 +463,7 @@ http://www.PostgreSQL.org/bugs/bugs.phpPostgreSQL BugTool (
それと同時に ftp サイト ftp://ftp.PostgreSQL.org/pub/で、もっと新しいバージョン それと同時に ftp サイト ftp://ftp.PostgreSQL.org/pub/で、もっと新しいバージョン
の PostgreSQL あるいはパッチをさがしてみて下さい。 の PostgreSQL あるいはパッチをさがしてみて下さい。
1.14) 他のDBMSと比べてPostgreSQLはどうなのですか 1.14) 他のDBMSと比べてPostgreSQLはどうなのですか
ソフトウェアを計る方法にはいくつかあります。機能と性能と信頼性とサポートと価格 ソフトウェアを計る方法にはいくつかあります。機能と性能と信頼性とサポートと価格
です。 です。
@ -468,13 +477,16 @@ http://www.PostgreSQL.org/bugs/bugs.phpPostgreSQL BugTool (
性能(Performance) 性能(Performance)
PostgreSQLは他の商用あるいはオープンソースのデータベースと互角の性能も持ち PostgreSQLは他の商用あるいはオープンソースのデータベースと互角の性能も持ち
ます。ある面ではより早かったり、ほかの面ではより遅かったりします。MySQLなど ます。ある面ではより早かったり、ほかの面ではより遅かったりします。MySQLなど
の特化型データベース・システムにくらべて、PostgreSQLの挿入更新が遅いのは の特化型データベース・システムにくらべて、PostgreSQL は複数ユーザや複雑な問
、トランザクションによるオーバーヘッドがあるからです。もちろん、MySQLには上 い合わせ、また、 read/write 問い合わせのロードがより高速です。MySQLは少ない
記のFeaturesの節に示すような機能はまったくありません。我々は、PostgreSQLに ユーザでの単純な SELECT 問い合わせでは高速です。もちろん、MySQLには上記の
柔軟性と機能性を組み込みながらも、絶えず、プロファイラーに掛けたりソースコ Featuresの節に示すような機能はまったくありません。我々は、PostgreSQLに柔軟
ードを解析したりして、性能の改善を続けています。PostgreSQL と MySQL とを比 性と機能性を組み込みながらも、絶えず、プロファイラーに掛けたりソースコード
較している面白い Web ページがhttp://openacs.org/philosophy/ を解析したりして、性能の改善を続けています。PostgreSQL と MySQL とを比較し
why-not-mysql.htmlにあります。 ている面白い Web ページがhttp://openacs.org/philosophy/why-not-mysql.htmlに
あります。また、MySQLは、製品をオープンソースを通じて配布して、クローズソー
スソフトウェアとしての商用ライセンスを要求する企業でもあり、PostgreSQLのよ
うなオープンソース開発コミュニティではありません。
PostgreSQLは、Unixプロセスを起動することによりユーザー接続を操作します。複 PostgreSQLは、Unixプロセスを起動することによりユーザー接続を操作します。複
数のバックエンド・プロセスが情報をロックしながらデータ・バッファーを共有し 数のバックエンド・プロセスが情報をロックしながらデータ・バッファーを共有し
ます。マルチCPUでは、簡単に複数のバックエンドをそれぞれのCPUで走らせること ます。マルチCPUでは、簡単に複数のバックエンドをそれぞれのCPUで走らせること
@ -491,9 +503,9 @@ http://www.PostgreSQL.org/bugs/bugs.phpPostgreSQL BugTool (
てくれる、開発者やユーザの大きな集まりへの接点を提供しています。我々は問題 てくれる、開発者やユーザの大きな集まりへの接点を提供しています。我々は問題
の解決を保証することはできませんが、商用データベースであっても常に解決され の解決を保証することはできませんが、商用データベースであっても常に解決され
るわけではありません。開発者や、ユーザ・コミュニティ、マニュアル類、それに るわけではありません。開発者や、ユーザ・コミュニティ、マニュアル類、それに
、ソースコードなどへ直接アクセスできることよって、PostgreSQLのサポートは 、ソースコードなどへ直接アクセスできることよって、PostgreSQLのサポートは
他のDBMSサポートよりも優れたものとなっています。御要望に答えて、事柄毎の 他のDBMSサポートよりも優れたものとなっています。御要望に答えて、事柄毎の
用サポートなどもありますFAQ1.6節をご覧下さい)。 用サポートなどもありますFAQ1.6節をご覧下さい)。
価格(Price) 価格(Price)
PostgreSQLの利用は、商用でも非商用でも、すべて無料です。上記に示してあるBSD PostgreSQLの利用は、商用でも非商用でも、すべて無料です。上記に示してあるBSD
スタイルの使用許諾に外れない限り、PostgreSQLのコードを制限無しで商品に組み スタイルの使用許諾に外れない限り、PostgreSQLのコードを制限無しで商品に組み
@ -579,11 +591,11 @@ www.php.net/
2.3) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか? 2.3) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか?
もちろん、PostgreSQL へのグラフィカルインターフェイスがいくつかあります。その中 もちろん、PostgreSQL へのグラフィカルインターフェイスがいくつかあります。その中
にPgAccess http://www.pgaccess.com も含まれます。 PgAdmin II (http:// にPgAccess http://www.pgaccess.com も含まれます。 PgAdmin III (http://
www.pgadmin.org Win32-only)もあります。 RHDB Admin (http://sources.redhat.com/ www.pgadmin.org)もあります。 RHDB Admin (http://sources.redhat.com/rhdb/ )と
rhdb/ )と Rekall ( http://www.thekompany.com/products/rekall/, proprietary)もあ Rekall ( http://www.thekompany.com/products/rekall/, proprietary)もあります。
ります。 PHPPgAdmin ( http://phppgadmin.sourceforge.net/ ) はPostgreSQLへのWeb PhpPgAdmin ( http://phppgadmin.sourceforge.net/ ) はPostgreSQLへのWebベースのイ
ベースのインターフェイスを提供します。 ンターフェイスを提供します。
PgAccess と呼ばれる素晴らしいグラフィカル・ユーザ・インターフェイスがあり、この PgAccess と呼ばれる素晴らしいグラフィカル・ユーザ・インターフェイスがあり、この
配布と共に出荷されます。PgAccess にはレポート・ジェネレータもあります。Web ペー 配布と共に出荷されます。PgAccess にはレポート・ジェネレータもあります。Web ペー
@ -660,9 +672,9 @@ Postgres
3.5) 他のホストからの接続はどのように制御しますか? 3.5) 他のホストからの接続はどのように制御しますか?
既定値では、PostgreSQL は unix ドメインソケットを使うローカルマシンからの接続し 既定値では、PostgreSQL は unix ドメインソケットを使うローカルマシンからの接続し
か許しません。postmaster 起動に -i フラッグを加え、$PGDATA/pg_hba.conf ファイル か許しません。postgresql.conf の中の tcpip_sockets を有効にし、$PGDATA/
を適切に直して、ホスト主導型の認証を使わないかぎりは他のマシンからは接続できな pg_hba.conf ファイルを適切に直して、ホスト主導型の認証を使わないかぎりは他のマ
いでしょう。これによりTCP/IPの接続が可能になります。 シンからは接続できないでしょう。これによりTCP/IPの接続が可能になります。
操作不能なセマフォも過度のデータベースアクセス中にクラッシュを引き起こすことが 操作不能なセマフォも過度のデータベースアクセス中にクラッシュを引き起こすことが
あります。 あります。
@ -670,9 +682,9 @@ Postgres
3.6) より良い性能を得るためには、データベース・エンジンをどのように調整すれば良 3.6) より良い性能を得るためには、データベース・エンジンをどのように調整すれば良
いですか? いですか?
確かにインデックスは問い合わせの速度を増します。EXPLAINコマンドで PostgreSQL が 確かにインデックスは問い合わせの速度を増します。EXPLAIN ANALYZEコマンドで
どのようにあなたの問い合わせを翻訳しているかを見ることができ、そして、どのイン PostgreSQL がどのようにあなたの問い合わせを翻訳しているかを見ることができ、そし
デックスが使われているかを見ることができます。 て、どのインデックスが使われているかを見ることができます。
もし INSERT を多用している場合は、COPY コマンドを使って大きなバッチ処理でそれを もし INSERT を多用している場合は、COPY コマンドを使って大きなバッチ処理でそれを
行なうことを検討して下さい。これは、INSERT を別々に行なうよりもっと高速です。次 行なうことを検討して下さい。これは、INSERT を別々に行なうよりもっと高速です。次
@ -688,9 +700,9 @@ Postgres
postmaster -B オプションを使ってバックエンド・プロセスにより使われる共有メモリ postmaster -B オプションを使ってバックエンド・プロセスにより使われる共有メモリ
ー・バッファを大きくすることもできます。もし、このパラメータを高くしすぎると、 ー・バッファを大きくすることもできます。もし、このパラメータを高くしすぎると、
カーネルの共有メモリー空間の制限値を越えてしまうために postmaster が走らなく カーネルの共有メモリー空間の制限値を越えてしまうために postmaster が走らなく
るでしょう。既定値では、それぞれのバッファの大きさは 8K で、バッファ数は 64 るでしょう。既定値では、それぞれのバッファの大きさは 8K で、バッファ数は 64
す。 す。
バックエンドを -S オプションを使って、それぞれのバックエンド・プロセスが一時的 バックエンドを -S オプションを使って、それぞれのバックエンド・プロセスが一時的
な並べ替えによって使うメモリーの最大サイズを増やすこともできます。その -S の値 な並べ替えによって使うメモリーの最大サイズを増やすこともできます。その -S の値
@ -722,13 +734,13 @@ Postmaster
プションは、デバグ・レベルを指定します。高いデバグ・レベルでは、大きなログファ プションは、デバグ・レベルを指定します。高いデバグ・レベルでは、大きなログファ
イルを生成することに注意しなくてはなりません。 イルを生成することに注意しなくてはなりません。
もし、postmasterが走っていなければ、postgresバックエンドをコマンド行から走らせ もし、postmasterが走っていなければ、postgresバックエンドをコマンドラインから走
ることができ、直接SQL文をタイプすることができます。このやりかたは、デバグ目的の らせることができ、直接SQL文をタイプすることができます。このやりかたは、デバグ目
ときだけお奨めします。セミコロンではなく、改行が問い合わせの終りになることに注 的のときだけお奨めします。セミコロンではなく、改行が問い合わせの終りになること
意してください。もし、デバグシンボルを入れてコンパイルしていれば、デバッガを使 に注意してください。もし、デバグシンボルを入れてコンパイルしていれば、デバッガ
って何が起きているかを見ることができます。postmaster からバックエンドを開始した を使って何が起きているかを見ることができます。postmaster からバックエンドを開始
わけではないので、独立な環境で走っているのではなくロック/バックエンドとの対話 したわけではないので、独立な環境で走っているのではなくロック/バックエンドとの
の問題が重複することはありません。 対話の問題が重複することはありません。
もし、postmasterが走っていれば、あるウィンドウで psqlを開始すると、psql で使わ もし、postmasterが走っていれば、あるウィンドウで psqlを開始すると、psql で使わ
れる postgres プロセスのPIDが見つかります。デバッガを使って postgresのPIDにアタ れる postgres プロセスのPIDが見つかります。デバッガを使って postgresのPIDにアタ
@ -755,7 +767,7 @@ postmaster
既定の最大プロセスは32プロセスです。-Nに適切な値を引数にしてpostmasterを再起動 既定の最大プロセスは32プロセスです。-Nに適切な値を引数にしてpostmasterを再起動
するか、PostgreSQL.conf を修正することによって、その値を増やすことができます。 するか、PostgreSQL.conf を修正することによって、その値を増やすことができます。
既定の構成では-Nは最大1024まで設定できます。もし、もっと必要であればinclude/ 既定の構成では-Nは最大1024まで設定できます。もし、もっと必要であればinclude/
config.hの中のMAXBACKENDSを増加させ、再構築します。もし、望むならconfigureの config.hの中のMAXBACKENDSを増加させ、再構築します。もし、望むならconfigureの
--with-maxbackends切替を使って、-Nの既定値を構成時に設定できます。 --with-maxbackends切替を使って、-Nの既定値を構成時に設定できます。
@ -813,7 +825,7 @@ PostgreSQL
詳述は、オンラインマニュアルで DECLARE を見て下さい。 詳述は、オンラインマニュアルで DECLARE を見て下さい。
4.2) 最初の数ロウのみを SELECTするにはどうしますかランダムな 4.2) 最初の数ロウのみを SELECTするにはどうしますかランダムなロウ
オンラインマニュアルでFETCHを見てください。あるいは、SELECT ... LIMIT....を使っ オンラインマニュアルでFETCHを見てください。あるいは、SELECT ... LIMIT....を使っ
てみて下さい。 てみて下さい。
@ -824,7 +836,7 @@ PostgreSQL
ウだけで評価できるかもしれませんが、でなれば、PostgreSQL は意図したロウが生成さ ウだけで評価できるかもしれませんが、でなれば、PostgreSQL は意図したロウが生成さ
れるまですべてのロウを評価しなければならないかもしれません。 れるまですべてのロウを評価しなければならないかもしれません。
ランダムなをSELECTするには、次の文を使います ランダムなロウをSELECTするには、次の文を使います
SELECT col SELECT col
FROM tab FROM tab
@ -833,10 +845,14 @@ PostgreSQL
4.3) テーブルやその他の情報のリストを psql で見るにはどうしますか? 4.3) テーブルやその他の情報のリストを psql で見るにはどうしますか?
psqlのソースコードとして書かれた pgsql/src/bin/psql/describe.c ファイルを読むこ psqlの中で、 \dt コマンドを使ってテーブルを見ます。psql の中のコマンドの完全な
とがその答えです。そこには、psqlのバックスラッシュコマンドによる出力のためのSQL リストには \? を使えます。あるいは、psqlのソースコードのpgsql/src/bin/psql/
コマンドが含まれています。 psql に -E オプションをつけて起動すれば、与えたコマ describe.cファイルを見るることもできて、その中にはpsqlのバックスラッシュコマン
ンドを実行するための問い合わせが出力されます。 ドの出力を生成するSQLコマンドが含まれています。また、psqlを -E オプションと一緒
に開始すると、実行させたコマンドを実行するために使う問い合わせを出力するように
なります。PostgreSQLはまた、SQLi対応の INFORMATION SCHEMA インターフェースを用
意していて、データベースについての情報を得るために問い合わせを使うことができま
す。
4.4) テーブルからカラムの削除、あるいは、データ型を変更するにはどうしますか? 4.4) テーブルからカラムの削除、あるいは、データ型を変更するにはどうしますか?
@ -867,7 +883,7 @@ VACUUM FULL tab
制限は以下のとおりです。 制限は以下のとおりです。
データベースの最大サイズ? 制限無し (4 TB のデータベースも存在します) データベースの最大サイズ? 制限無し (32 TB のデータベースも存在します)
テーブルの最大サイズ? 32TB テーブルの最大サイズ? 32TB
ロウの最大サイズ? 1.6TB ロウの最大サイズ? 1.6TB
フィールドの最大サイズ? 1GB フィールドの最大サイズ? 1GB
@ -918,7 +934,7 @@ VACUUM FULL tab
インデックスは、これほどのオーバヘッドは要求しませんが、インデックス付けされる インデックスは、これほどのオーバヘッドは要求しませんが、インデックス付けされる
データを含む以上、それなりに大きくなります。 データを含む以上、それなりに大きくなります。
NULLはビットマップ保存されていて、それらがわずかにスペースを使います。 NULLはビットマップとして保存されていて、それらがわずかにスペースを使います。
4.7) 定義されたテーブル、インデックス、データベース、および、ユーザをどのように 4.7) 定義されたテーブル、インデックス、データベース、および、ユーザをどのように
して見つけ出しますか? して見つけ出しますか?
@ -1031,7 +1047,7 @@ GEQO
(case-insensitive)正規表現照合を行います。大文字と小文字を区別しない LIKE 演算 (case-insensitive)正規表現照合を行います。大文字と小文字を区別しない LIKE 演算
子を ILIKE といいます。 子を ILIKE といいます。
大文字と小文字を区別しない等値比較次のように表現できる: 大文字と小文字を区別しない等値比較次のように表現できる:
SELECT * SELECT *
FROM tab FROM tab
@ -1074,12 +1090,12 @@ VARCHAR(n)
トです。 CHAR(n)は、VARCHAR(n)が与えられた文字だけを保存するのに対し、ブランク トです。 CHAR(n)は、VARCHAR(n)が与えられた文字だけを保存するのに対し、ブランク
を詰め込んでいつも同じ長さで文字列を保存するのに最適です。BYTEAは、部分的にNULL を詰め込んでいつも同じ長さで文字列を保存するのに最適です。BYTEAは、部分的にNULL
のバイトを含むバイナリデータを保存するためのものです。これらのタイプは同じくら のバイトを含むバイナリデータを保存するためのものです。これらのタイプは同じくら
いの性能特性をもちます。 いの性能特性をもちます。
4.15.1) 通番(serial)/自動増分フィールドはどのようにつくりますか? 4.15.1) 通番(serial)/自動増分フィールドはどのようにつくりますか?
PostgreSQL は SERIAL データ型をサポートします。カラム上に通番とインデックスを自 PostgreSQL は SERIAL データ型をサポートします。カラム上にシーケンスを自動作成し
動作成します。たとえば、 ます。たとえば、
CREATE TABLE person ( CREATE TABLE person (
id SERIAL, id SERIAL,
@ -1093,7 +1109,6 @@ PostgreSQL
id INT4 NOT NULL DEFAULT nextval('person_id_seq'), id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
name TEXT name TEXT
); );
CREATE UNIQUE INDEX person_id_key ON person ( id );
[訳注: [訳注:
CREATE UNIQUE INDEX person_id_key ON person ( id ); CREATE UNIQUE INDEX person_id_key ON person ( id );
@ -1104,7 +1119,7 @@ PostgreSQL
下さい。 下さい。
また、各ロウのOIDフィールドを一意値として使うこともできます。しかしながら、もし また、各ロウのOIDフィールドを一意値として使うこともできます。しかしながら、もし
もデータベースをダンプしてロードする必要がある場合は、OIDを温存するために もデータベースをダンプしてロードする必要がある場合は、OIDを温存するために
pg_dump で -oオプションを使うか、または、COPY WITH OIDSオプションを使う必要があ pg_dump で -oオプションを使うか、または、COPY WITH OIDSオプションを使う必要があ
ります。 Bruce Momjian の(http://www.PostgreSQL.org/docs/aw_pgsql_book)の ります。 Bruce Momjian の(http://www.PostgreSQL.org/docs/aw_pgsql_book)の
Numbering Rowsの章にありあます。 Numbering Rowsの章にありあます。
@ -1242,10 +1257,10 @@ CURRENT_TIMESTAMP
4.22) なぜ、INを使う副問い合わせがとても遅いのですか 4.22) なぜ、INを使う副問い合わせがとても遅いのですか
現在、外部問い合わせの各ロウについて副問い合わせの結果を順番にスキャンすること 7.4 より前のバージョンでは、副問い合わせは、副問い合わせの結果を外部問い合わせ
により、副問い合わせを外部問い合わせに結合しています。もし、副問い合わせが数行 の各ロウについて順次走査することによって、外部の問い合わせに結合させられる。副
しか返さず、外部問い合わせが沢山の行を返すなら、当面はINをEXISTSで置き換えるこ 問い合わせがわずかなロウしか返さず、外部問い合わせが沢山のロウを返す場合は、IN
とです: が最も早いです。他の問い合わせを高速化するには、INをEXISTSに置換します:
SELECT * SELECT *
FROM tab FROM tab
@ -1257,8 +1272,10 @@ CURRENT_TIMESTAMP
FROM tab FROM tab
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col) WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col)
とします。これが手っ取り早いですが、subcolは索引付きカラムであるべきです。ここ とします。これが手っ取り早いですが、subcolは索引付きカラムであるべきです。
で示した問題は7.4で修正されます。
バージョン7.4以降では、INは、通常の問い合わせと同様の洗練されたジョインの技術を
実際に使い、EXISTSを使うことを好みます。
4.23) 外部結合(outer join)はどのように実現しますか? 4.23) 外部結合(outer join)はどのように実現しますか?
@ -1312,8 +1329,8 @@ PL/PgSQL
が一時テーブルにアクセスすると、そのテーブルはあとでドロップされ再作成されます が一時テーブルにアクセスすると、そのテーブルはあとでドロップされ再作成されます
が、関数が再び呼び出されると、キャッシュされているその関数の内容はまだ古い一時 が、関数が再び呼び出されると、キャッシュされているその関数の内容はまだ古い一時
テーブルを依然として指しているからです。解決策は、 PL/PgSQL の中で EXECUTE を一 テーブルを依然として指しているからです。解決策は、 PL/PgSQL の中で EXECUTE を一
時テーブルアクセスのために使うことです。これで、毎回クエリーのパースし直しを起 時テーブルアクセスのために使うことです。これで、毎回問い合わせをパースし直すこ
こすでしょう。 とになるでしょう。
4.27) どのようなリプリケーションオプションを利用できますか? 4.27) どのようなリプリケーションオプションを利用できますか?
@ -1377,7 +1394,7 @@ http://www.csra.co.jp/~mitani/jpug/pgreplicate/ ]
[訳注: [訳注:
日本語版の製作については以下の通りです。 日本語版の製作については以下の通りです。
最終更新日: 2003年09月20 最終更新日: 2004年04月28
翻訳者: 桑村 潤 (Jun Kuwamura <juk at PostgreSQL.jp>) 翻訳者: 桑村 潤 (Jun Kuwamura <juk at PostgreSQL.jp>)
このFAQの和訳の作成にあたり協力をしてくださった方々(敬称は略させていただきます): このFAQの和訳の作成にあたり協力をしてくださった方々(敬称は略させていただきます):

View File

@ -8,7 +8,7 @@
<H1> <H1>
PostgreSQL(ポストグレス・キュー・エル)についてよくある質問とその解答(FAQ)</H1> PostgreSQL(ポストグレス・キュー・エル)についてよくある質問とその解答(FAQ)</H1>
<P> <P>
原文最終更新日: Tue Sep 9 18:42:51 EDT 2003</P> 原文最終更新日: Mon Mar 29 00:07:11 EST 2004</P>
<P> <P>
現在の維持管理者: Bruce Momjian (<A 現在の維持管理者: Bruce Momjian (<A
HREF="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR> HREF="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
@ -65,7 +65,7 @@ http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>
<A HREF="#1.11">1.11</A>) PostgreSQLは西暦2000年問題(Y2K)に対応していますか?<BR> <A HREF="#1.11">1.11</A>) PostgreSQLは西暦2000年問題(Y2K)に対応していますか?<BR>
<A HREF="#1.12">1.12</A>) 開発チームにはどのように参加しますか?<BR> <A HREF="#1.12">1.12</A>) 開発チームにはどのように参加しますか?<BR>
<A HREF="#1.13">1.13</A>) バグレポートはどのように発信しますか?<BR> <A HREF="#1.13">1.13</A>) バグレポートはどのように発信しますか?<BR>
<A HREF="#1.14">1.14</A>) 他の<SMALL>DBMS</SMALL>と比べてPostgreSQLはどうなのですか<BR> <A HREF="#1.14">1.14</A>) 他の<SMALL>DBMS</SMALL>と比べてPostgreSQLはどうなのですか<BR>
<A HREF="#1.15">1.15</A>) PostgreSQLを資金面で援助するにはどうすればよいですか<BR> <A HREF="#1.15">1.15</A>) PostgreSQLを資金面で援助するにはどうすればよいですか<BR>
@ -98,7 +98,7 @@ http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>
<H2 align="center">操作上の質問</H2> <H2 align="center">操作上の質問</H2>
<A HREF="#4.1">4.1</A>) バイナリ・カーソルと通常カーソルとの違いは何ですか?<BR> <A HREF="#4.1">4.1</A>) バイナリ・カーソルと通常カーソルとの違いは何ですか?<BR>
<A HREF="#4.2">4.2</A>) 最初の数ロウのみを <SMALL>select</SMALL> するにはどうしますか? ランダムな <BR> <A HREF="#4.2">4.2</A>) 最初の数ロウのみを <SMALL>select</SMALL> するにはどうしますか? ランダムなロウ <BR>
<A HREF="#4.3">4.3</A>) テーブルやその他の情報のリストを <I>psql</I> で見るにはどうしますか?<BR> <A HREF="#4.3">4.3</A>) テーブルやその他の情報のリストを <I>psql</I> で見るにはどうしますか?<BR>
<A HREF="#4.4">4.4</A>) テーブルからカラムの削除、あるいは、データ型を変更するにはどうしますか?<BR> <A HREF="#4.4">4.4</A>) テーブルからカラムの削除、あるいは、データ型を変更するにはどうしますか?<BR>
<A HREF="#4.5">4.5</A>) ロウ、テーブル、データベースの最大サイズは?<BR> <A HREF="#4.5">4.5</A>) ロウ、テーブル、データベースの最大サイズは?<BR>
@ -142,10 +142,13 @@ http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>
<H4><A NAME="1.1">1.1</A>) PostgreSQL とは何ですか? 何と読みますか?</H4> <H4><A NAME="1.1">1.1</A>) PostgreSQL とは何ですか? 何と読みますか?</H4>
<P><I>Post-Gres-Q-L.</I>(ポスト - グレス - キュー - エル) と発音します。</P> <P><I>Post-Gres-Q-L.</I>(ポスト - グレス - キュー - エル) と発音します。
<P>PostgreSQL は次世代 <SMALL>DBMS</SMALL> 研究用のプロトタイプであった POSTGRES データベース管理システムの改良版です。PostgreSQL は POSTGRES の強力なデータ・モデルと豊富なデータ・タイプ(型)を保持しながら、POSTGRES で使われた PostQuel 問い合わせ言語を、拡張した <SMALL>SQL</SMALL> のサブセットに置き換えています。PostgreSQL は無料で完全なソースを利用できます。 この発音を聞きたい人のために、オーディオファイルを http://www.postgresql.org/postgresql.mp3 に用意してあります。</P>
<P>PostgreSQL は次世代 <SMALL>DBMS</SMALL> 研究用のプロトタイプであった POSTGRES データベース管理システムの改良版です(このため、今でもときどき "Postgres" と呼ばれることがあります。PostgreSQL は POSTGRES の強力なデータ・モデルと豊富なデータ・タイプ(型)を保持しながら、POSTGRES で使われた PostQuel 問い合わせ言語を、拡張した <SMALL>SQL</SMALL> のサブセットに置き換えています。PostgreSQL は無料で完全なソースを利用できます。
<P>PostgreSQL の開発は、PostgreSQL 開発メーリングリストに参加している開発者達のチームですべて行なわれています。現在の座長は Marc G. Fournier (<A HREF="mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A> )です。(下記の<a href="#1.6">1.6節</a>に参加の仕方があります。)現在、このチームが PostgreSQL 開発のすべての面倒をみています。 <P>PostgreSQL の開発は、PostgreSQL 開発メーリングリストに参加している開発者達のチームですべて行なわれています。現在の座長は Marc G. Fournier (<A HREF="mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A> )です。(下記の<a href="#1.6">1.6節</a>に参加の仕方があります。)現在、このチームが PostgreSQL 開発のすべての面倒をみています。このチームはコミュニティプロジェクトであり、いかなる企業によっても制御を受けません。参加したければ、<A href=
"http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html">http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html</A> にある開発者向けのFAQを見てください。
</P>
<P>Postgres95-1.01 の中心的な開発者は Andrew Yu と Jolly Chen でしたが、その他大勢の人々がこのコードの移植、テスト、デバグ、および、改良に参加しました。PostgreSQL の派生元コードである POSTGRES はカリフォルニア大学バークレイ校において、 Michael Stonebraker 教授の指揮のもと、多くの学生、卒業生、本職のプログラマたちの努力により作られました。 <P>Postgres95-1.01 の中心的な開発者は Andrew Yu と Jolly Chen でしたが、その他大勢の人々がこのコードの移植、テスト、デバグ、および、改良に参加しました。PostgreSQL の派生元コードである POSTGRES はカリフォルニア大学バークレイ校において、 Michael Stonebraker 教授の指揮のもと、多くの学生、卒業生、本職のプログラマたちの努力により作られました。
@ -163,7 +166,7 @@ http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>
<P> <P>
PostgreSQL Data Base Management System</P> PostgreSQL Data Base Management System</P>
<P> <P>
Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group
Portions Copyright (c) 1994-6 Regents of the University of California</P> Portions Copyright (c) 1994-6 Regents of the University of California</P>
<P> <P>
Permission to use, copy, modify, and distribute this software and its Permission to use, copy, modify, and distribute this software and its
@ -188,14 +191,14 @@ MODIFICATIONS.</P>
<SMALL><PRE> <SMALL><PRE>
POSTGRESQL データベース管理システム POSTGRESQL データベース管理システム
部分的著作権 (c) 1996-2002, PostgreSQL国際開発チーム 部分的著作権 (c) 1996-2004, PostgreSQL国際開発チーム
部分的著作権 (c) 1994-6 カリフォルニア大学本校 部分的著作権 (c) 1994-6 カリフォルニア大学本校
本ソフトウェアおよびその文書一式は上記の著作権表示と、この文章 本ソフトウェアおよびその文書一式は上記の著作権表示と、この文章
およびこれに続く二つの段落が全ての複製に添付されている限りにおい およびこれに続く二つの段落が全ての複製に添付されている限りにおい
て、使用、複製、修正および配付の許可を、いかなる目的であっも、 て、使用、複製、修正および配付の許可を、いかなる目的であっも、
償でかつ同意書無しに行なえることをここに認めます。 償でかつ同意書無しに行なえることをここに認めます。
カリフォルニア大学は、いかなる当事者にたいしても、利益の壊失を カリフォルニア大学は、いかなる当事者にたいしても、利益の壊失を
含む、直接的、間接的、特別、偶然あるいは必然的にかかわらず生じた 含む、直接的、間接的、特別、偶然あるいは必然的にかかわらず生じた
@ -221,14 +224,14 @@ MODIFICATIONS.</P>
<H4><A NAME="1.3">1.3</A>) PostgreSQL の動作環境は?</H4> <H4><A NAME="1.3">1.3</A>) PostgreSQL の動作環境は?</H4>
<P> <P>
一般的に、最近のUnix互換プラットホームならばPostgreSQLをはしらせられるはずです。リリースの時点で実際にテストを行なったことの報告がなされたプラットホームについてはインストール手引書に列挙してあります。</P> 一般的に、最近のUnix互換プラットホームであればPostgreSQLを稼働させられるはずです。リリースの時点で実際にテストを行なったことの報告がなされたプラットホームについてはインストール手引書に列挙してあります。</P>
<P> <P>
<H4><A NAME="1.4">1.4</A>) Unix以外の移植版で使えるものは</H4> <H4><A NAME="1.4">1.4</A>) Unix以外の移植版で使えるものは</H4>
<P><STRONG>クライアント</STRONG></P> <P><STRONG>クライアント</STRONG></P>
<P> MS Windows プラットホーム上で走せるために、<I>libpq</I> C ライブラリ、psql、その他のインターフェイス、および、クライアントアプリケーションをコンパイルすることは可能です。この場合、クライアントを MS Windows 上で走らせて、TCP/IP 経由でサポートされている Unix プラットホーム上で走るサーバと通信します。</P> <P> MS Windows プラットホーム上で走せるために、<I>libpq</I> C ライブラリ、psql、その他のインターフェイス、および、クライアントアプリケーションをコンパイルすることは可能です。この場合、クライアントを MS Windows 上で走らせて、TCP/IP 経由でサポートされている Unix プラットホーム上で走るサーバと通信します。</P>
<P> Win32 <I>libpq</I> ライブラリと psql を作るために、<I>win32.mak</I> が配布に含まれてます。PostgreSQLは <SMALL>ODBC</SMALL> クライアントとも通信できます。</P> <P> Win32 <I>libpq</I> ライブラリと psql を作るために、<I>win32.mak</I> が配布に含まれてます。PostgreSQLは <SMALL>ODBC</SMALL> クライアントとも通信できます。</P>
<P><STRONG>サーバ</STRONG></P> <P><STRONG>サーバ</STRONG></P>
@ -306,8 +309,12 @@ href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A>
<P> ダイジェスト版は、メインリストで受信するメッセージが 30k 程度溜る毎にダイジェスト版リストのメンバーに送付されます。</P> <P> ダイジェスト版は、メインリストで受信するメッセージが 30k 程度溜る毎にダイジェスト版リストのメンバーに送付されます。</P>
<P> バグレポート用のメーリングリストもあります。このリストへの参加は "本文"といっしょに: <P> バグレポート用のメーリングリストもあります。このリストへの参加は "本文" に:
<A <PRE>
subscribe
end
</PRE>
と書いて<A
HREF="mailto:bugs-request@PostgreSQL.org">bugs-request@PostgreSQL.org</A> HREF="mailto:bugs-request@PostgreSQL.org">bugs-request@PostgreSQL.org</A>
へ電子メールを送って下さい。</P> へ電子メールを送って下さい。</P>
@ -325,8 +332,12 @@ HREF="mailto:bugs-request@PostgreSQL.org">bugs-request@PostgreSQL.org</A>
<A HREF="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A> <A HREF="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A>
</BLOCKQUOTE> </BLOCKQUOTE>
</P> </P>
<P>EFNet と OpenProjects に <I>#PostgreSQL</I> という IRC チャンネルもあります。 <P>EFNetに <I>#PostgreSQL</I> という IRC チャンネルもあります。
UNIX コマンドで<tt>irc -c '#PostgreSQL' "$USER" <A HREF="http://irc.phoenix.net">irc.phoenix.net</A> を使っています。</P> UNIX コマンドで
<CODE>irc -c '#PostgreSQL' "$USER" irc.phoenix.net.</CODE> あるいは、
<CODE>irc -c '#PostgreSQL' "$USER" irc.freenode.net.</CODE> を使って参加できます。
</P>
<P> <P>
<SMALL><PRE> <SMALL><PRE>
[訳注: [訳注:
@ -359,7 +370,7 @@ UNIX
<H4><A NAME="1.7">1.7</A>) 最新版はどれですか</H4> <H4><A NAME="1.7">1.7</A>) 最新版はどれですか</H4>
<P> <P>
PostgreSQL の最新版はバージョン 7.3.4 です。</P> PostgreSQL の最新版はバージョン 7.4.2 です。</P>
<P> <P>
我々は、68カ月毎にメジャーリリースを行なうことを計画しています。</P> 我々は、68カ月毎にメジャーリリースを行なうことを計画しています。</P>
@ -501,7 +512,7 @@ href="http://www.PostgreSQL.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bu
<P> それと同時に ftp サイト <A HREF="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A>で、もっと新しいバージョンの PostgreSQL あるいはパッチをさがしてみて下さい。</P> <P> それと同時に ftp サイト <A HREF="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A>で、もっと新しいバージョンの PostgreSQL あるいはパッチをさがしてみて下さい。</P>
<H4><A NAME="1.14">1.14</A>) 他の<SMALL>DBMS</SMALL>と比べてPostgreSQLはどうなのですか <H4><A NAME="1.14">1.14</A>) 他の<SMALL>DBMS</SMALL>と比べてPostgreSQLはどうなのですか
</H4> </H4>
<P> <P>
@ -515,7 +526,8 @@ href="http://www.PostgreSQL.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bu
<DT> <B>性能(Performance)</B></DT> <DT> <B>性能(Performance)</B></DT>
<DD> <DD>
PostgreSQLは他の商用あるいはオープンソースのデータベースと互角の性能も持ちます。ある面ではより早かったり、ほかの面ではより遅かったりします。MySQLなどの特化型データベース・システムにくらべて、PostgreSQLの挿入更新が遅いのは、トランザクションによるオーバーヘッドがあるからです。もちろん、MySQLには上記の<I>Features</I>の節に示すような機能はまったくありません。我々は、PostgreSQLに柔軟性と機能性を組み込みながらも、絶えず、プロファイラーに掛けたりソースコードを解析したりして、性能の改善を続けています。PostgreSQL と MySQL とを比較している面白い Web ページが<A href="http://openacs.org/philosophy/why-not-mysql.html">http://openacs.org/philosophy/why-not-mysql.html</A>にあります。 PostgreSQLは他の商用あるいはオープンソースのデータベースと互角の性能も持ちます。ある面ではより早かったり、ほかの面ではより遅かったりします。MySQLなどの特化型データベース・システムにくらべて、PostgreSQL は複数ユーザや複雑な問い合わせ、また、 read/write 問い合わせのロードがより高速です。MySQLは少ないユーザでの単純な SELECT 問い合わせでは高速です。もちろん、MySQLには上記の<I>Features</I>の節に示すような機能はまったくありません。我々は、PostgreSQLに柔軟性と機能性を組み込みながらも、絶えず、プロファイラーに掛けたりソースコードを解析したりして、性能の改善を続けています。PostgreSQL と MySQL とを比較している面白い Web ページが<A href="http://openacs.org/philosophy/why-not-mysql.html">http://openacs.org/philosophy/why-not-mysql.html</A>にあります。また、MySQLは、製品をオープンソースを通じて配布して、クローズソースソフトウェアとしての商用ライセンスを要求する企業でもあり、PostgreSQLのようなオープンソース開発コミュニティではありません。
<BR> <BR>
PostgreSQLは、Unixプロセスを起動することによりユーザー接続を操作します。複数のバックエンド・プロセスが情報をロックしながらデータ・バッファーを共有します。マルチCPUでは、簡単に複数のバックエンドをそれぞれのCPUで走らせることができます。<BR> PostgreSQLは、Unixプロセスを起動することによりユーザー接続を操作します。複数のバックエンド・プロセスが情報をロックしながらデータ・バッファーを共有します。マルチCPUでは、簡単に複数のバックエンドをそれぞれのCPUで走らせることができます。<BR>
</DD> </DD>
@ -527,7 +539,7 @@ PostgreSQL
<DT> <B>サポート(Support)</B></DT> <DT> <B>サポート(Support)</B></DT>
<DD> <DD>
我々のメーリングリストは、遭遇するいかなる問題についても解決への手助けをしてくれる、開発者やユーザの大きな集まりへの接点を提供しています。我々は問題の解決を保証することはできませんが、商用データベースであっても常に解決されるわけではありません。開発者や、ユーザ・コミュニティ、マニュアル類、それに、ソースコードなどへ直接アクセスできることよって、PostgreSQLのサポートは、他の<SMALL>DBMS</SMALL>サポートよりも優れたものとなっています。御要望に答えて、事柄毎の商用サポートなどもあります(<A href="#1.6">FAQ1.6節</A>をご覧下さい)。<BR> 我々のメーリングリストは、遭遇するいかなる問題についても解決への手助けをしてくれる、開発者やユーザの大きな集まりへの接点を提供しています。我々は問題の解決を保証することはできませんが、商用データベースであっても常に解決されるわけではありません。開発者や、ユーザ・コミュニティ、マニュアル類、それに、ソースコードなどへ直接アクセスできることよって、PostgreSQLのサポートは、他の<SMALL>DBMS</SMALL>サポートよりも優れたものとなっています。御要望に答えて、事柄毎の商用サポートなどもあります(<A href="#1.6">FAQ1.6節</A>をご覧下さい)。<BR>
</DD> </DD>
<DT> <B>価格(Price)</B></DT> <DT> <B>価格(Price)</B></DT>
@ -626,14 +638,14 @@ Programmer's Guide</A>
その中にPgAccess <a その中にPgAccess <a
href="http://www.pgaccess.com">http://www.pgaccess.com</a> href="http://www.pgaccess.com">http://www.pgaccess.com</a>
も含まれます。 も含まれます。
PgAdmin II (<a PgAdmin III (<a
href="http://www.pgadmin.org">http://www.pgadmin.org</a> Win32-only)もあります。 href="http://www.pgadmin.org">http://www.pgadmin.org</a>)もあります。
RHDB Admin (<a RHDB Admin (<a
href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/ href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/
</a>)と Rekall (<a href="http://www.thekompany.com/products/rekall/"> </a>)と Rekall (<a href="http://www.thekompany.com/products/rekall/">
http://www.thekompany.com/products/rekall/</a>, proprietary)もありま http://www.thekompany.com/products/rekall/</a>, proprietary)もありま
す。 す。
PHPPgAdmin (<a href="http://phppgadmin.sourceforge.net/"> PhpPgAdmin (<a href="http://phppgadmin.sourceforge.net/">
http://phppgadmin.sourceforge.net/ </a>) はPostgreSQLへのWebベースの http://phppgadmin.sourceforge.net/ </a>) はPostgreSQLへのWebベースの
インターフェイスを提供します。 インターフェイスを提供します。
@ -717,19 +729,19 @@ PostgreSQL Administrator's Gide
<H4><A NAME="3.5">3.5</A>) 他のホストからの接続はどのように制御しますか? <H4><A NAME="3.5">3.5</A>) 他のホストからの接続はどのように制御しますか?
</H4> </H4>
<P> 既定値では、PostgreSQL は unix ドメインソケットを使うローカルマシンからの接続しか許しません。<I>postmaster</I> 起動に <I>-i</I> フラッグを加え<I>$PGDATA/pg_hba.conf</I> ファイルを適切に直して、ホスト主導型の認証を使わないかぎりは他のマシンからは接続できないでしょう。これによりTCP/IPの接続が可能になります。 <P> 既定値では、PostgreSQL は unix ドメインソケットを使うローカルマシンからの接続しか許しません。postgresql.conf の中の tcpip_sockets を有効にし<I>$PGDATA/pg_hba.conf</I> ファイルを適切に直して、ホスト主導型の認証を使わないかぎりは他のマシンからは接続できないでしょう。これによりTCP/IPの接続が可能になります。
<p>操作不能なセマフォも過度のデータベースアクセス中にクラッシュを引き起こすことがあります。 <p>操作不能なセマフォも過度のデータベースアクセス中にクラッシュを引き起こすことがあります。
<P> <P>
<H4><A NAME="3.6">3.6</A>) より良い性能を得るためには、データベース・エンジンをどのように調整すれば良いですか? <H4><A NAME="3.6">3.6</A>) より良い性能を得るためには、データベース・エンジンをどのように調整すれば良いですか?
</H4> </H4>
<P> 確かにインデックスは問い合わせの速度を増します。<SMALL>EXPLAIN</SMALL>コマンドで PostgreSQL がどのようにあなたの問い合わせを翻訳しているかを見ることができ、そして、どのインデックスが使われているかを見ることができます。 <P> 確かにインデックスは問い合わせの速度を増します。<SMALL>EXPLAIN ANALYZE</SMALL>コマンドで PostgreSQL がどのようにあなたの問い合わせを翻訳しているかを見ることができ、そして、どのインデックスが使われているかを見ることができます。
<P>もし <SMALL>INSERT</SMALL> を多用している場合は、<SMALL>COPY</SMALL> コマンドを使って大きなバッチ処理でそれを行なうことを検討して下さい。これは、<SMALL>INSERT</SMALL> を別々に行なうよりもっと高速です。次に、<SMALL>BEGIN WORK/COMMIT</SMALL> のトランザクション・ブロックの中に無い文は、それら自身がそれぞれのトランザクションに入っていると見なされます。いくつかの文を一つのトランザクション・ブロックの中で行なうことを考えて下さい。これによりトランザクションのオーバーヘッドが減ります。また、大きなデータの変更を行なう際はインデックスを一度外して、作り直すことを考えてみて下さい。 <P>もし <SMALL>INSERT</SMALL> を多用している場合は、<SMALL>COPY</SMALL> コマンドを使って大きなバッチ処理でそれを行なうことを検討して下さい。これは、<SMALL>INSERT</SMALL> を別々に行なうよりもっと高速です。次に、<SMALL>BEGIN WORK/COMMIT</SMALL> のトランザクション・ブロックの中に無い文は、それら自身がそれぞれのトランザクションに入っていると見なされます。いくつかの文を一つのトランザクション・ブロックの中で行なうことを考えて下さい。これによりトランザクションのオーバーヘッドが減ります。また、大きなデータの変更を行なう際はインデックスを一度外して、作り直すことを考えてみて下さい。
<P> チューニングのオプションがいくつかあります。<I>postmaster</I><I>-o -F</I> オプションで起動することによって、<I>fsync()</I> を無効にすることができます。これによって、各トランザクション毎に <I>fsync()</I> でディスクを更新するのを止めさせます。 <P> チューニングのオプションがいくつかあります。<I>postmaster</I><I>-o -F</I> オプションで起動することによって、<I>fsync()</I> を無効にすることができます。これによって、各トランザクション毎に <I>fsync()</I> でディスクを更新するのを止めさせます。
<P> <I>postmaster</I> <I>-B</I> オプションを使ってバックエンド・プロセスにより使われる共有メモリー・バッファを大きくすることもできます。もし、このパラメータを高くしすぎると、カーネルの共有メモリー空間の制限値を越えてしまうために <I>postmaster</I> が走らなくなるでしょう。既定値では、それぞれのバッファの大きさは 8K で、バッファ数は 64 です。 <P> <I>postmaster</I> <I>-B</I> オプションを使ってバックエンド・プロセスにより使われる共有メモリー・バッファを大きくすることもできます。もし、このパラメータを高くしすぎると、カーネルの共有メモリー空間の制限値を越えてしまうために <I>postmaster</I> が走らなくなるでしょう。既定値では、それぞれのバッファの大きさは 8K で、バッファ数は 64 です。
<P> バックエンドを <I>-S</I> オプションを使って、それぞれのバックエンド・プロセスが一時的な並べ替えによって使うメモリーの最大サイズを増やすこともできます。 その <I>-S</I> の値はキロバイト単位で、既定値は 512 (すなわち、512K)です。 <P> バックエンドを <I>-S</I> オプションを使って、それぞれのバックエンド・プロセスが一時的な並べ替えによって使うメモリーの最大サイズを増やすこともできます。 その <I>-S</I> の値はキロバイト単位で、既定値は 512 (すなわち、512K)です。
@ -751,7 +763,7 @@ PostgreSQL Administrator's Gide
<P> これにより PostgreSQL の最上部のディレクトリに server.log ファイルが置かれます。このファイルはサーバーが遭遇した問題やエラーについて有用な情報を含みます。<I>Postmaster</I> は更に詳細な情報を報告するための <I>-d</I> オプションを持ちます。その <I>-d</I> オプションは、デバグ・レベルを指定します。高いデバグ・レベルでは、大きなログファイルを生成することに注意しなくてはなりません。 <P> これにより PostgreSQL の最上部のディレクトリに server.log ファイルが置かれます。このファイルはサーバーが遭遇した問題やエラーについて有用な情報を含みます。<I>Postmaster</I> は更に詳細な情報を報告するための <I>-d</I> オプションを持ちます。その <I>-d</I> オプションは、デバグ・レベルを指定します。高いデバグ・レベルでは、大きなログファイルを生成することに注意しなくてはなりません。
<P>もし、<i>postmaster</i>が走っていなければ、<I>postgres</I>バックエンドをコマンドから走らせることができ、直接<SMALL>SQL</SMALL>文をタイプすることができます。このやりかたは、デバグ目的のとき<B>だけ</B>お奨めします。セミコロンではなく、改行が問い合わせの終りになることに注意してください。もし、デバグシンボルを入れてコンパイルしていれば、デバッガを使って何が起きているかを見ることができます。postmaster からバックエンドを開始したわけではないので、独立な環境で走っているのではなくロック/バックエンドとの対話の問題が重複することはありません。 <P>もし、<i>postmaster</i>が走っていなければ、<I>postgres</I>バックエンドをコマンドラインから走らせることができ、直接<SMALL>SQL</SMALL>文をタイプすることができます。このやりかたは、デバグ目的のとき<B>だけ</B>お奨めします。セミコロンではなく、改行が問い合わせの終りになることに注意してください。もし、デバグシンボルを入れてコンパイルしていれば、デバッガを使って何が起きているかを見ることができます。postmaster からバックエンドを開始したわけではないので、独立な環境で走っているのではなくロック/バックエンドとの対話の問題が重複することはありません。
<P> もし、<i>postmaster</i>が走っていれば、あるウィンドウで <P> もし、<i>postmaster</i>が走っていれば、あるウィンドウで
<I>psql</I>を開始すると、<i>psql</i> で使われる <i>postgres</i> プロセス <I>psql</I>を開始すると、<i>psql</i> で使われる <i>postgres</i> プロセス
@ -775,7 +787,7 @@ PostgreSQL Administrator's Gide
<P> <I>postmasterが</I>同時始動できるバックエンドプロセスに対する制限数を増やす必要があります。 <P> <I>postmasterが</I>同時始動できるバックエンドプロセスに対する制限数を増やす必要があります。
<P>既定の最大プロセスは32プロセスです。<I>-N</I>に適切な値を引数にして<I>postmaster</I>を再起動するか、PostgreSQL.conf を修正することによって、その値を増やすことができます。 <P>既定の最大プロセスは32プロセスです。<I>-N</I>に適切な値を引数にして<I>postmaster</I>を再起動するか、PostgreSQL.conf を修正することによって、その値を増やすことができます。
既定の構成では<I>-N</I>は最大1024まで設定できます。もし、もっと必要であれば<I>include/config.h</I>の中の<SMALL>MAXBACKENDS</SMALL>を増加させ、再構築します。もし、望むなら<I>configure</I><I>--with-maxbackends</I>切替を使って、<I>-N</I>の既定値を構成時に設定できます。 既定の構成では<I>-N</I>は最大1024まで設定できます。もし、もっと必要であれば<I>include/config.h</I>の中の<SMALL>MAXBACKENDS</SMALL>を増加させ、再構築します。もし、望むなら<I>configure</I><I>--with-maxbackends</I>切替を使って、<I>-N</I>の既定値を構成時に設定できます。
<P>もし、<I>-N</I> を 32よりも大きくするのであれば、<I>-B</I>も既定の64より大きい値に増加させなくてはならないし、<I>-B</I> は少なくとも <I>-N</I> の2倍はなくてはならず、おそらく最高性能を望むならばそれより大きい値が必要なはずです。バックエンドプロセスをたくさんにすると、いろいろなUnixカーネル構成パラメータも増やすことが必要になるかもしれません。 <P>もし、<I>-N</I> を 32よりも大きくするのであれば、<I>-B</I>も既定の64より大きい値に増加させなくてはならないし、<I>-B</I> は少なくとも <I>-N</I> の2倍はなくてはならず、おそらく最高性能を望むならばそれより大きい値が必要なはずです。バックエンドプロセスをたくさんにすると、いろいろなUnixカーネル構成パラメータも増やすことが必要になるかもしれません。
共有メモリー・ブロックの最大値(<SMALL>SHMMAX</SMALL>)、 共有メモリー・ブロックの最大値(<SMALL>SHMMAX</SMALL>)、
@ -825,7 +837,7 @@ PostgreSQL
<P> 詳述は、オンラインマニュアルで <SMALL>DECLARE</SMALL> を見て下さい。 <P> 詳述は、オンラインマニュアルで <SMALL>DECLARE</SMALL> を見て下さい。
<P> <P>
<H4><A NAME="4.2">4.2</A>) 最初の数ロウのみを <SMALL>SELECT</SMALL>するにはどうしますか?ランダムな <H4><A NAME="4.2">4.2</A>) 最初の数ロウのみを <SMALL>SELECT</SMALL>するにはどうしますか?ランダムなロウ
</H4> </H4>
<P> オンラインマニュアルで<SMALL>FETCH</SMALL>を見てください。あるいは、SELECT ... LIMIT....を使ってみて下さい。 <P> オンラインマニュアルで<SMALL>FETCH</SMALL>を見てください。あるいは、SELECT ... LIMIT....を使ってみて下さい。
@ -833,7 +845,7 @@ PostgreSQL
<P>たとえ、欲しいのは最初の数ロウだけでも、すべての問い合わせを評価しなくてはならないかもしれません。<SMALL>ORDER BY</SMALL> を持った問い合わせを使うことを考えてみて下さい。 <P>たとえ、欲しいのは最初の数ロウだけでも、すべての問い合わせを評価しなくてはならないかもしれません。<SMALL>ORDER BY</SMALL> を持った問い合わせを使うことを考えてみて下さい。
もし、<SMALL>ORDER BY</SMALL>に合ったインデックスがあるとすると PostgreSQLは要求された最初の数ロウだけで評価できるかもしれませんが、でなれば、PostgreSQL は意図したロウが生成されるまですべてのロウを評価しなければならないかもしれません。 もし、<SMALL>ORDER BY</SMALL>に合ったインデックスがあるとすると PostgreSQLは要求された最初の数ロウだけで評価できるかもしれませんが、でなれば、PostgreSQL は意図したロウが生成されるまですべてのロウを評価しなければならないかもしれません。
<P>ランダムな<SMALL>SELECT</SMALL>するには、次の文を使います: <P>ランダムなロウ<SMALL>SELECT</SMALL>するには、次の文を使います:
<PRE> <PRE>
SELECT col SELECT col
FROM tab FROM tab
@ -844,11 +856,9 @@ PostgreSQL
<P> <P>
<H4><A NAME="4.3">4.3</A>) テーブルやその他の情報のリストを <I>psql</I> で見るにはどうしますか? <H4><A NAME="4.3">4.3</A>) テーブルやその他の情報のリストを <I>psql</I> で見るにはどうしますか?
</H4> </H4>
<P>
<I>psql</I>のソースコードとして書かれた <I>pgsql/src/bin/psql/describe.c</I> ファイルを読むことがその答えです。
そこには、psqlのバックスラッシュコマンドによる出力のための<SMALL>SQL</SMALL>コマンドが含まれています。 <I>psql</I><I>-E</I> オプションをつけて起動すれば、与えたコマンドを実行するための問い合わせが出力されます。
<P> <P>
<I>psql</I>の中で、 \dt コマンドを使ってテーブルを見ます。psql の中のコマンドの完全なリストには \? を使えます。あるいは、<I>psql</I>のソースコードの<I>pgsql/src/bin/psql/describe.c</I>ファイルを見るることもできて、その中には<I>psql</I>のバックスラッシュコマンドの出力を生成する<SMALL>SQL</SMALL>コマンドが含まれています。また、<I>psql</I>を -E オプションと一緒に開始すると、実行させたコマンドを実行するために使う問い合わせを出力するようになります。PostgreSQLはまた、<SMALL>SQLi</SMALL>対応の INFORMATION SCHEMA インターフェースを用意していて、データベースについての情報を得るために問い合わせを使うことができます。
</P>
<H4><A NAME="4.4">4.4</A>) テーブルからカラムの削除、あるいは、データ型を変更するにはどうしますか? <H4><A NAME="4.4">4.4</A>) テーブルからカラムの削除、あるいは、データ型を変更するにはどうしますか?
@ -886,7 +896,7 @@ PostgreSQL
<P> 制限は以下のとおりです。 <P> 制限は以下のとおりです。
<PRE> <PRE>
データベースの最大サイズ? 制限無し (4 TB のデータベースも存在します) データベースの最大サイズ? 制限無し (32 TB のデータベースも存在します)
テーブルの最大サイズ? 32TB テーブルの最大サイズ? 32TB
ロウの最大サイズ? 1.6TB ロウの最大サイズ? 1.6TB
フィールドの最大サイズ? 1GB フィールドの最大サイズ? 1GB
@ -935,7 +945,7 @@ PostgreSQL
<P> <P>
インデックスは、これほどのオーバヘッドは要求しませんが、インデックス付けされるデータを含む以上、それなりに大きくなります。 インデックスは、これほどのオーバヘッドは要求しませんが、インデックス付けされるデータを含む以上、それなりに大きくなります。
<P><SMALL>NULL</SMALL>はビットマップ保存されていて、それらがわずかにスペースを使います。 <P><SMALL>NULL</SMALL>はビットマップとして保存されていて、それらがわずかにスペースを使います。
<P> <P>
@ -1055,7 +1065,7 @@ Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57.
<I>~</I>演算子は正規表現照合を行ない、<I>~*</I> は大文字と小文字を区別しない(case-insensitive)正規表現照合を行います。 大文字と小文字を区別しない <SMALL>LIKE</SMALL> 演算子を <SMALL>ILIKE</SMALL> といいます。 <I>~</I>演算子は正規表現照合を行ない、<I>~*</I> は大文字と小文字を区別しない(case-insensitive)正規表現照合を行います。 大文字と小文字を区別しない <SMALL>LIKE</SMALL> 演算子を <SMALL>ILIKE</SMALL> といいます。
<P>大文字と小文字を区別しない等値比較次のように表現できる: <P>大文字と小文字を区別しない等値比較次のように表現できる:
<PRE> <PRE>
SELECT * SELECT *
@ -1104,13 +1114,13 @@ BYTEA bytea
<P> 上記の型のうち最初の4つの型は "varlena" 型です(すなわち、ディスクの最初の4バイトがデータ長で、それの後に実際のデータが続きます)。このように実際の空間は宣言された大きさよりも少し大きくなります。しかし、これらのデータ型は<SMALL>TOAST</SMALL>により圧縮されたり複数ロウに渡って保存されたりして、ディスク上の空間は思ったより小さくなります。 <P> 上記の型のうち最初の4つの型は "varlena" 型です(すなわち、ディスクの最初の4バイトがデータ長で、それの後に実際のデータが続きます)。このように実際の空間は宣言された大きさよりも少し大きくなります。しかし、これらのデータ型は<SMALL>TOAST</SMALL>により圧縮されたり複数ロウに渡って保存されたりして、ディスク上の空間は思ったより小さくなります。
<P><SMALL>VARCHAR(n)</SMALL> は可変長の文字列を保存するのに最適ですが、保存できる文字列の長さに制限があります。<SMALL>TEXT</SMALL> は長さに制限の無い文字列の保存ためのもので、最大で 1ギガバイトです。 <SMALL>CHAR(n)</SMALL>は、<SMALL>VARCHAR(n)</SMALL>が与えられた文字だけを保存するのに対し、ブランクを詰め込んでいつも同じ長さで文字列を保存するのに最適です。<SMALL>BYTEA</SMALL>は、部分的に<SMALL>NULL</SMALL> のバイトを含むバイナリデータを保存するためのものです。これらのタイプは同じくらいの性能特性をもちます。</P> <P><SMALL>VARCHAR(n)</SMALL> は可変長の文字列を保存するのに最適ですが、保存できる文字列の長さに制限があります。<SMALL>TEXT</SMALL> は長さに制限の無い文字列の保存ためのもので、最大で 1ギガバイトです。 <SMALL>CHAR(n)</SMALL>は、<SMALL>VARCHAR(n)</SMALL>が与えられた文字だけを保存するのに対し、ブランクを詰め込んでいつも同じ長さで文字列を保存するのに最適です。<SMALL>BYTEA</SMALL>は、部分的に<SMALL>NULL</SMALL> のバイトを含むバイナリデータを保存するためのものです。これらのタイプは同じくらいの性能特性をもちます。</P>
<P> <P>
<H4><A NAME="4.15.1">4.15.1</A>) 通番(serial)/自動増分フィールドはどのようにつくりますか? <H4><A NAME="4.15.1">4.15.1</A>) 通番(serial)/自動増分フィールドはどのようにつくりますか?
</H4> </H4>
<P> PostgreSQL は <SMALL>SERIAL</SMALL> データ型をサポートします。カラム上に通番とインデックスを自動作成します。たとえば、 <P> PostgreSQL は <SMALL>SERIAL</SMALL> データ型をサポートします。カラム上にシーケンスを自動作成します。たとえば、
<PRE> <PRE>
CREATE TABLE person ( CREATE TABLE person (
@ -1125,7 +1135,6 @@ BYTEA bytea
id INT4 NOT NULL DEFAULT nextval('person_id_seq'), id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
name TEXT name TEXT
); );
CREATE UNIQUE INDEX person_id_key ON person ( id );
[訳注: [訳注:
CREATE UNIQUE INDEX person_id_key ON person ( id ); CREATE UNIQUE INDEX person_id_key ON person ( id );
@ -1134,7 +1143,7 @@ BYTEA bytea
</PRE> </PRE>
通番についてのもっと詳しい情報は、オンラインマニュアルで <I>create_sequence</I> をご覧下さい。 通番についてのもっと詳しい情報は、オンラインマニュアルで <I>create_sequence</I> をご覧下さい。
<P> また、各ロウの<I>OID</I>フィールドを一意値として使うこともできます。しかしながら、もしもデータベースをダンプしてロードする必要がある場合は、<SMALL>OID</SMALL>を温存するために<I>pg_dump</I><I>-o</I>オプションを使うか、または、<SMALL>COPY WITH OIDS</small>オプションを使う必要があります。 <P> また、各ロウの<I>OID</I>フィールドを一意値として使うこともできます。しかしながら、もしもデータベースをダンプしてロードする必要がある場合は、<SMALL>OID</SMALL>を温存するために<I>pg_dump</I><I>-o</I>オプションを使うか、または、<SMALL>COPY WITH OIDS</small>オプションを使う必要があります。
Bruce Momjian の<A HREF="http://www.PostgreSQL.org/docs/aw_pgsql_book">(http://www.PostgreSQL.org/docs/aw_pgsql_book)の Numbering Rows</A>の章にありあます。 Bruce Momjian の<A HREF="http://www.PostgreSQL.org/docs/aw_pgsql_book">(http://www.PostgreSQL.org/docs/aw_pgsql_book)の Numbering Rows</A>の章にありあます。
@ -1268,7 +1277,10 @@ href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glo
<H4><A NAME="4.22">4.22</A>) なぜ、<SMALL>IN</SMALL>を使う副問い合わせがとても遅いのですか? <H4><A NAME="4.22">4.22</A>) なぜ、<SMALL>IN</SMALL>を使う副問い合わせがとても遅いのですか?
</H4> </H4>
<P> <P>
現在、外部問い合わせの各ロウについて副問い合わせの結果を順番にスキャンすることにより、副問い合わせを外部問い合わせに結合しています。もし、副問い合わせが数行しか返さず、外部問い合わせが沢山の行を返すなら、当面は<CODE>IN</CODE><CODE>EXISTS</CODE>で置き換えることです: 7.4 より前のバージョンでは、副問い合わせは、副問い合わせの結果を外部問い合わせの各ロウについて順次走査することによって、外部の問い合わせに結合させられる。
副問い合わせがわずかなロウしか返さず、外部問い合わせが沢山のロウを返す場合は、<CODE><SMALL>IN</SMALL></CODE>が最も早いです。他の問い合わせを高速化するには、<CODE>IN</CODE><CODE>EXISTS</CODE>に置換します:
</P>
<PRE> <PRE>
SELECT * SELECT *
FROM tab FROM tab
@ -1282,8 +1294,10 @@ href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glo
</PRE> </PRE>
とします。 とします。
これが手っ取り早いですが、<CODE>subcol</CODE>は索引付きカラムであるべきです。 これが手っ取り早いですが、<CODE>subcol</CODE>は索引付きカラムであるべきです。
ここで示した問題は7.4で修正されます。 <P>バージョン7.4以降では、<CODE>IN</CODE>は、通常の問い合わせと同様の洗練されたジョインの技術を実際に使い、<CODE>EXISTS</CODE>を使うことを好みます。
<P> </P>
<H4><A NAME="4.23">4.23</A>) <i>外部</i>結合(<i>outer</i> join)はどのように実現しますか?<BR></H4> <H4><A NAME="4.23">4.23</A>) <i>外部</i>結合(<i>outer</i> join)はどのように実現しますか?<BR></H4>
<P> <P>
@ -1334,7 +1348,7 @@ PostgreSQL
<P> <P>
<H4><A name="4.26">4.26</A>)なぜ、PL/PgSQL 関数の中から一時テーブルを確実に create/drop することができないのでしょうか?</H4> <H4><A name="4.26">4.26</A>)なぜ、PL/PgSQL 関数の中から一時テーブルを確実に create/drop することができないのでしょうか?</H4>
<P> <P>
PL/PgSQL は関数の内容をキャッシュし、その不幸な副作用のため、もし PL/PgSQL 関数が一時テーブルにアクセスすると、そのテーブルはあとでドロップされ再作成されますが、関数が再び呼び出されると、キャッシュされているその関数の内容はまだ古い一時テーブルを依然として指しているからです。解決策は、 PL/PgSQL の中で <SMALL>EXECUTE</SMALL> を一時テーブルアクセスのために使うことです。これで、毎回クエリーのパースし直しを起こすでしょう。</P> PL/PgSQL は関数の内容をキャッシュし、その不幸な副作用のため、もし PL/PgSQL 関数が一時テーブルにアクセスすると、そのテーブルはあとでドロップされ再作成されますが、関数が再び呼び出されると、キャッシュされているその関数の内容はまだ古い一時テーブルを依然として指しているからです。解決策は、 PL/PgSQL の中で <SMALL>EXECUTE</SMALL> を一時テーブルアクセスのために使うことです。これで、毎回問い合わせをパースし直すことになるでしょう。</P>
<H4><A name="4.27">4.27</A>) どのようなリプリケーションオプションを利用できますか? <H4><A name="4.27">4.27</A>) どのようなリプリケーションオプションを利用できますか?
@ -1411,7 +1425,7 @@ http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</a>
[訳注: [訳注:
日本語版の製作については以下の通りです。 日本語版の製作については以下の通りです。
最終更新日: 2003年09月20 最終更新日: 2004年04月28
翻訳者: 桑村 潤 (<A HREF="mailto:juk at PostgreSQL.jp">Jun Kuwamura &lt;juk at PostgreSQL.jp&gt;</A>) 翻訳者: 桑村 潤 (<A HREF="mailto:juk at PostgreSQL.jp">Jun Kuwamura &lt;juk at PostgreSQL.jp&gt;</A>)
このFAQの和訳の作成にあたり協力をしてくださった方々(敬称は略させていただきます): このFAQの和訳の作成にあたり協力をしてくださった方々(敬称は略させていただきます):