pg_ctl
は非常に便利ですが過小評価されているユーティリティであり、開発チームの生活を楽にすることができます。 pg_ctl
の詳細については、以下をお読みください そして、どのように開発とテストのワークフローを改善できるか。
pg_ctlとは何ですか?
pg_ctl は、標準のPostgresディストリビューションに含まれているコマンドラインツールです。 psql などの他の含まれているツールと同様に、Postgres自体がどこにある場合でも利用できます。 およびpg_dump 。
実行可能ファイルは、他のPostgresバイナリと同じディレクトリにあります。正確な場所は、LinuxディストリビューションとPostgresのバージョンによって異なります:
# debain, ubuntu, ...
/usr/lib/postgresql/11/bin
# rhel, centos, ...
/usr/pgsql-11/bin
このディレクトリをPATHに追加するか、pg_ctlをフルパスにエイリアスすることをお勧めします。
他のRDBMSとは異なり、単一のPostgresデータベースサーバープロセス(歴史的には postmaster と呼ばれていました) )、データベースクラスターを管理します 。用語クラスターの使用法 最新ではなく、ネットワーク化されたノードのグループを参照していません。データベースクラスターは、データベースのセットをホストし、それらすべてに共通するいくつかの機能(ロール、物理レプリケーション、WALファイルなど)を備えています。 LinuxディストリビューションによってインストールされるPostgressystemdサービスは、単一データベースクラスターにサービスを提供します。
pg_ctl
を使用できます データベースクラスターを作成します。作成時に、クラスターは完全に単一のディレクトリ内に存在します。必要なすべての構成ファイルが含まれています( postgres.conf 、 pg_hba.conf など)およびデータファイル。これは自己完結型であり、ファイルのアクセス許可が正しく処理されていれば、かなり類似した別のマシンに移動できます。ディレクトリ内にログファイルを配置することもできるため、関連するすべてのファイル(構成、データ、ログ)を1か所にまとめることができます。
データベースクラスターを作成するには、次を使用します。
$ pg_ctl -D myclus initdb
これにより、 myclusというディレクトリが作成されます。 現在のディレクトリの下にあり、そこからサーバーを起動するために必要なすべてのファイルをディレクトリに入力します。
サンプルセッションは次のとおりです:
$ pg_ctl -D myclus initdb
The files belonging to this database system will be owned by user "alice".
This user must also own the server process.
The database cluster will be initialized with locale "C.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
creating directory myclus ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default timezone ... Etc/UTC
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
/usr/lib/postgresql/11/bin/pg_ctl -D myclus -l logfile start
「Postgresサーバー」は基本的にpostmaster データベースクラスタディレクトリの場所で開始されるプロセス。このポストマスタープロセスは、さまざまなバックグラウンドアクティビティを実行し、着信接続を処理する複数のプロセスをターンポーンします。たとえば、htopなどのツールを使用してシステムプロセスツリーを表示すると、このプロセスモデルの動作を確認できます。
新しいデータベースクラスタのポストマスタープロセスを開始するには、次を使用します。
$ pg_ctl -D myclus -l myclus/log start
-l </ code> オプションは、Postgresログファイルの場所を指定します。この場合は、クラスターディレクトリ自体の中にあります。ログファイルをクラスタディレクトリ内に配置することは珍しくありません。
次のような出力が表示されます:
waiting for server to start.... done
server started
リロード、再起動、停止は期待どおりに行われます:
$ pg_ctl -D myclus -l myclus/log reload
server signaled
$ pg_ctl -D myclus -l myclus/log restart
waiting for server to shut down.... done
server stopped
waiting for server to start.... done
server started
$ pg_ctl -D myclus -l myclus/log stop
waiting for server to shut down.... done
server stopped
これで、 psqlなどのクライアントを使用してこの新しいクラスターに接続できるようになります。 およびpgAdmin 。
ただし、実際には、すでにPostgresがマシンにインストールされている場合は、おそらく myclus / postgres.conf
を編集する必要があります。 ポートの値を変更します 、 unix_socket_directories また、 listen_address クラスターが正常に起動する前。これは、システムにインストールされたPostgresserviceがすでにポート5432と unix_socket_directoriesのディレクトリで実行されているためです。 通常のユーザーが書き込むことはできません。デフォルトのlisten_address はlocalhostです。これは、localhostの外部からクラスターに接続できないことを意味します。
pg_ctlを使用している場合 自動テストスクリプトでクラスターを作成および破棄するには、プログラムで myclus / postgres.conf
を編集するよりも、コマンドラインから直接これらのオプションを指定できる方が簡単です。 。次のようなオプションを指定できます:
$ pg_ctl -D myclus -l myclus/log -o "-p 6000 -k /tmp -i" start
これにより、ディレクトリ / tmp に作成されたunixソケットを使用して、ポート6000でサーバーが起動します。 すべてのインターフェースでリッスンします。
これらのオプションは「開始」に対してのみ指定する必要があり、「再起動」を含む他のコマンドでは省略できます。
「-o」内で使用できる便利なオプションが他にもいくつかあります。
-
-F
fsyncを無効にします。これは、テストスクリプトをより速く完了するのに役立ちます -
-B shared_bufffers
shared_buffersの設定値 、例-B 100MB
-
-c conf_var =value
任意の構成値を設定します。例-cwal_level =logic
これらのセットのいくつかの例を次に示します。
$ pg_ctl -D myclus -l myclus/log -o "-p 6000 -k /tmp -i -B 100MB -c wal_level=logical" start
これらのオプションは、実際には postgresのコマンドラインオプションです。 プロセス。その完全なリストはここに記載されています。
EnterpriseDBは、さまざまなプラットフォーム向けのさまざまなPostgresバージョン用のビルド済みバイナリをホストします。これらはインストーラーのないtarballです。
必要なtarballを取得して解凍し、 pg_ctl
を見つけます。 バイナリで、それを使用してクラスターを作成します。 pg_ctl
クラスターを作成/開始するために必要な、関連付けられたinitdb /postgres/その他のバイナリを自動的に検索します。
これは、マシン上の既存のPostgreSQLインストールに関係なく、また独立して使用できます。
pg_ctl
MacOSやWindowsを含むすべてのプラットフォームで利用できます。特に、これを使用して、サービスコントロールマネージャー(SCM)を介して開始および停止できるサービスを簡単に作成できます。サービスを作成するには、次を使用します:
pg_ctl -D myclus -N myclus_service register
これにより、「myclus_service」という自動開始サービスが作成されます。
この機能は、Postgresv10以降でのみ使用できます。