無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

postgres

名前

postgres --  PostgreSQL データベースサーバ

概要

postgres [ option ...]

説明

postgres は、 PostgreSQL のデータベースサーバです。 クライアントアプリケーションがデータベースに接続するためには、稼働中の postgres インスタンスに(ネットワークを介して、またはローカルで)接続する必要があります。 その後、 postgres は接続を取り扱うために別のサーバプロセスを開始します。

1つの postgres インスタンスは常に1つのデータベースクラスタのデータを管理します。 データベースクラスタとは、共通のファイルシステム領域( "データ領域" )に格納されているデータベースの集まりのことです。 1つのシステム上で、同時に複数の postmaster インスタンスを実行することは可能ですが、それらは異なるデータ領域と、異なる接続ポート(下記参照)を使用する必要があります。 postgres は、その起動時にデータ領域の場所を知らなければなりません。 その場所を -D オプションまたは PGDATA 環境変数によって指定しなければなりません。デフォルト値はありません。 通常、 -D または PGDATA は、 initdb で作成されたデータ領域ディレクトリを直接指し示します。 他のファイルレイアウトを取ることもできます。 項18.2 を参照してください。

デフォルトでは、 postgres はフォアグランドで起動し、ログメッセージを標準エラー出力に出力します。 実運用では、 postgres アプリケーションはおそらくマシン起動時にバックグランドで起動されるはずです。

また postgres はシングルユーザモードで呼び出すこともできます。 このモードは、主に initdb による初期化処理の中で使用されます。 これを、デバッグのためや災害からの復旧時に使用することもできます。 実際には発生するはずのプロセス間通信やロック処理が発生しませんので、シングルユーザモードがサーバのデバッグに確実に適したものではないことに注意してください。 シェルからシングルユーザモードで呼び出された場合、ユーザは問い合わせを入力できます。 結果は画面上に表示されますが、その形式はエンドユーザ向けではなく開発者向けのものです。 シングルユーザモードでは、セッションユーザはユーザID 1と設定され、暗黙的にスーパーユーザの能力がこのユーザに与えられます。 このユーザは実際に存在していなくても構いません。 このため、シングルユーザモードはシステムカタログの偶発的な損傷などから手動で復旧するために使用することができます。

オプション

postgres には、下記のコマンドライン引数を指定できます。 オプションに関する詳細は 第18章 を参照してください。 また、設定ファイルを使用することによって、これらを入力する手間を省くことができます。 一部の(安全な)オプションは接続中のクライアントから設定することもできます。 その設定方法はアプリケーションに依存し、また、そのセッションでのみ適用されます。 たとえば、 PGOPTIONS 環境変数を設定すると、 libpq を基にしたクライアントはその文字列をサーバに渡します。 渡された文字列は postgres コマンドラインオプションとして扱われます。

一般的な目的

-A 0|1

実行時にアサーション検査を行い、プログラムの不具合を検知するデバッグを補助します。 このオプションは、 PostgreSQL のコンパイル時にアサーションが有効にされた場合にのみ、使用可能となります。 この場合、デフォルトで有効になります。

-B nbuffers

サーバプロセスが使用する共有バッファの数を設定します。 このパラメータのデフォルト値は initdb により自動的に決まります。 このオプション指定は shared_buffers 設定パラメータの設定と同じです。

-c name = value

名前付き実行時パラメータを設定します。 PostgreSQL でサポートされる設定パラメータは 第18章 で説明します。 実際には、他の多くのコマンドラインオプションはこのようなパラメータへの代入を簡略化したものです。 -c は複数のパラメータを設定するために複数個使用することができます。

-C name

指定された名前の実行時パラメータの値を表示し、終了します、 (詳細については -c を参照してください。) これは実行中のサーバに対して使用することができ、 postgresql.conf からの値やその起動時に与えられたパラメータにより変更された値を返します。 クラスタが起動した後に与えられたパラメータは反映されません。

このオプションは、設定パラメータ値を問い合わせる pg_ctl など、サーバインスタンスと連携する他のプログラム向けを意図しています。 ユーザ向けのアプリケーションでは代わりに SHOW pg_settings ビューなどを使用すべきです。

-d debug-level

デバッグレベルを設定します。 大きな値が設定されているほど、より多くのデバッグ情報がサーバのログに出力されます。 値として設定できる範囲は、1から5までです。 特定のセッションで -d 0 を渡すこともできます。 この設定により、親の postgres プロセスのサーバログレベルがこのセッションに伝播されません。

-D datadir

ファイルシステム上のデータベース設定ファイルの場所を指定します。 詳細は 項18.2 を参照してください。

-e

デフォルトの日付データ形式を "ヨーロッパ式" にします。これにより、日付の入力時の順番は DMY になります。 また、日付の出力時にも、月の前に日にちを置いた書式で表示されるようになります。 詳細は 項8.5 を参照してください。

-F

性能向上のために fsync 呼び出しを無効とします。 ただしこの場合、システムクラッシュ時にデータが損傷する危険性があります。 このオプションの指定は fsync 設定パラメータを無効にすることと同一です。 このオプションを使用する時は、事前に詳細な文書を一読してください。

-h hostname

postgres がクライアントアプリケーションとの接続を監視するIPホスト名、または、IPアドレスを指定します。 この値には、カンマで区切ったアドレスの一覧だけでなく、全ての利用可能なインタフェースを監視することを意味する * を指定することができます。 空の値を指定すると、IPアドレスをまったく監視しないことを意味します。 この場合、サーバへの接続には、Unixドメインソケットのみが使用されます。 デフォルトでは localhost のみを監視します。 このオプション指定は listen_addresses 設定パラメータを設定することと同一です。

-i

リモートクライアントからのTCP/IP(インターネットドメイン)経由の接続を可能とします。 このオプションを設定しない場合には、ローカルからの接続のみが使用可能となります。 このオプションは、 postgresql.conf 内の listen_addresses を、あるいは -h * に設定することと同じ意味を持ちます。

このオプションは listen_addresses の全ての機能を実現することができないため廃止が予定されています。 通常は、直接 listen_addresses を設定する方法をお勧めします。

-k directory

postgres がクライアントアプリケーションからの接続を監視するUnixドメインソケットのディレクトリを指定します。 値をディレクトリをカンマで区切ったリストとすることもできます。 空の値を指定すると、Unixドメインソケットをまったく監視しません。この場合サーバに接続するためにはTCP/IPのみを使用することができます。 デフォルトでは、通常 /tmp となっていますが、これは構築時に変更できます。 このオプションを指定することと unix_socket_directory 設定パラメータを設定することと同じです。

-l

SSL を使用して、安全な接続を行います。 このオプションを使用するためには、 PostgreSQL のコンパイル時に SSL を有効にする必要があります。 SSL の使用に関する詳細は 項17.9 を参照してください。

-N max-connections

このサーバが受け付けるクライアント接続数の最大値を設定します。 この値のデフォルト値は initdb により自動的に選択されます。 このオプションの指定は max_connections 設定パラメータを設定することと同じ意味を持ちます。

-o extra-options

extra-options で指定されたコマンドラインオプションは、この postgres プロセスにより開始された全てのサーバプロセスに引き渡されます。 このオプションの文字列に空白文字が含まれている場合には、文字列全体を引用符で囲む必要があります。

このオプションの使用は非推奨です。 サーバプロセス用のすべてのコマンドラインオプションは postgres コマンドラインで直接指定することができます。

-p port

クライアントアプリケーションからの接続を postgres が監視するTCP/IPポート、またはローカルUnixドメインソケットファイルの拡張子を指定します。 デフォルトでは、 PGPORT 環境変数、 PGPORT が設定されていない場合はコンパイル時に設定された値(通常5432)が使用されます。 デフォルトのポート以外を指定した場合には、コマンドラインオプション、または PGPORT を使用して、全てのクライアントアプリケーションが同じポートを指定するようにしなければなりません。

-s

各コマンドの終了時に時間情報や他の統計情報を表示します。 これはベンチマークやバッファ数の調整時の使用に適しています。

-S work-mem

一時ディスクファイルで再ソート処理を行う前に内部的なソート処理やハッシュ処理で使用するメモリ量を指定します。 項18.4.1 work_mem 設定パラメータの説明を参照してください。

-V
--version

postgres のバージョンを表示し、終了します。

-- name = value

名前付き実行時パラメータを設定します。 -c の省略形式です。

--describe-config

このオプションは、サーバの内部設定変数、その説明、および、デフォルト値をタブ区切りの COPY 書式でダンプ出力します。 これは、管理用ツールからの使用を主目的として設計されました。

-?
--help

postgres のコマンドライン引数に関する説明を表示し、終了します。

開発者向けオプション

ここで説明するオプションは、主にデバッグ用に、まれに深刻な障害を受けたデータベースの復旧を補助するために使われます。 これらを運用状態のデータベースの設定として使用する理由はないはずです。 これらのオプションを列挙しておくのは、 PostgreSQL システム開発者のためです。 さらに、これらのオプションは、いずれも将来のリリースで予告なしに変更・廃止される可能性があります。

-f { s | i | o | b | t | n | m | h }

特定のスキャンと結合方式の使用を禁止します。 s はシーケンシャルスキャン、 i はインデックススキャンを無効にします。 o b t はそれぞれ、インデックスオンリースキャン、ビットマップインデックススキャン、TIDスキャンを無効にします。 n はネストループ結合、 m はマージ結合、 h はハッシュ結合を無効にします。

シーケンシャルスキャンとネストループ結合は、完全に無効にすることはできません。 -fs オプションと -fn オプションは、単に「他の選択肢があるならば、これらの種類の計画を使わないようにする」ということをオプティマイザに指示するだけです。

-n

これはサーバプロセスが異常終了する問題をデバッグするためのオプションです。 このような状態では、他のすべてのサーバプロセスに対し、終了し、共有メモリやセマフォを再初期化するように通知するのが、通常の戦略です。 エラーが起きたサーバプロセスが、終了する前に、何かしら破損した共有状態を持っていたことが原因かもしれません。 このオプションは、 postgres が共有データ構造を再初期化しないように指定します。 知識のあるシステムプログラマであれば、その後にデバッガを使用して共有メモリやセマフォの状態を検証することができます。

-O

システムテーブルの構造の変更を可能にします。 これは initdb によって使われます。

-P

システムテーブルの読み込みの際にシステムインデックスを無視します システムテーブルの更新の際にはインデックスは更新されます。 破損したシステムインデックスから復旧する場合に有用です。

-t pa[rser] | pl[anner] | e[xecutor]

主要なシステムモジュールに関連する問い合わせに対し、個別に時間に関する統計情報を表示します。 このオプションは -s オプションと一緒に使うことはできません。

-T

これはサーバプロセスが異常終了する問題をデバッグするためのオプションです。 このような状態では、他のすべてのサーバプロセスに対し、終了し、共有メモリやセマフォを再初期化するように通知するのが、通常の戦略です。 エラーが起きたサーバプロセスが、終了する前に、何かしら破損した共有状態を持っていたことが原因かもしれません。 このオプションは、 postgres が他のすべてのサーバプロセスに対し SIGSTOP シグナルを送信して、終了させるのではなく停止させることを指定します。 これによりシステムプログラマはすべてのサーバプロセスのコアダンプを手作業で収集することができます。

-v protocol

特定のセッションで使われるフロントエンド/バックエンドプロトコルのバージョン番号を指定します。 このオプションは内部使用のみを目的としたものです。

-W seconds

新規サーバプロセスが起動したときに指定した秒数の遅延が発生します。 認証手続きはこの後で行われます。 サーバプロセスにデバッガを接続する時間を提供することが目的です。

シングルユーザモード用のオプション

以下のオプションはシングルユーザモードに対してのみ適用されます。

--single

シングルユーザモードを選択します。 これはコマンドラインで最初の引数でなければなりません。

database

アクセスするデータベースの名称を指定します。 これはコマンドラインの最後の引数でなければなりません。 省略時は、デフォルトでユーザ名になります。

-E

すべてのコマンドをエコー表示します。

-j

改行文字を文の区切り文字として使用することを無効にします。

-r filename

全てのサーバログを filename に送ります。 通常のマルチユーザモードでは、このオプションは無視され、 stderr がすべてのプロセスで使用されます。

環境

PGCLIENTENCODING

クライアントで使用される文字符号化方式のデフォルトです。 (クライアントは個別に変更することができます。) また、この値は設定ファイルでも設定可能です。

PGDATA

デフォルトのデータディレクトリの場所です。

PGDATESTYLE

DateStyle 実行時パラメータのデフォルト値です。 (この環境変数の使用は廃止予定です。)

PGPORT

デフォルトのポート番号です。 (設定ファイル内で設定するほうが好まれています。)

TZ

サーバのタイムゾーンです。

診断

semget shmget について言及するエラーメッセージは、おそらく、適切な共有メモリやセマフォを提供できるようにカーネルを再構築する必要があることを示します。 詳細は 項17.4 を参照してください。 ただし、 shared_buffers の値を小さくして PostgreSQL の共有メモリ消費量を低減する、 max_connections の値を小さくしてセマフォ消費量を低減するといった対策を行うことで、カーネルの再構築を先延ばしすることができます。

他のサーバが既に実行中であることを示すエラーメッセージに対しては、例えば以下のコマンドを使用して、注意深く検査しなければなりません。


$
 
ps ax | grep postgres

もしくは


$
 
ps -ef | grep postgres

どちらを使用するかは、システムによって異なります。 競合するサーバが稼働していないことが確実であれば、メッセージ内で示されたロックファイルを削除して、再度試してください。

ポートをバインドできなかったことを示すエラーメッセージの場合は、 PostgreSQL 以外のプロセスが既にそのポートを使用している可能性が考えられます。 また、 postgres を停止して、すぐに同じポートを使う設定で再起動した場合、このエラーが出ることがあります。 この場合、オペレーティングシステムがポートを閉鎖するまで数秒待ってから再挑戦してください。 最後に、オペレーティングシステムが予約しているポート番号を指定した場合も、このエラーが発生することがあります。 例えば、Unixの多くのバージョンでは1024より小さいポート番号は "信頼できる(trusted)" とみなされており、Unixのスーパーユーザ以外アクセスできません。

注釈

pg_ctl ユーティリティコマンドは、 postgres サーバの起動とシャットダウンを安全かつ簡便にするためのものです。

postgres を終了させるために SIGKILL を使用するのは 可能な限り避けてください 。 これにより、 postgres が保持しているシステムリソース(共有メモリやセマフォ)を解放する前に終了してしまうことを防止できます。 システムリソースが解放されていないと、新しく postgres を起動する時に問題が起こる可能性があります。

postgres サーバを通常に終了させるために、 SIGTERM SIGINT SIGQUIT を使用することができます。 SIGTERM は全てのクライアントが終了するのを待ってから終了させます。 SIGINT は強制的に全てのクライアントとの接続を切断します。 SIGQUIT は適切なシャットダウンを行わないで、即時に終了させます。 この場合、次回の起動時に復旧処理が行われます。

SIGHUP シグナルによりサーバの設定ファイルを再読み込みします。 また、 SIGHUP を個々のサーバプロセスに送信することも可能ですが、通常は意味がありません。

実行中の問い合わせを中止するには、そのコマンドを実行しているプロセスに SIGINT シグナルを送信してください。 きれいにバックエンドプロセスを終了させるためには、対象プロセスに SIGTERM を送信してください。 また、これらの2つと同じ操作を行うSQLから呼び出すことができるものについては 項9.26.2 内の pg_cancel_backend および pg_terminate_backend を参照してください。

postgres サーバでは、通常のクリーンアップを行わずに下位のサーバプロセスを終了させるためには SIGQUIT を使用します。 これは ユーザが使用すべきではありません 。 また、サーバに SIGKILL シグナルを送信するのは好ましくありません。 メインの postgres はこれをクラッシュとして解釈するので、クラッシュからの標準的な復旧手続きの一環として、強制的に共通の親プロセスを持つ postgres プロセスを全て終了させます。

不具合

-- オプションは FreeBSD OpenBSD ではうまく動きません。 代わりに -c を使用してください。 これは対象のオペレーティングシステムの不具合です。 もし修正されなければ、将来の PostgreSQL リリースで回避策を提供する予定です。

使用方法

シングルユーザモードのサーバを起動するには、以下のコマンドを使用してください。


postgres --single -D /usr/local/pgsql/data 

other-options

 my_database

データベースディレクトリの正確なパスを -D で指定します。パスを指定しない時は、必ず PGDATA 環境変数を設定しておいてください。 また、作業対象とするデータベースの名前も指定してください。

通常、シングルユーザモードのサーバでは、改行をコマンド入力の終わりとみなします。 psql におけるセミコロンのような高度な機能はありません。 コマンドが複数行にわたる場合は、改行を入力する前にバックスラッシュを入力しなければなりません(最終行を除く)。

ただし、 -j コマンドラインスイッチを使用した場合は、改行がコマンド入力の終わりとはみなされません。 サーバは標準入力をファイル終端マーク( EOF )まで読み取り、そこまでの入力を1つのコマンド文字列として処理します。 この場合、バックスラッシュと改行の組み合わせは特別扱いされません。

セッションを終了するには、 EOF (通常 Control + D )を入力します。 -j を使用している場合、終了するために EOF を2度連続して入力する必要があります。

シングルユーザモードのサーバには、高度な行編集機能が用意されていないことに注意してください(例えばコマンド履歴機能はありません)。 またシングルユーザモードは、自動チェックポイントなどのバックグラウンド処理をまったく行いません。

デフォルト値を使用する postgres をバックグランドで起動するには、以下を入力してください。


$
 
nohup postgres >logfile 2>&1 </dev/null &

例えば1234というポートを指定した postgres を起動するには、以下を入力してください。


$
 
postgres -p 1234

psql を使用してこのサーバに接続するには、以下のように-pオプションでこのポートを指定してください。


$
 
psql -p 1234

または PGPORT 環境変数を設定する必要があります。


$
 
export PGPORT=1234


$
 
psql

名前付き実行時パラメータを以下のいずれかで設定することができます。


$
 
postgres -c work_mem=1234


$
 
postgres --work-mem=1234

どちらの形式でも、 postgresql.conf 内に記載されているかもしれない work_mem の値を上書きします。 コマンドラインでは、パラメータ内のアンダースコア(_)をアンダースコアとしてもダッシュ記号(-)としても記載できることに注意してください。 おそらく短期間の実験という場合を除き、コマンドラインスイッチに依存するよりも postgresql.conf 内の設定を変更してパラメータを設定する方が実用的です。

関連項目

initdb , pg_ctl


powered by SEO.CUG.NET